新手关于消影的问题
时间:10-02
整理:3721RD
点击:
我是新手,正在学习51单片机,也正在做实验。关于消影还是不怎么理解。我用定时器中断做了个0至59秒的计时器,但是影子相对明显,我将硬件情况及程序附上,请各位指点。怎样才能较好地控制消影呢?还有最好能说明白消影的原理,看得比较多,但是还是没有透彻的理解。
1、硬件情况:STC89C52,P0口接三极管控制共阳数码管;
2、程序如下:
1、硬件情况:STC89C52,P0口接三极管控制共阳数码管;
2、程序如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint num1,num2,shi,ge;
- void display(uint,uint);
- uchar code table[]=
- {
- 0xC0,0xF9,0xA4,//定义数码管的显示
- 0xB0,0x99,0x92,
- 0x82,0xF8,0x80,0x90,
- };
- uchar code shit[]=
- {
- 0x0E,0x0D,//定义位选WE1,WE2
- };
- void delay(uint);
- void main()
- {
- TMOD=0x10;
- EA=1;
- ET1=1;
- TR1=1;
- TH1=(65536-45872)/256;
- TL1=(65536-45872)%256;
- P2=0xFF;
- while(1)
- {
- display(shi,ge);
- }
- }
- void display(uint shi,uint ge)
- {
- shi=num2/10; //十位数取整
- P2=0x0E; //位选第一个数码管
- P0=table[shi]; //输出十位数
- delay(1);
- P2=0xFF;
- ge=num2%10; //个位数取余
- P2=0x0D; //位选第二个数码管
- P0=table[ge]; //输出个位数
- delay(1);
- }
- void delay(uint ms)
- {
- uint i,j;
- for(i=ms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void T1_time() interrupt 3 //定时器1中断
- {
- TH1=(65536-45872)/256;
- TL1=(65536-45872)%256;
- num1++;
- if(num1==20) //20次50ms循环
- {
- num1=0;
- num2++;
- if(num2==60) //数字到60后清零
- num2=0;
- }
- }
void display(uint shi,uint ge)
{
P0=0;//段码清0;数码管显示0
shi=num2/10; //十位数取整
P2=0x0E; //位选第一个数码管
P0=table[shi]; //输出十位数
delay(1);
P2=0xFF;
ge=num2%10; //个位数取余
P2=0x0D; //位选第二个数码管
P0=table[ge]; //输出个位数
delay(1);
}
你这个程序为什么不用段存和位存,因为你用了位选和段选
段存、位存用的是锁存器吗?我这个数码管是用三极管驱动的,也可以像锁存器那样操作?