我是新手,正在学习51单片机,也正在做实验。关于消影还是不怎么理解。我用定时器中断做了个0至59秒的计时器,但是影子相对明显,我将硬件情况及程序附上,请各位指点。怎样才能较好地控制消影呢?还有最好能说明白消影的原理,看得比较多,但是还是没有透彻的理解。
1、硬件情况:STC89C52,P0口接三极管控制共阳数码管;
2、程序如下:
#include
#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;
}
}
|