include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=100
uchar time=0
//共阴数码管七段码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77}
void Delay1ms(uint i) //1ms延时程序
{
uint j
for(i>0i--)
{
for(j=0j<164j++)
{}
}
}
void main(void )//主程序
{
TMOD=0X01
ET0=1
EA=1
TH0=(65536-50000)/256//定时50ms
TL0=(65536-50000)%256
TR0=1
while(1)
{
P0=table[num/10]
Delay1ms(2)
P2=table[num%10]
Delay1ms(2)
}
}
void TIMER0()interrupt 1//中断程序
{
TH0=(65536-50000)/256
TL0=(65536-50000)%256
time++
if(time==20)
{
time=0
num--
}
if(num==0)
{
num=100
}
}
用单片机的定时器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
}
}
仿真图如下
1、打开VB6.0,新建一个工程,在窗体中添加三个命令按钮,caption分别改为“设置倒计时”、“启动倒计时”、“继续”,将窗体Form1的caption属性改为“倒计时”,添加一个计时器控件,添加一个文本框。
2、将文本框的Text属性清空,将字体Font属性调整为小四,便于观察,将背景色属性Backcolor调为浅黄色。
3、双击“设置倒计时”命令按钮,进入代码编辑窗口。
4、双击“启动倒计时”命令按钮,进入代码编辑窗口。
5、双击“计时器”控件,进入代码编辑窗口。
6、在代码编辑窗口的通用段进行变量定义:Dim h As Integer, m As Integer, s As Integer '分别存储时分秒Dim a As Integer。
7、双击窗体,进入代码编辑器,在 Form_Load事件中写入代码:Timer1.Enabled = False '先关闭计时器。
8、关闭代码窗口,按下F5运行程序,单击“设置倒计时”命令按钮,d出输入对话框,此时输入分钟数为1,确定。
9、单击“启动倒计时”命令按钮,文本框显示倒计时时间,并时刻变动,至此实现了倒计时功能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)