完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
回复本帖可获得 1 分积分奖励! 每人限 1 次(中奖概率 10%) |
//2014年6月1日23:20:17
#include ***it KEY_IN_4 = P2^7; ***it KEY_IN_3 = P2^6; ***it KEY_IN_2 = P2^5; ***it KEY_IN_1 = P2^4; ***it KEY_OUT_1 = P2^3; ***it KEY_OUT_2 = P2^2; ***it KEY_OUT_3 = P2^1; ***it KEY_OUT_4 = P2^0; ***it ADDR0 = P1^0; ***it ADDR1 = P1^1; ***it ADDR2 = P1^2; ***it ADDR3 = P1^3; ***it ENLED = P1^4; unsigned char code LedChar[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xa7, 0xa1, 0x86, 0x8e }; unsigned char KeyState[4][4] = {{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}}; void main() { unsigned char i, j; unsigned char backup[4][4] = {{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}}; ADDR0 = 0; ADDR1 = 0; ADDR2 = 0; ADDR3 = 1; ENLED = 0; TMOD = 0X01; TH1 = 0XFC; TL1 = 0X67; EA = 1; ET1 = 1; TR1 = 1; P0 = LedChar[0]; while(1) { for(i=0; i<4; i++) { for(j=0; j<4; j++) { if(backup[i][j] != KeyState[i][j]) { if(backup[i][j] == 0 ) { P0 = LedChar[4*i + j]; } backup[i][j] = KeyState[i][j]; } } } } } void key() interrupt 3 { static unsigned char keybuff[4][4] = {{0xff, 0xff, 0xff, 0xff},{0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff},{0xff, 0xff, 0xff, 0xff}}; static unsigned char keyout = 0; unsigned char i; TH1 = 0XFC; TL1 = 0X67; keybuff[keyout][0] = (keybuff[keyout][0] << 1) | KEY_IN_1; keybuff[keyout][1] = (keybuff[keyout][1] << 1) | KEY_IN_2; keybuff[keyout][2] = (keybuff[keyout][2] << 1) | KEY_IN_3; keybuff[keyout][3] = (keybuff[keyout][3] << 1) | KEY_IN_4; for(i=0; i<4; i++) { if(keybuff[keyout][i] & 0x0f == 0x0f) { KeyState[keyout][i] = 1; } else if((keybuff[keyout][i] & 0x0F) == 0x00) //注意这里(keybuff[keyout][i] & 0x0f)一定要加() { KeyState[keyout][i] = 0; } else { } } keyout++; //请注意这里 keyout = keyout & 0x03; //请注意这里 switch (keyout) { case 0: KEY_OUT_4 = 1; KEY_OUT_1 = 0; break; case 1: KEY_OUT_1 = 1; KEY_OUT_2 = 0; break; case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break; case 3: KEY_OUT_3 = 1; KEY_OUT_4 = 0; break; default: break; } /* keyout++; keyout = keyout & 0x03; //若上面的两行移到下面 键盘显示值 就错位了 为什么 不解 */ } //程序问题不大 ,但是有问题不明白 ,在上面两行语句的位置变化。希望大家能帮我解决一下 ,万分谢谢。有兴趣可以叫我qq1012421396 |
|
相关推荐
10个回答
|
|
不会程序 但是支持下
|
|
|
|
非常谢谢您 、、、、、、、、、、、、、、
|
|
|
|
看不懂,要是有电路图,或者每行注释下,会好一点
|
|
|
|
同意4楼的看法,自己也是半吊子,还有很多不太懂
|
|
|
|
/* keyout++;
keyout = keyout & 0x03; //若上面的两行移到下面 键盘显示值 就错位了 为什么 不解 */ keyout可以简单的理解为列值 |
|
|
|
不错!!!!!!!!!!
|
|
|
|
恩恩 对对 不过为行值
|
|
|
|
楼主 表达清楚一点 让人看上去 很费劲
|
|
|
|
|
|
|
|
中断函数里,有这么多语句?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 17:48 , Processed in 0.756896 second(s), Total 90, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号