
1、程序运用定时器产生50ms定时功能,50ms循环定时两次即可达到100ms(即0.1s)的精度要求。
2、利用毫秒与秒的进位十进制关系,秒于分钟六十进制的进位关系,从而设计秒表的工作方式。
3、将30H作为0.1秒的存储单元,31H作为秒的存储单元,32H作为分钟的存储单元,逐次进行显示。
根据以下程序稍做修改,就可以了 下面程序启动和暂停共用一个按键#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P1^0
sbit key2=P1^1
sbit wei1=P1^2//四个个数码管的位驱动(阳极)
sbit wei2=P1^3
sbit wei3=P1^4
sbit wei4=P1^5
uint a=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 display(uint m)//4位显示子程序,第二位后面有个小数点
{
uchar a1,a2,a3,a4
a1=m/1000
a2=m/100%10
a3=m/10%10
a4=m%10
P0=~(table[a1])
wei1=0
Delay1ms(2)
wei1=1
P0=~(0x80|table[a2])
wei2=0
Delay1ms(2)
wei2=1
P0=~(table[a3])
wei3=0
Delay1ms(2)
wei3=1
P0=~(table[a4])
wei4=0
Delay1ms(2)
wei4=1
}
void main(void )//主程序
{
TMOD=0x01// 定时器1工作方式一
ET0=1
EA=1
TH0=(65536-10000)/256//定时10ms
TL0=(65536-10000)%256
TR0=0//上电先不启动
while(1)
{
if(key1==0)//判断按键是否按下
{
Delay1ms(10)//延时消抖
if(key1==0)
{
while(key1==0)//等待按键抬起
TR0=!TR0
}
}
if(key2==0&&TR0==0)//判断按键是否按下及是否在走时
{
Delay1ms(10)//延时消抖
if(key2==0)
{
while(key2==0)//等待按键抬起
a=0
}
}
display(a)
}
}
//中断子程序
void Timer0(void) interrupt 1
{
TH0=(65536-10000)/256
TL0=(65536-10000)%256
a++
if(a==60000) a=0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)