51单片机头文件为#include<reg52.h>的数码管上能显示可调的日期时钟和秒表并且具有闹钟功能的代码
时间: 2024-04-16 15:26:46 浏览: 178
51单片机数码管时钟程序
4星 · 用户满意度95%
以下一个使用51单片机和码管显示可调的日期时钟、秒表和闹钟功能的示例代码:
```c
#include <reg52.h>
// 定义数码管显示的数字对应的编码
unsigned char code display_num[] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90
};
// 定义按键对应的IO口和值
sbit key1 = P1^0; // 按键1
sbit key2 = P1^1; // 按键2
// 定义全局变量
unsigned char hour = 0; // 小时
unsigned char minute = 0; // 分钟
unsigned char second = 0; // 秒钟
unsigned char alarm_hour = 0; // 闹钟小时
unsigned char alarm_minute = 0; // 闹钟分钟
// 延时函数
void delay(unsigned int t) {
while (t--);
}
// 数码管显示函数
void display(unsigned char num) {
P2 = display_num[num / 10]; // 十位数
P0 = 0xFE; // 第一位数码管
delay(100);
P0 = 0xFF; // 熄灭数码管
P2 = display_num[num % 10]; // 个位数
P0 = 0xFD; // 第二位数码管
delay(100);
P0 = 0xFF; // 熄灭数码管
}
// 更新时间函数
void update_time() {
if (++second >= 60) {
second = 0;
if (++minute >= 60) {
minute = 0;
if (++hour >= 24) {
hour = 0;
}
}
}
}
// 主函数
void main() {
// 初始化定时器
TMOD = 0x01; // 定时器0,模式1
TH0 = 0xFC; // 定时器初值
TL0 = 0x67;
TR0 = 1; // 启动定时器
// 主循环
while (1) {
update_time(); // 更新时间
// 显示时间
display(hour);
delay(500);
display(minute);
delay(500);
// 判断是否按下按键1,进入设置时间模式
if (key1 == 0) {
delay(10); // 延时去抖动
if (key1 == 0) {
while (key1 == 0); // 等待按键释放
// 进入设置小时模式
while (1) {
display(hour);
delay(500);
// 判断是否按下按键1,增加小时数
if (key1 == 0) {
delay(10);
if (key1 == 0) {
while (key1 == 0);
if (++hour >= 24) {
hour = 0;
}
}
}
// 判断是否按下按键2,保存并退出设置小时模式
if (key2 == 0) {
delay(10);
if (key2 == 0) {
while (key2 == 0);
break;
}
}
}
// 进入设置分钟模式
while (1) {
display(minute);
delay(500);
// 判断是否按下按键1,增加分钟数
if (key1 == 0) {
delay(10);
if (key1 == 0) {
while (key1 == 0);
if (++minute >= 60) {
minute = 0;
}
}
}
// 判断是否按下按键2,保存并退出设置分钟模式
if (key2 == 0) {
delay(10);
if (key2 == 0) {
while (key2 == 0);
break;
}
}
}
}
}
// 判断闹钟是否到达设定时间
if (hour == alarm_hour && minute == alarm_minute && second == 0) {
// 响铃
for (int i = 0; i < 5; i++) {
display(88); // 显示闹钟图标
delay(500);
P0 = 0xFF; // 熄灭数码管
delay(500);
}
}
}
}
```
请注意,该代码仅为示例,并未进行完整的调试和测试,可能存在一些问题。你可以根据自己的需求进行修改和优化。
阅读全文