各位前辈,我最近重拾单片机,在实现数码管动态显示的时候遇到一个问题。我按照教程编写了使用两个锁存器实现数码管显示的代码,并使用定时器中断来进行延时的作用。当延时为1s时,可以实现前六个数码管分别从1-6流动。但是,如果将时间降低,我在proteus上无法实现动态显示的效果。仿真中的电路图是我自己画的,代码是按照教程编写的,请各位大佬帮我看一下问题在哪?(有一个蜂鸣器,测试的大佬要关一下,不然很吵
)
- //数码管以1s间隔从0-6,在前六个数码管流水显示
- //问题:在proteus仿真无法实现实验板上的动态数码管显示效果,无法用视觉暂留形成效果!!!!!!
- #include<reg52.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar temp,aa,numdu,numwe;
- sbit dula = P2^6;
- sbit wela = P2^7;
- uchar code table[] = {
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
- uchar code tablewe[] = {
- 0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
- void main()
- {
- numdu = 0;
- numwe = 0;
- aa = 0;
- TMOD = 0x01;//六行代码完成定时器0中断的初始化!!!!!!
- TH0 = (65536-5000)/256;
- TL0 = (65536-5000)%256;
- EA = 1;
- ET0 = 1;
- TR0 = 1;//启动定时器0!!
- while(1)
- {
- if(aa==1)
- {
- aa = 0;
- numdu++;
- if(numdu==7)
- {
- numdu = 1;
- }
- dula = 1;
- P0 = table[numdu];
- dula = 0;
- wela = 1;
- P0 = tablewe[numwe];
- wela = 0;
- numwe++;
- if(numwe==6)
- numwe = 0;
-
- }
- }
- }
- void timer0() interrupt 1
- {
- TH0 = (65536-5000)/256;
- TL0 = (65536-5000)%256;
- aa++;
- }
复制代码
|