完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
4x4键盘与4个7节显示器实验 电路图: 51程序: #include // 定义8051暂存器之标头档 #define KEYP P2 // 扫瞄输出端口(高位元)及键盘输入端口(低位元) #define SEG7P P0 // 7节显示器(g~a)输出埤 unsigned char code TAB[17]= // 共阳7节显示器(g~a)编码 { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 数字0-4 0x92, 0x82, 0xf8, 0x80, 0x98, // 数字5-9 0xa0, 0x83, 0xa7, 0xa1, 0x84, // 字母a-e(10-14) 0x8e, 0xbf}; // 字母F(15),负号(-) unsigned char disp[4]={ 0xbf, 0xbf, 0xbf, 0xbf }; // 显示阵列初值为负号(-) unsigned char scan[4]={ 0xef, 0xdf ,0xbf ,0x7f }; // 7显示器及键盘之扫瞄码 void delay1ms(int); // 声明延迟函数 void scanner(void); // 声明扫瞄函数 //==主程序================================================ main() // 主程序开始 { while(1) // 无穷回圈,程序一直跑 scanner(); // 扫瞄键盘及显示7段显示器 } // 主程序结束 // === 延迟函数,延迟约x*1ms ================================ void delay1ms(int x) // 防弹跳函数开始 { int i,j; // 声明整数变数i for(i=0;i for(j=0;j<120;j++); // 计数120次,延迟约1ms } // 防弹跳函数结束 // ======= 扫瞄4*4键盘及4个7节显示器函数 ================ void scanner(void) // 扫瞄函数开始 { unsigned char col,row,dig; // 声明变数(col:行,row:列,dig:颢示位) unsigned char rowkey,kcode; // 声明变数(rowkey:列键值,kcode:按键码) for(col=0;col<4;col++) // for回圈,扫瞄第col行 { KEYP = scan[col]; // 高4位输出扫瞄信号,低4位元输入列值 SEG7P = disp[col]; // 输出第col行数字 rowkey= ~KEYP & 0x0f; // 读入KEYP低4位,反相再清除高4位求出列键值 if(rowkey != 0) // 若有按键 { if(rowkey == 0x01) row=0; // 若第0列被按下 else if(rowkey == 0x02) row=1; // 若第1列被按下 else if(rowkey == 0x04) row=2; // 若第2列被按下 else if(rowkey == 0x08) row=3; // 若第3列被按下 kcode = 4 * col + row; // 算出按键之号码 for(dig = 0; dig < 3 ; dig++) // 显示阵列之左3字 disp[dig]=disp[dig+1]; // 将右侧编码左移1位 disp[3]=TAB[kcode]; // 键值编码後,写入最右侧 while(rowkey != 0) // 当按钮未放开 rowkey=~KEYP & 0x0f; // 再读入列键值 } // if叙述(有按键时)结束 delay1ms(4); // 延迟4ms } // for回圈结束(扫瞄col行) } // 扫瞄函数scanner()结束 碰到的问题是按钮不起作用,是不是程序错了,麻烦各位帮帮忙看看。。。 |
|
相关推荐
2个回答
|
|
|
|
|
|
回复 pierceliu 的帖子
main(){ while(1) scanner(); } 这while(1)是在主函数里的一个无穷循环,循环的内容是扫描函数scanner(); while(1)是个死循环,循环的是扫描程序, 我这个程序不知道哪里错了,总调试不出来, |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
195 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
172 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
453 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
697 浏览 2 评论
602 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11990 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 15:13 , Processed in 0.558431 second(s), Total 72, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号