c51单片机用两个端口实现正数计时10秒和倒数10秒用7SEG-MPX2-CA-BULE显示
时间: 2024-03-25 15:39:02 浏览: 190
基于C51单片机计时器
好的,下面是一个简单的C51单片机程序实现正数计时10秒和倒数10秒,并用7SEG-MPX2-CA-BULE进行显示的代码示例:
```c
#include <reg52.h> // 包含C51单片机头文件
#define uchar unsigned char // 定义uchar类型
sbit KEY1 = P1^0; // 定义按键1
sbit KEY2 = P1^1; // 定义按键2
sbit LED = P1^2; // 定义LED灯
sbit D1 = P2^0; // 定义数字管1
sbit D2 = P2^1; // 定义数字管2
sbit D3 = P2^2; // 定义数字管3
sbit D4 = P2^3; // 定义数字管4
uchar code table[] = { // 定义显示数码管的编码表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
uchar second = 0, count = 0; // 定义秒数和计数变量
void delayms(uchar ms) { // 延时函数
uchar i, j;
while (ms--) {
for (i = 0; i < 100; i++) {
for (j = 0; j < 110; j++);
}
}
}
void display(uchar value) { // 数码管显示函数
D1 = table[value / 1000];
D2 = table[value % 1000 / 100];
D3 = table[value % 100 / 10];
D4 = table[value % 10];
}
void main() { // 主函数
EA = 1; // 允许中断
TMOD = 0x01; // 设置为模式1
TH0 = 0x3C; // 设置定时器初值
TL0 = 0xAF;
TR0 = 1; // 启动定时器
while (1) {
if (KEY1 == 0) { // 如果按键1按下,进行正数计时
LED = 1; // 点亮LED
display(second); // 显示秒数
delayms(10); // 延时10ms
second++; // 秒数加1
if (second >= 10) { // 如果计时到10秒,停止计时
second = 0;
LED = 0; // 熄灭LED
}
}
if (KEY2 == 0) { // 如果按键2按下,进行倒数计时
LED = 1; // 点亮LED
count++; // 计数器加1
if (count == 10) { // 如果计数到10,停止计时
count = 0;
LED = 0; // 熄灭LED
}
display(10 - count); // 显示倒数的秒数
delayms(10); // 延时10ms
}
}
}
void timer0() interrupt 1 { // 定时器中断函数
TH0 = 0x3C; // 重新设置定时器初值
TL0 = 0xAF;
second++; // 秒数加1
if (second >= 10) { // 如果计时到10秒,停止计时
second = 0;
LED = 0; // 熄灭LED
}
}
```
该程序使用了定时器中断和按键中断来实现正数计时和倒数计时,并通过7SEG-MPX2-CA-BULE进行显示。在程序中,按键1用于正数计时,按键2用于倒数计时,LED灯用于指示计时器是否在工作。
需要注意的是,该程序只是一个简单的示例,实际应用中需要根据具体要求进行修改和优化。
阅读全文