keil5程序控制proteus里51单片机控制8个流水灯顺序点亮,同时在数码管中显示当前灯号,同时蜂鸣器响一次
时间: 2023-06-13 16:08:02 浏览: 243
【Proteus仿真+Keil程序】51单片机实现利用矩阵键盘、38译码器控制8位动态数码管显示
以下是一份基于 Keil5 和 Proteus 的程序代码,可以实现控制 8 个流水灯顺序点亮,并在数码管中显示当前灯号,同时蜂鸣器响一次:
```c
#include <reg52.h>
#define LED_PORT P1 // 控制 LED 的端口
#define DIGIT_PORT P0 // 控制数码管的端口
sbit BUZZER = P2^3; // 控制蜂鸣器的引脚
unsigned char LED_ANODE[8] = {0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE}; // LED 的阳极控制码
unsigned char DIGIT_ANODE[4] = {0xFE, 0xFD, 0xFB, 0xF7}; // 数码管的阳极控制码
void delay(unsigned int time) // 延时函数
{
unsigned int i, j;
for (i = time; i > 0; i--)
for (j = 110; j > 0; j--);
}
void main()
{
unsigned char i, j;
unsigned int t;
unsigned char digit_num; // 当前数码管显示的数字
unsigned char led_index; // 当前亮起的 LED 的编号
while (1)
{
digit_num = 0; // 数码管显示的数字从 0 开始
led_index = 0; // 亮起的 LED 编号从 0 开始
for (i = 0; i < 8; i++)
{
LED_PORT = LED_ANODE[led_index]; // 控制 LED
DIGIT_PORT = DIGIT_ANODE[digit_num]; // 控制数码管
for (j = 0; j < 50; j++) // 每个 LED 亮 50ms
{
delay(2); // 延时 2ms
t++;
if (t == 500) // 500ms 时蜂鸣器响一次
{
BUZZER = 0;
delay(20); // 延时 20ms
BUZZER = 1;
t = 0;
}
}
digit_num++; // 数码管显示的数字加 1
if (digit_num == 4) // 数码管只有 4 位,超过 4 位则从 0 开始
digit_num = 0;
led_index++; // 亮起的 LED 编号加 1
if (led_index == 8) // LED 编号只有 8 个,超过 8 个则从 0 开始
led_index = 0;
}
}
}
```
需要注意的是,此程序代码仅供参考,具体实现还需要根据实际硬件电路进行调整。
阅读全文