STM89C52 跑马灯程序:按键控制方向和速度
#include <reg52.h>
sbit buzzer = P1^0; // 蜂鸣器 sbit S1 = P2^0; // S1按键 sbit S2 = P2^1; // S2按键
void delay(unsigned int ms) { unsigned int i, j; for(i = 0; i < ms; i++) for(j = 0; j < 123; j++); }
void main() { unsigned char led = 0x01; // 跑马灯初始状态 unsigned char direction = 1; // 跑马灯方向,默认向右 unsigned int speed = 500; // 跑马灯速度,默认低速档
while(1) {
P0 = led; // 控制LED灯显示
delay(speed);
// 检测S1按键
if(S1 == 0) {
delay(10); // 消抖
if(S1 == 0) {
direction = 1; // 设置为向右
buzzer = 1; // 蜂鸣器响一下
delay(100);
buzzer = 0;
}
while(S1 == 0); // 等待按键释放
}
// 检测S2按键
if(S2 == 0) {
delay(10); // 消抖
if(S2 == 0) {
direction = 0; // 设置为向左
buzzer = 1; // 蜂鸣器响一下
delay(100);
buzzer = 0;
}
while(S2 == 0); // 等待按键释放
}
// 根据方向更新LED灯状态
if(direction)
led = led << 1;
else
led = led >> 1;
// 边界检测
if(led == 0x00)
led = 0x80;
else if(led == 0x80)
led = 0x01;
// 根据速度调整延时时间
if(speed == 500) // 低速档
speed = 1000;
else if(speed == 1000) // 高速档
speed = 500;
}
}
// 请注意,此代码是在假设已经正确配置了STM89C52单片机的I/O引脚和外部中断设置的基础上编写的。如果您直接复制此代码到您的项目中,可能需要根据您的硬件配置进行适当的修改和调整。
原文地址: https://www.cveoy.top/t/topic/9iG 著作权归作者所有。请勿转载和采集!