单片机实习10000s计时器
的有关信息介绍如下:A.DISP.A~A.DISP.DP对应P0口;1~6对应P1口;都是标号连接的。

#include
#include
#define uchar unsigned char
#define uint unsigned int
//段码
uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//6 只数码管上显示的数字
uchar Digits_of_6DSY[]={0,0,0,0,0,0};
uchar Count;
sbit Dot=P0^7;
//延时
void DelayMS(uint ms)
{
uchar t;
while(ms--)
for(t=0;t<120;t++);
}
//主程序
void main()
{
P0=0xff;
Count=0;
TMOD=0x01;
IE=0x82;
TH0=(65536-50000)/256;//50ms 定时
TL0=(65536-50000)%256;
TR0=1;//启动T0
while(1)
{
//显示Digits_of_6DSY~Digits_of_6DSY的内容
P0=0xff;
P1=0x01;
P0=~DSY_CODE[Digits_of_6DSY];
DelayMS(10);
P0=0xff;
P1=0x02;
P0=~DSY_CODE[Digits_of_6DSY];
DelayMS(10);
P0=0xff;
P1=0x04;
P0=~DSY_CODE[Digits_of_6DSY];
DelayMS(10);
P0=0xff;
P1=0x08;
P0=~DSY_CODE[Digits_of_6DSY];
DelayMS(10);
P0=0xff;
P1=0x10;
P0=~DSY_CODE[Digits_of_6DSY];
Dot=0;
DelayMS(10);
P0=0xff;
P1=0x20;
P0=~DSY_CODE[Digits_of_6DSY];
DelayMS(10);
}
}
//T0 中断函数
void Timer0() interrupt 1
{
uchar i;
TH0=(65536-50000)/256;// 恢复初值
TL0=(65536-50000)%256;
if(++Count==2)
{
Count=0;
Digits_of_6DSY++;//0.1s位累加
for(i=0;i<=5;i++)//进位处理
{
if(Digits_of_6DSY[i]==10)
{
Digits_of_6DSY[i]=0;
if(i!=5) Digits_of_6DSY[i+1]++;//如果0~4位分别向高一位进位
}
else break;//若某低位没有进位,循环提前结束
}
}
}



