定时器T0模式0,10S的秒钟,开始,暂存,清零
//本例用定时器控制数码管在开始计时后每隔0.1s递增显示,案例还在唯一的按键上实现了三
//项功能,即开始计时、停止计时、清零。 通过网盘分享的文件:定时器中断0模式0_10MS
//链接: https://pan.baidu.com/s/1ZmNIxJC2Ci-LIhivVg3S9w 提取码: bbtc
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit anjian=P1^0;
uchar y,anjian_shulian,shi_jian,an_jian_zancun;
uchar code shu_zi[]={0X3F,0X06,0X5B,0X4F,0X66,
0X6D,0X7D,0X07,0X7F,0X6F,0X00};
//延时
void yan_shi(uint ms)
{
uchar i,j;
for(i=0;i<ms;i++)
for(j=0;j<110;j++);
}
void anjian_chu_li()
{
if(an_jian_zancun==0)
{
anjian_shulian++;
//索引为1时表示开始计时,定时器中断被许可,定时器被启动;
//索引为2时表示停止计时,定时器中断被禁止,定时器停止运行;
//索引为3时表示清零,由于2出现在3之后,定时器中断已经禁止,定时器也已经停止运行,同时将相应的变量清零。
switch(anjian_shulian)
{
case 1:EA=1;ET0=1;TR0=1;break;//开总中断,开外部中断0允许,开定时器T0的运行控制位,
case 2:EA=0;ET0=1;TR0=0;break;
case 3:P0=0X3F;P2=0X3F;shi_jian=0;y=0;anjian_shulian=0;
}
}
}
void main()
{
P0=0x3F;
P2=0x3F;
anjian_shulian=0;
shi_jian=0;
an_jian_zancun=1;
TMOD=0X01;//模式0,16位定时器
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//定时50MS
while(1)
{
if(an_jian_zancun!=anjian)
{
yan_shi(10);
an_jian_zancun=anjian;
anjian_chu_li();
}
}
}
//T0中断
void zhongduan_1() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//定时50MS
if(++y==2)
{
y=0;
++shi_jian;
P0=shu_zi[shi_jian/10];
P2=shu_zi[shi_jian%10];
if(shi_jian==100)shi_jian=0;
}
}








最新发布