c51两位显示秒表设计,要求:秒数采用两个数码管动态显示;包含两个按键,一个开始计时,—个开始计时,一个结束计时:并在开始计时时,LED灯点亮,结束计时时。LED 灯熄灭。代码
时间: 2024-03-05 13:53:40 浏览: 32
好的,以下是一个基于C51单片机的秒表设计的示例代码,包含两个数码管动态显示秒数和两个按键控制开始计时和结束计时,LED灯在开始计时时点亮,在结束计时时熄灭。
```c
#include <reg52.h>
sbit LED = P1^0; //LED灯控制引脚
sbit KEY_START = P3^2; //开始计时按键
sbit KEY_STOP = P3^3; //结束计时按键
unsigned int cnt = 0; //计时器计数器
unsigned int sec = 0; //秒数计数器
unsigned char code LED_DuanMa[10] = { //数码管段码表
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f //9
};
void delay(unsigned int i) //延时函数
{
unsigned int j,k;
for(j=0;j<i;j++)
{
for(k=0;k<100;k++);
}
}
void init() //初始化函数
{
TMOD = 0x01; //定时器0工作在模式1
TH0 = 0x3c; //定时器初值
TL0 = 0xb0;
EA = 1; //开启总中断
ET0 = 1; //开启定时器0中断
TR0 = 1; //启动定时器0
}
void display(unsigned int num) //数码管显示函数
{
unsigned char shi = num / 10; //十位数
unsigned char ge = num % 10; //个位数
P2 = 0; //清空显示缓存
P0 = LED_DuanMa[shi]; //显示十位数
P2 = 0x01; //选择个位数的数码管
P0 = LED_DuanMa[ge] | 0x80; //显示个位数,点亮小数点
}
void main()
{
init(); //初始化
while(1)
{
if(KEY_START == 0) //按下开始计时按键
{
LED = 1; //点亮LED灯
cnt = 0; //计时器计数器清零
sec = 0; //秒数计数器清零
while(KEY_START == 0); //等待按键松开
}
if(KEY_STOP == 0) //按下结束计时按键
{
LED = 0; //熄灭LED灯
TR0 = 0; //停止定时器0
while(KEY_STOP == 0); //等待按键松开
}
display(sec); //数码管显示秒数
}
}
void timer0() interrupt 1 //定时器0中断服务函数
{
TH0 = 0x3c; //重新赋值定时器初值
TL0 = 0xb0;
cnt++; //计数器加1
if(cnt == 20) //计数器计满20次,即1秒
{
cnt = 0; //计数器清零
sec++; //秒数计数器加1
if(sec == 100) //秒数计数器计满100次,即100秒
{
sec = 0; //秒数计数器清零
}
}
}
```
以上是一个基本的秒表设计的示例代码,具体实现细节可以根据实际情况进行调整。