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