完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
程序只是读取PS2的键码,在数码管显示,问题出现在最后,发现复位后,第一个按键的键码是正确的,而再按其他按键时,开始出现乱码;而复位后,也就只是第一次按的按键的键码才正确,调试了很久都发现不了原因,有没有哪个人可以从代码中发现错误呢?
#include #include #define uint unsigned int #define uchar unsigned char #define _Nop() _nop_() ***it psdata=P3^0; ***it psclk=P3^2; uchar code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; uchar sled_data[2]={16,16}; /*缓冲值*/ uchar code light[2]={0xfe,0xfd};/*定义需要点亮的数码管*/ uchar numbit; uchar keyv; uchar key[3]; uchar keynum; /*1MS为单位的延时程序*/ void delay_1ms(uchar x) { uchar j; while(x--){ for(j=0;j<125;j++) ; } } void main() { uchar i; IT0=1;//外部中断下降沿触发 EX0=1; EA=1; while(1) { if(keynum==3) //读完键码后,取第一个键码 { keynum=0; sled_data[0]=key[0]/16; sled_data[1]=key[0]%16; } for(i=0;i<2;i++) //数码管显示 { P2 = 0xff; /*关闭显示*/ _Nop(); _Nop(); _Nop(); 0 = num[sled_data]; /*输出段码数据到数码管*/ 2 = light; /*输出位码数据到数码管*/ delay_1ms(1); } } } void int0() interrupt 0 //读取键码 { if((numbit>0) && (numbit<9)) { keyv=keyv>>1; if(psdata) keyv=keyv | 0x80; } numbit++; if(numbit>10) { numbit=0; key[keynum]=keyv; //保存键码 keynum++; } } |
|
相关推荐
2个回答
|
|
|
哎,在这里捣乱了,低级错误!!IT0应该设为低电平才对。
|
|
|
|
|
|
哦哦...
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1851 浏览 0 评论
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
4767 浏览 0 评论
4248 浏览 9 评论
3839 浏览 16 评论
4413 浏览 1 评论
4233浏览 3评论
2397浏览 0评论
3416浏览 0评论
1176浏览 0评论
2862浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-9 05:12 , Processed in 0.722711 second(s), Total 78, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3083