完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/*能暂停,但是暂停后不能开始了,请前辈帮看一下,万分感谢*/
#include #include #define uint unsigned int // 宏定义 #define uchar unsigned char #define dula P0 #define wela P2 ***it k4 = P3^6; // 位定义 ***it k5 = P3^7; uint aa,qian,bai,shi,ge,temp; bit stop = 1; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; void delay(uint z); //子函数声明 void display(uint qian,uint bai,uint shi,uint ge); void init(); void start_timer(); void stop_timer(); void main() //主函数 { init(); //初始化 while(1) { if(k4 == 0) //判断是否按下K4 ,暂停和开始 { delay(10); //消抖 if(k4 == 0) //再次判断是否按下K4按键 { while(k4 == 0); //直到按键判断松开 { if(stop) start_timer(); //打开定时器 else stop_timer(); //关闭定时器 stop = ~ stop; } } } else if(k5 == 0) //按下K5清零 { delay(10); //消抖 if(k5 == 0) //再次判断是否按下K5按键 { while(k5 == 0); { init(); stop_timer(); stop = 1; qian=0; bai=0; shi=0; ge=0; } } } if(aa==2) //数码管显示 { aa=0; temp++; if(temp==9999) { temp=0; } qian=temp/1000%10; //数码管千位 bai=temp/100%10; //数码管百位 shi=temp/10%10; //数码管十位 ge=temp%10; //数码管个位 } display(qian,bai,shi,ge); } } void delay(uint z) //延时子程序 { uint x,y; for(x=z;x>0;x--) for(y=114;y>0;y--); } void display(uint qian,uint bai,uint shi,uint ge) //数码管显示子程序 { dula=table[qian]; wela=0x18; delay(1); dula=table1[bai]; wela=0x28; delay(1); dula=table[shi]; wela=0x48; delay(1); dula=table[ge]; wela=0x88; delay(1); } void start_timer() //开启定时器子程序 { ET0=1; EA=1; TR0=1; } void stop_timer() //关闭定时器子程序 { ET0=0; EA=0; TR0=0; } void init() //初始化子程序 { temp=0; TMOD = 0x01; TH0=(65536-4608)/256; TL0=(65536-4608)%256; } void timer0() interrupt 1 //定时器延时子程序 { TH0=(65536-4608)/256; TL0=(65536-4608)%256; aa++; } |
|
相关推荐
7个回答
|
|
暂停、启动部分的程序没有问题,应该是6楼说的原因,实际是不能刷新显示了。
void timer0() interrupt 1 //定时器延时子程序 { TH0=(65536-4608)/256; TL0=(65536-4608)%256; aa++; } 其中的aa++应该修改为temp++,因为你需要显示的是temp。 uint aa,qian,bai,shi,ge,temp,temp1; temp1=0xff00; 把if(aa==2) 修改成: if (temp!=temp1) { temp1=temp; 你原来程序中的显示程序拷贝到这里 } |
|
|
|
把else去掉试一下?
|
|
|
|
程序逻辑就不清晰
|
|
|
|
刚学51不久,请教哪个地方需要改进的!
|
|
|
|
|
|
|
|
|
|
|
|
谢谢,我确实是这样的!后面自己也想清楚了
|
|
|
|
只有小组成员才能发言,加入小组>>
3320 浏览 9 评论
3000 浏览 16 评论
3497 浏览 1 评论
9069 浏览 16 评论
4090 浏览 18 评论
1190浏览 3评论
612浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2339浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 15:19 , Processed in 1.271431 second(s), Total 89, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号