基于NY8A051H,编写一个按键控制流水灯的代码
时间: 2024-05-14 22:16:43 浏览: 140
HAL库编写 STM32F103C8 带按键控制流水灯
5星 · 资源好评率100%
好的,下面是基于NY8A051H的按键控制流水灯的代码:
```c
#include <ny8.h>
#define LED_PORT PA //灯的端口,这里设为PA口
#define KEY_PORT PA //按键的端口,也设为PA口
#define LED_NUM 8 //灯的数量
#define KEY_1 0 //按键1对应的引脚
#define KEY_2 1 //按键2对应的引脚
unsigned char led_pattern = 0x01; //当前灯的模式,从最低位开始,1表示亮,0表示灭
unsigned char key_state = 0x03; //当前按键的状态,从最低位开始,1表示按下,0表示松开
void delay_ms(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 145; j++);
}
void main(void) {
//关闭看门狗
AWDTEN = 0;
//初始化IO口
LED_PORT = 0x00;
KEY_PORT |= 0x03;
PA7 = 1; //PA7置高,用于挂载晶振
while (1) {
//读取按键状态,注意这里读取的是PA0和PA1的翻转状态,因为按下时为低电平
key_state = ~(KEY_PORT & 0x03);
//按键1按下,逆时针流水灯
if (key_state & (1 << KEY_1)) {
led_pattern = (led_pattern >> 1) | (led_pattern << (LED_NUM - 1));
LED_PORT = led_pattern;
delay_ms(200);
}
//按键2按下,顺时针流水灯
if (key_state & (1 << KEY_2)) {
led_pattern = (led_pattern << 1) | (led_pattern >> (LED_NUM - 1));
LED_PORT = led_pattern;
delay_ms(200);
}
}
}
```
这个代码实现的功能是,在按键1按下时,灯的模式向逆时针方向移动一位,即向右移动;在按键2按下时,灯的模式向顺时针方向移动一位,即向左移动。灯的数量是8,也就是8位二进制数字。在移动之后,通过延时来实现流水灯的效果。
阅读全文