您的位置首页百科知识

单片机实习10000s计时器

单片机实习10000s计时器

的有关信息介绍如下:

A.DISP.A~A.DISP.DP对应P0口;1~6对应P1口;都是标号连接的。

单片机实习10000s计时器

#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;//若某低位没有进位,循环提前结束

}

}

}