使用8个LED灯和1个按键,Keil编程实现学号后两位BCD码和流水灯的交替显示(上电后先显示学号,按键后交替切换流水灯和学号)
时间: 2024-03-10 14:50:24 浏览: 222
好的,这是一个比较简单的嵌入式系统应用,我可以给您提供一个基于51单片机的程序实现。
首先,需要连接8个LED灯和1个按键到51单片机的相应引脚上,具体连接方式可以参照开发板的引脚图。接下来,您可以使用Keil软件来编写程序。
在程序中,需要定义8个LED灯和1个按键的引脚号,并进行初始化。然后,可以编写一个函数来实现将学号后两位转化为BCD码的功能。接着,编写一个函数来实现流水灯的效果,即依次点亮8个LED灯,然后逐个熄灭。最后,编写一个主函数,实现按键的检测和流水灯与学号的交替显示。
以下是示例代码:
```c
#include <reg52.h>
#define LED1 P2_0
#define LED2 P2_1
#define LED3 P2_2
#define LED4 P2_3
#define LED5 P2_4
#define LED6 P2_5
#define LED7 P2_6
#define LED8 P2_7
#define KEY P3_2
unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void delay(unsigned int t) // 延时函数
{
while(t--);
}
void init() // 初始化函数
{
P2 = 0xff; // 将LED灯的引脚设为输出
P3 |= 0x04; // 将按键的引脚设为输入,上拉
}
void show_number(unsigned char num) // 显示学号函数
{
LED1 = table[num / 10];
LED2 = table[num % 10];
}
void flow_light() // 流水灯函数
{
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 0;
LED6 = 0;
LED7 = 0;
LED8 = 0;
LED1 = 1;
delay(50000);
LED2 = 1;
delay(50000);
LED3 = 1;
delay(50000);
LED4 = 1;
delay(50000);
LED5 = 1;
delay(50000);
LED6 = 1;
delay(50000);
LED7 = 1;
delay(50000);
LED8 = 1;
delay(50000);
LED8 = 0;
delay(50000);
LED7 = 0;
delay(50000);
LED6 = 0;
delay(50000);
LED5 = 0;
delay(50000);
LED4 = 0;
delay(50000);
LED3 = 0;
delay(50000);
LED2 = 0;
delay(50000);
LED1 = 0;
delay(50000);
}
void main()
{
unsigned char num = 99;
unsigned char flag = 0;
init();
while(1)
{
if(KEY == 0) // 检测按键是否按下
{
delay(1000); // 延时去抖动
if(KEY == 0)
{
flag = ~flag; // 取反标志位
}
while(!KEY); // 等待按键松开
}
if(flag == 0) // 显示学号
{
show_number(num);
delay(1000);
}
else // 显示流水灯
{
flow_light();
}
}
}
```
以上程序仅供参考,您可以根据具体的硬件连接情况和需求进行修改。
阅读全文