如何设计这个单片机数字秒表程序?

2025-04-07 02:36:48
推荐回答(1个)
回答1:

根据以下程序稍做修改,就可以了 下面程序启动和暂停共用一个按键
#include
#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>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
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;
}