功能要求: (1)启动运行,初始状态为:LED1 状态为亮,数码管 DS1 显示 0。 (2)使用定时器 0,定时时间为 20ms,让 LED1 循环亮灭,亮持续时间为 0.5 秒,灭持续时间为 0.4 秒。 (3)包括:①每按下一次 K1,触发一次外部中断 0,数码管 DS1 显示值加 1, 直至 9;②当数码管 DS1 显示值应为 10 时,显示 0,然后按照①运行。 注:实验箱上是共阴极数码管。 写出适配与51单片机的代码,并注释每一行
时间: 2024-03-11 14:48:25 浏览: 23
以下是适配于51单片机的代码,已附有注释:
```c
#include <reg52.h> // 引入 51 单片机头文件
sbit LED1 = P0 ^ 0; // 定义 LED1 引脚
sbit DS1 = P2 ^ 0; // 定义数码管 DS1 引脚
sbit K1 = P3 ^ 2; // 定义按键 K1 引脚
unsigned char cnt = 0; // 计数器,初始值为 0
void delay_ms(unsigned int ms) // 定义延时函数
{
unsigned int i, j;
for (i = 0; i < ms; i++)
{
for (j = 0; j < 110; j++);
}
}
void timer0_init() // 定时器 0 初始化
{
TMOD |= 0x01; // 设置定时器 0 为模式 1
TH0 = 0xFC; // 设置定时器初值
TL0 = 0x67;
EA = 1; // 打开总中断
ET0 = 1; // 打开定时器 0 中断
TR0 = 1; // 启动定时器 0
}
void main()
{
LED1 = 1; // LED1 初始状态为亮
DS1 = 0; // 数码管 DS1 初始显示为 0
timer0_init(); // 定时器 0 初始化
while (1) // 无限循环
{
if (K1 == 0) // 检测按键 K1 是否按下
{
delay_ms(10); // 延时去抖
if (K1 == 0) // 再次检测按键 K1 是否按下
{
cnt++; // 计数器加 1
if (cnt > 9) // 如果计数器大于 9,说明数码管应该显示 0
{
cnt = 0; // 计数器归零
}
}
while (K1 == 0); // 等待按键 K1 松开
}
}
}
void timer0() interrupt 1 // 定时器 0 中断函数
{
static unsigned char led_time = 10; // 控制 LED1 亮灭的时间
static unsigned char led_on = 1; // 控制 LED1 亮灭的状态
static unsigned int cnt_time = 0; // 控制数码管更新的时间
TH0 = 0xFC; // 重新赋值定时器初值
TL0 = 0x67;
led_time--; // 控制 LED1 亮灭的时间减 1
if (led_time == 0) // 如果时间为 0,说明需要改变 LED1 的状态
{
led_time = led_on ? 20 : 16; // 根据 LED1 当前状态改变亮灭时间
led_on = !led_on; // 改变 LED1 的状态
LED1 = led_on; // 更新 LED1 的状态
}
cnt_time++; // 控制数码管更新的时间加 1
if (cnt_time == 100) // 如果时间为 100,说明需要更新数码管
{
cnt_time = 0; // 将时间归零
DS1 = 1; // 数码管 DS1 显示为关闭状态
P1 = cnt; // 将计数器的值赋给 P1 端口(因为数码管共阴极,所以需要取反)
DS1 = 0; // 数码管 DS1 显示为打开状态
}
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)