完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
小弟自己写的程序,结果又遇到问题了(话说我这问题的速度都快赶上每日一题了T_T)大神们求围观。。
题目:数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。(用定时器设计表)。 问题:我的数码管没问题,不知道独立按键那一部分哪个地方有错误。 #include #define uchar unsigned char #define uint unsigned int ***it dula=P3^4; ***it wela=P3^5; ***it key=P2^0; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar bai,shi,ge; uint num,x; void init(); void delay(uint); void display(uint); void keyscan(); void main() { init(); while(1) { keyscan(); display(num); } } void init() //初始化 { num=0; TMOD=0x01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1; TR0=1; } void display(uint num) //关于数码管的函数 { bai=num/100; shi=num%100/10; ge=num%10; dula=1; P1=table[bai]; dula=0; P1=0xff; wela=1; P1=0xfe; wela=0; delay(1); dula=1; P1=table[shi]; dula=0; P1=0xff; wela=1; P1=0xfd; wela=0; delay(1); dula=1; P1=table[ge]; dula=0; P1=0xff; wela=1; P1=0xfb; wela=0; delay(1); } void delay(uint x) //延迟函数 { uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void timer0() interrupt 1 //定时器 { TH0=(65536-10000)/256; TL0=(65536-10000)%256; num++; if(num==1000) num=0; } void keyscan() //键盘扫描 { if(key==0) { delay(10); if(key==0) { TR0=0; while(!key); TR0=~TR0; } } } 再次感谢各位大神的围观和指点! 评分 |
|
相关推荐
3 个讨论
|
|
将按键部分修改如下:
void keyscan() //键盘扫描 { if(key==0) { delay(10); if(key==0) { //TR0=0; //将这一句去掉 while(!key); TR0=~TR0; } } } 每次有按键按下的时候,你让TR0=0; 定时器关闭,然后按键一松开,你就TR0=1;由于按键按下的时间非常短,每次其实暂停了,不过你一松开他又接着开始计时了。如果你将TR0=0; 去掉;按键按下无反应,当按键松开时,对定时器取反:如果原先是开,那么关,如果原先是关,则开。 你的注释还有待提高 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-4 10:54 , Processed in 0.477168 second(s), Total 78, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号