完善资料让更多小伙伴认识你,还能领取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应该设为低电平才对。
|
|
|
|
哦哦...
|
|
|
|
只有小组成员才能发言,加入小组>>
3260 浏览 9 评论
2942 浏览 16 评论
3442 浏览 1 评论
8945 浏览 16 评论
4035 浏览 18 评论
1075浏览 3评论
558浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
551浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2286浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1844浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-7 05:32 , Processed in 1.058653 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号