完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
中断中是不是能不能有display(a,b,c,d...)函数啊,我用的定时器中断,但是display没有用,a,b,c,d...是全局变量。(想做一个以10ms为最小单位的秒表)--(小时)--(分)--(秒)--(100ms 和 10ms)
如下:数码管没有显示 #include #include #define uint unsigned int #define uchar unsigned char ***it dula = P2^6;//数码管段选 ***it wela = P2^7;//数码管段选 char a0,b0,c0,d0,e0,f0,g0,h0; unsigned long num=0; //共阴数码管段选表0-9 unsigned char code table[10]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); } void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f,uchar g,uchar h) { dula=0; P0=table[a]; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(2); P0=table; dula=1; dula=0; P0=0xfd; wela=1; wela=0; delay(2); P0=table[c]; dula=1; dula=0; P0=0xfb; wela=1; wela=0; delay(2); P0=table[d]; dula=1; dula=0; P0=0xf7; wela=1; wela=0; delay(2); P0=table[e]; dula=1; dula=0; P0=0xef; wela=1; wela=0; delay(2); P0=table[f]; dula=1; dula=0; P0=0xdf; wela=1; wela=0; delay(2); P0=table[g]; dula=1; dula=0; P0=0xbf; wela=1; wela=0; delay(2); P0=table[h]; dula=1; dula=0; P0=0x7f; wela=1; wela=0; delay(2); } void time0() interrupt 1 { TH0=0xff; TL0=0xff; display(a0,b0,c0,d0,e0,f0,g0,h0); } //定时器0初始化 void timer0Init() { TR0 = 1; //启动定时器0 TMOD = 0X01; //定时器工作模式1,16位定时器计数模式 TH0 = 0xff; TL0 = 0xff;//达不到啊!!!!!! } void main()//main函数自身会循环 { timer0Init();//定时器0初始化 while(1) { if(e0==6&&g0==9&&h0==9&&c0!=6) num=num+3901; else if(e0==6&&g0==9&&h0==9&&c0==6&&(a0!=2&&b0!=4)) num=num+393901; else if(e0==6&&g0==9&&h0==9&&c0==6&&(a0==2&&b0==4)) num=0; else num++; } a0=num/10000000;b0=num%10000000/1000000;c0=num%1000000/100000;d0=num%100000/10000;e0=num%10000/1000;f0=num%1000/100;g0=num%100/10;h0=num%10; } |
|
相关推荐
6个回答
|
|
这个程序架构不好,定时器只做时间计数用就好,数码管显示要独立出来,对计数进行时间换算,并在相应的时间位上显示当前计数时间就好!
|
|
|
|
1.可以用delay 但是用了display之后你的程序很长一段时间是在中断里面的 这样的坏处是 “死在”中断里面(你的disply里面有很多的delay) 外面的程序得不到执行 效率低
2.你标题里面提到了 (想做一个以10ms为最小单位的秒表)--(小时)--(分)--(秒)--(100ms 和 10ms) 由于你的display函数用了很多delay 所以你的时间很难准确 |
|
|
|
另外,10ms在数码管显示你可能根本看不出来显示了,太快了!
|
|
|
|
是的,谢谢。
|
|
|
|
嗯,谢谢。
|
|
|
|
定时中断只要计数就可以了,别的就不要做了,display放到主程序中即可
|
|
|
|
只有小组成员才能发言,加入小组>>
3280 浏览 9 评论
2958 浏览 16 评论
3460 浏览 1 评论
9005 浏览 16 评论
4052 浏览 18 评论
1118浏览 3评论
574浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
571浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2304浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1860浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 16:31 , Processed in 1.269657 second(s), Total 90, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号