作者kinkipikachu (提琴手的无弦之声)
看板ASM
标题Re: [请益] 4X4的 keyboard 写法
时间Sat Feb 13 20:54:19 2010
※ 引述《kinkipikachu (提琴手的无弦之声)》之铭言:
对不起...我想再补充一下图...
P0.4 P0.5 P0.6 P0.7
| | | |
B| B| B| B|
P0.3 -------------------------------------------R-------VCC
B| B| B| B|
P0.2 -------------------------------------------R-------VCC
B| B| B| B|
P0.1 -------------------------------------------R-------VCC
B| B| B| B|
P0.0 -------------------------------------------R-------VCC
我是采用书本上的高态动做...
P0.4 ~ P0.7 是做 SCAN...
P0.3 ~ P0.0 是做 接收....
课本我是可以做的出来...
但是换成我自己的想法所打的程式..
却不能执行.....但是我不知道我的观念错在那里 ???
如果是 P0.4 送出 0 而且 P0.3 接收到0
所以就想 P0 = 0xe7 送出 key=3
但是好像不是我所想的容易 ????
烦请有经验的大大 解答我的疑惑 谢谢....
: 小弟知道网路上跟书上有很多,我自己试写了一个
: 用 keil c 写的 keypad 程式,但是七段就是不会亮,
: 请大大指点一下我错误的观念,我不知错再哪里?
: 硬体架构:
: OUTPUT 接收
: 89S51 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
: 采用低态驱动
: P2 接 7段显示器
: 程式:
: #include <AT89X51.H>
: char keypad(void);
: code char
: table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
: 0x83,0xc6,0xa1,0x86,0x8e,0xff};
: main()
: {
: char n;
: while(1)
: {
: n=table[keypad()];
: P2=~n;
: }
: }
: char keypad(void)
: {
: char key=16;
: if (P0==0x77)
: {
: key=0;
: return key;
: }
: else if (P0==0x7b)
: {
: key=1;
: return key;
: }
: else if (P0==0x7c)
: {
: key=2;
: return key;
: }
: else if (P0==0x7e)
: {
: key=3;
: return key;
: }
: else if (P0==0xb7)
: {
: key=4;
: return key;
: }
: else if (P0==0xbb)
: {
: key=5;
: return key;
: }
: else if (P0==0xbc)
: {
: key=6;
: return key;
: }
: else if (P0==0xbe)
: {
: key=7;
: return key;
: }
: else if (P0==0xc7)
: {
: key=8;
: return key;
: }
: else if (P0==0xcb)
: {
: key=9;
: return key;
: }
: else if (P0==0xce)
: {
: key=10;
: return key;
: }
: else if (P0==0xc7)
: {
: key=11;
: return key;
: }
: else if (P0==0xe7)
: {
: key=12;
: return key;
: }
: else if (P0==0xeb)
: {
: key=13;
: return key;
: }
: else if (P0==0xec)
: {
: key=14;
: return key;
: }
: else if (P0==0xee)
: {
: key=15;
: return key;
: }
: }
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.150.236
1F:推 WolfLord:高态动做的话,你的电路会导致CPU混乱分辨不出谁被按了 02/13 21:32
2F:推 WolfLord:8051并不合适采HIGH ACTIVE但是仍然想用高动作最好用P1P2 02/13 21:44
3F:推 ruemann:我倒觉得这个电路还OK,只是他程式中P0.4~P0.7没有做输出 02/13 23:02
4F:→ ruemann:也就是没有做scan的动作…… 02/13 23:03