完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
先贴上原理图:
其中JP4的8口接P2^8,7口接P2^7,以此类推。然后下面是程序:
#include unsigned char code Led_Display[]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; unsigned char keysta[4][4]={ {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}}; unsigned char keybackup[4][4] ={ {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}}; void initial_myself(); void initial_peripheral(); void delay_long(unsigned int uiDelayLong); void keyservice(); void keyscan(); void InterruptTime0(); ***it keyout1_dr = P2^7; ***it keyout2_dr = P2^6; ***it keyout3_dr = P2^5; ***it keyout4_dr = P2^4; ***it keyin1_sr = P2^3; ***it keyin2_sr = P2^2; ***it keyin3_sr = P2^1; ***it keyin4_sr = P2^0; void main() { initial_myself(); delay_long(100); initial_peripheral(); while(1) { keyservice(); } } void keyservice() { unsigned char i; unsigned char j; for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(keybackup[j]!=keysta[j]) { if(keybackup[j]==0) { P0 = Led_Display[i*4+j]; } keybackup[j]=keysta[j]; } } } } void keyscan() { unsigned char i; static unsigned char keyout = 0; static unsigned char keybuf[4][4]={ {0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF}}; keybuf[keyout][0] = (keybuf[keyout][0]<<1)| keyin1_sr; keybuf[keyout][1] = (keybuf[keyout][1]<<1)| keyin2_sr; keybuf[keyout][2] = (keybuf[keyout][2]<<1)| keyin3_sr; keybuf[keyout][3] = (keybuf[keyout][3]<<1)| keyin4_sr; for(i=0;i<4;i++) { if((keybuf[keyout]&0x0F)==0x00) { keysta[keyout]=0; } else if((keybuf[keyout]&0x0F)==0x0F); { keysta[keyout]=1; } } keyout++; keyout=keyout&0x03; switch(keyout) { case 0:P0=0x7F;break; case 1:P0=0xBF;break; case 2:P0=0xDF;break; case 3:P0=0xEF;break; default:break; } } void InterruptTime0() interrupt 1 { TF0 = 0; TR0 = 0; keyscan(); TH0 = 0xF8; TL0 = 0x30; TR0 = 1; } void delay_long(unsigned int DelayLong) { unsigned int i; unsigned int j; for(i=0;i for(j=0;j<50;j++) { ; } } } void initial_myself() { TMOD = 0x01; TH0 = 0xF8; TL0 = 0x30; P0 = Led_Display[0]; } void initial_peripheral() { EA = 1; ET0 = 1; TR0 = 1; } 我编程的思路是这样的:每1ms 中断一次,扫描按键状态,按一下为0,然后把0输送给备份值,当检测到4次都为0,则判断为按下,然后执行按键服务函数。 我出现的问题是:无论怎么按,都没反应, 望大神告诉哪里出现问题啊! 补充内容 (2016-8-23 14:07): 程序复制上来 有些地方没复制上,二维数组中的都不见了!实际程序有的! 补充内容 (2016-8-23 14:07): [ i ] |
|
相关推荐
8个回答
|
|
|
|
|
|
宋老师的程序被你改成这样,也是醉了,先把人家原创的程序分析明白,再去修改
|
|
|
|
|
|
|
|
原创我是弄明白啦,然后我是加上鸿哥的 3区一线理念去修改的,只是让程序更可读性吧! |
|
|
|
还是老老实实的把宋老师的东西弄明白吧,你这样搞,要走弯路。。。 |
|
|
|
实际板子的话, 那就说明板子没有问题; 问题会是出现在你的程序中; 建议你排查的时候, 分步去看看, 在执行到按键的时候, 是否相关的数值有给到keybuffer中;建议一步步的去看看。 如果都OK,建议先实现按键就执行按键服务函数,在来添加按键次数。 |
|
|
|
问题是啥。怎么没发现
|
|
|
|
初始化你自己,延时,初始化外设。,然后死循环按键服务再然后,一个嵌套循环,就完了?你键盘扫描怎么进去,我没看到啊?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
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积木平台
12026 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 10:52 , Processed in 0.965694 second(s), Total 86, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号