51单片机控制十位数码管轮流点亮的代码,按键控制启动和暂停
时间: 2023-08-18 08:05:09 浏览: 61
好的,以下是一个简单的51单片机控制十位数码管轮流点亮的代码,可以按键控制启动和暂停:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula = P2^6; // 数码管位选控制引脚
sbit wela = P2^7; // 数码管段选控制引脚
uchar digitPins[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 数码管显示的数字
uchar digitIndex = 0; // 数码管显示的数字下标
bit isRunning = 0; // 标记是否运行
void delay(uint xms) {
uint i, j;
for (i = xms; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
void display(uchar num) {
dula = 1; // 先关闭位选
P0 = num; // 设置要显示的数字
dula = 0; // 再打开位选
}
void main() {
P0 = 0; // 初始化
dula = 0;
wela = 0;
TMOD = 0x01; // 设置定时器0为工作方式1
TH0 = 0xFC; // 设置定时器0初值
TL0 = 0x67;
ET0 = 1; // 开启定时器0中断
EA = 1; // 开启总中断
TR0 = 1; // 启动定时器0
while (1) {
if (!P3_0) { // 按键按下
isRunning = ~isRunning; // 切换运行状态
}
if (isRunning) { // 如果在运行状态
wela = 1; // 打开段选
display(digitPins[digitIndex]); // 显示数字
delay(5); // 延迟一段时间
wela = 0; // 关闭段选
digitIndex = (digitIndex + 1) % 10; // 切换数字下标
} else { // 如果在暂停状态
wela = 0; // 关闭段选
display(0); // 显示0
}
}
}
void timer0() interrupt 1 { // 定时器0中断函数
TH0 = 0xFC; // 重新设置初值
TL0 = 0x67;
digitIndex = (digitIndex + 1) % 10; // 切换数字下标
}
```
这段代码使用了定时器0来控制数码管的显示,通过一个数组来存储要显示的数字,然后循环显示每一个数字,按键控制启动和暂停。其中,`display()`函数用来控制数码管的位选和段选,`delay()`函数用来延迟一段时间。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)