清翔51单片机按键控制毫秒表显示在数码管上代码
时间: 2024-02-19 15:58:14 浏览: 122
19-按键控制单个数码管显示(51单片机C语言实例Proteus仿真和代码)
5星 · 资源好评率100%
以下是清翔51单片机按键控制毫秒表显示在数码管上的示例代码:
```c
#include <reg51.h>
sbit LED = P1^0; //定义LED灯连接的IO口
sbit KEY = P3^4; //定义按键连接的IO口
sbit D1 = P2^0; //定义第1个数码管连接的IO口
sbit D2 = P2^1; //定义第2个数码管连接的IO口
sbit D3 = P2^2; //定义第3个数码管连接的IO口
sbit D4 = P2^3; //定义第4个数码管连接的IO口
unsigned int Timer0H, Timer0L; //定时器0初值
unsigned int Count; //计数器
unsigned int Second, Minute, Hour, Millisecond; //时间变量
void Timer0Init() //定时器0初始化函数
{
TMOD &= 0xF0; //清空低四位
TMOD |= 0x01; //设置为模式1,16位定时器模式
TH0 = Timer0H; //设置高8位初值
TL0 = Timer0L; //设置低8位初值
ET0 = 1; //允许定时器0中断
TR0 = 1; //启动定时器0
}
void Display(unsigned int num) //数码管显示函数
{
D1 = num % 10; //个位
num /= 10;
D2 = num % 10; //十位
num /= 10;
D3 = num % 10; //百位
num /= 10;
D4 = num % 10; //千位
}
void main()
{
LED = 0; //初始化LED灯状态
KEY = 1; //初始化按键状态
Timer0H = 0xFF; //设置计时初值
Timer0L = 0xFF;
Count = 0; //初始化计数器
Second = 0; //初始化时间变量
Minute = 0;
Hour = 0;
Millisecond = 0;
Timer0Init(); //定时器0初始化
EA = 1; //开启总中断
while(1) //主程序循环
{
if(KEY == 0) //如果按键被按下
{
Delay(10); //延时去抖动
if(KEY == 0) //如果按键仍然被按下
{
Second = 0; //时间清零
Minute = 0;
Hour = 0;
Millisecond = 0;
Display(0); //数码管清零
}
while(!KEY); //等待按键松开
}
Display(Millisecond); //数码管显示毫秒
}
}
void Timer0() interrupt 1 //定时器0中断函数
{
TH0 = Timer0H; //重新设置高8位初值
TL0 = Timer0L; //重新设置低8位初值
Count++; //计数器加1
if(Count >= 10) //如果计数器达到10
{
Count = 0; //计数器清零
Millisecond++; //毫秒加1
if(Millisecond >= 1000) //如果毫秒达到1000
{
Millisecond = 0; //毫秒清零
Second++; //秒加1
if(Second >= 60) //如果秒达到60
{
Second = 0; //秒清零
Minute++; //分加1
if(Minute >= 60) //如果分达到60
{
Minute = 0; //分清零
Hour++; //时加1
if(Hour >= 24) //如果时达到24
{
Hour = 0; //时清零
}
}
}
}
}
}
```
该代码在基础的毫秒表代码基础上,增加了数码管的显示功能。在主程序中,我们通过按键来清零时间变量和数码管显示,同时在数码管中显示毫秒。在定时器0中断函数中,我们每计数到10次(即100毫秒)就更新一次时间变量,并通过Display()函数在数码管中显示。
阅读全文