用单片机的定时器T0定时,计时1秒,实现倒计时的秒表的功能。
程序如下
#include<reg51.h>
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}//共阳数码管段码表
unsigned char second//秒倒计时变量
unsigned char t0n//T0中断次数计数
sbit k1=P3^2//定义按键
void delay()
{
unsigned int j
for(j=400j>0j--)
}
void display()//显示子程序
{
P2=0x01
P0=tab[second/10]//显示十位
delay()
P2=0x02
P0=tab[second%10]//显示个位
delay()
}
void main()
{
TMOD=0x01//用T0定时,中断方式
TH0 =0x3C//晶振12M,定时50ms
TL0 =0xB0
IE =0x82
while(1)
{
display()//调显示子程序
if(k1==0)//按键按下
{
if(TR0==0)
{
TR0=1//启动开始计时
second=60//从60秒开始倒计时
}
else
TR0=0
while(k1==0)//等待按键释放
}
}
}
//T0中断程序
void T0_int() interrupt 1
{
TH0 =0x3C
TL0 =0xB0
t0n++
if(t0n>=20)//1秒到
{
t0n=0
second--//减1秒
if(second==0)TR0=0
}
}
这个程序可以实现秒的计时,按键控制开始、暂停、清零功能,更多功能自己在看清程序的基础上进行改进。#include <reg51.H>
sbit P3_5 =P3^5
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00}
unsigned char second
unsigned char keycnt
unsigned int tcnt
void main(void)
{
unsigned char i,j
TMOD=0x02
ET0=1
EA=1
second=0
P1=dispcode[second/10]
P2=dispcode[second%10]
while(1)
{
if(P3_5==0)
{
for(i=20i>0i--)
for(j=248j>0j--)
if(P3_5==0)
{
keycnt++
switch(keycnt)
{
case 1:
TH0=0x06
TL0=0x06
TR0=1
break
case 2:
TR0=0
break
case 3:
keycnt=0
second=0
P1=dispcode[second/10]
P2=dispcode[second%10]
break
}
while(P3_5==0)
}
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++
if(tcnt==4000)
{
tcnt=0
second++
if(second==100)
{
second=0
}
P1=dispcode[second/10]
P2=dispcode[second%10]
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)