完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
楼主有仿真过多个数码管动态扫描吗? 你这种情况应该是消影存在问题,仿真不像实物,实物数码管消影如果没做好,至少还能看清数字,但是仿真的话就会出现你图片的那种情况。
建议 将动态扫描频率设置很低,观察数码管的显示情况。。 楼主可以将程序贴出来,给你分析分析。 |
|
|
|
动态扫描还是可行的,至少是可以显示的,但是中断就不行了,以下是哪个中断程序,应该没有错,仿真的数码管是共阴极的。 #include #define uint unsigned int #define uchar unsigned char ***it led=P1^0; ***it dula=P2^6; ***it wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delayms(uint); void display(uchar,uchar); uchar num,num1,num2,shi,ge; void main() { TMOD=0x11; TH0=(65536-45872)/256; TL0=(65536-45872)%256; TH1=(65536-45872)/256; TL1=(65536-45872)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; while(1) { display(shi,ge); } } void display(uchar shi,uchar ge) { dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delayms(5); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delayms(5); } void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void T0_time() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; num1++; if(num1==4) { num1=0; led=~led; } } void T1_time() interrupt 3 { TH1=(65536-45872)/256; TL1=(65536-45872)%256; num2++; if(num2==20) { num2=0; num++; if(num==60) num=0; shi=num/10; ge=num%10; } } |
|
|
|
看样子好像要做个秒表,整这么麻烦
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这个我也遇到过,其实在现实的板子显示是正常的,要在仿真显示正常,只要在位选,段选前加消影和延时,即P0=0xff;delay(5);就行,你试试看吧。我也是试了好多次
|
|
|
|
估计是位选没设置好,应该是一次只打开一位数码管的
|
|
|
|
|
|
|
|
|
|
|
|
同样学习了,谢谢谢谢,字数不够,呵呵
|
|
|
|
我现在也遇到楼主这样的问题,请问怎么解决啊
|
|
|
|
一个定时器就能搞定,ge、shi被重复定义。改一下:
#include #define uint unsigned int #define uchar unsigned char ***it led=P1^0; ***it dula=P2^6; ***it wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delayms(uint); void display(); uchar num,num1,num2,shi,ge; void main() { TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; // TH1=(65536-45872)/256; // TL1=(65536-45872)%256; EA=1; ET0=1; // ET1=1; TR0=1; // TR1=1; while(1) { display(); } } void display() { dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delayms(5); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delayms(5); } void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void T0_time() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; num1++; num2++; if(num1==4) { num1=0; led=~led; } if(num2==20) { num2=0; num++; if(num==60) num=0; shi=num/10; ge=num%10; } } /* void T1_time() interrupt 3 { TH1=(65536-45872)/256; TL1=(65536-45872)%256; num2++; if(num2==20) { num2=0; num++; if(num==60) num=0; shi=num/10; ge=num%10; } } */ |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
852 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
592 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
705 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
926 浏览 2 评论
657 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11998 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 22:26 , Processed in 0.756675 second(s), Total 98, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号