标题:
如何改才能将下面的单片机代码改成按下k1后从左向右流水按下k2从右向左流水
[打印本页]
作者:
张维超0240921
时间:
2024-9-22 15:03
标题:
如何改才能将下面的单片机代码改成按下k1后从左向右流水按下k2从右向左流水
#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int xms)
{
unsigned char i,j;
while(xms)
{
i=2;
j=239;
do
{
while(--j);
}
while(--i);
xms--;
}
}
void main()
{
unsigned char LEDNum=0;
while(1)
{
if(P3_1==0)
{
P2=~0x01;
while(1)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
if(LEDNum>=8)
LEDNum=0;
P2=~(0X01<<LEDNum);//0x01左移lednum 0X01<<0 = 0000 0001
}
}
if(P3_0==0)
{
P2=~0x01;
while(1)
{
Delay(20);
while(P3_0==0);
Delay(20);
if(LEDNum==0)
LEDNum=7;
else
LEDNum--;
P2=~(0X01<<LEDNum);
}
}
}
}
现在的状态是只能进行向左或着向右需要按下开关后才能重新开始
作者:
lkc8210
时间:
2024-9-22 17:36
#include <REGX52.H>
#include <INTRINS.H>
void main()
{
unsigned char LEDNum=0;
unsigned char Dir = 0;
unsigned char Dir_Old = 0;
unsigned int DelayCnt = 0;
while(1)
{
if(P3_1==0)
{
Dir = 1;
}
if(P3_0==0)
{
Dir = 2;
}
if(Dir_Old != Dir)
{
DelayCnt = 0;
P2=~0x01;
LEDNum = 0;
}
Dir_Old = Dir;
if(++DelayCnt>=1000)
{
DelayCnt=0;
if(Dir==1)
{
LEDNum++;
if(LEDNum>=8)
LEDNum=0;
}
if(Dir==2)
{
if(LEDNum==0)
LEDNum=7;
else
LEDNum--;
}
P2=~(0X01<<LEDNum);//0x01左移lednum 0X01<<0 = 0000 0001
}
}
}
复制代码
作者:
csmyldl
时间:
2024-9-22 21:15
#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int xms)
{
unsigned char i,j;
while(xms)
{
i=2;
j=239;
do
{
while(--j);
}
while(--i);
xms--;
}
}
void main()
{
unsigned char LEDNum=0;
while(1)
{
if(P3_1==0) flag=1; {Delay();i=0;}
if(P3_0==0) flag=0; {Delay();i=0;}
if (flag)
{
P2=~(1<<i);
Delay(); i++;
if (i==8) i=0;
}
else
{
P2=~(1<<(8-i));
Delay(); i++;
if (i==8) i=0;
}
}
}
作者:
xianfajushi
时间:
2024-9-22 21:19
乱用无限循环
作者:
csmyldl
时间:
2024-9-22 22:53
csmyldl 发表于 2024-9-22 21:15
#include
#include
void Delay(unsigned int xms)
还需在主程序中定义两个变量:
bit flag;
unsigned char i;
作者:
hdo11103
时间:
2024-9-27 07:12
#include <REGX52.H>
#include <INTRINS.H>
#define LED_COUNT 8
#define BUTTON_DEBOUNCE_DELAY 20
#define BUTTON_LONG_PRESS_DELAY 500 // 长按延迟
// 延时函数
void Delay(unsigned int xms) {
unsigned char i, j;
while (xms) {
i = 2;
j = 239;
do {
while (--j);
} while (--i);
xms--;
}
}
// 检测按钮按下并进行防抖
bit IsButtonPressed(unsigned char buttonPin) {
if (buttonPin == 0) { // 按钮被按下
Delay(BUTTON_DEBOUNCE_DELAY); // 消抖延迟
if (buttonPin == 0) { // 再次确认按下
return 1; // 按键有效
}
}
return 0; // 按键无效
}
void main() {
unsigned char LEDNum = 0;
bit isRunning = 0; // 状态标志,表示是否正在流水
while (1) {
// 检测按钮 K1 (P3_1)
if (IsButtonPressed(P3_1) && !isRunning) {
isRunning = 1; // 设置状态为正在流水
// 从左向右流水
for (LEDNum = 0; LEDNum < LED_COUNT; LEDNum++) {
P2 = ~(0x01 << LEDNum); // 点亮对应的LED
Delay(200); // 控制流水速度
}
isRunning = 0; // 流水结束,重置状态
}
// 检测按钮 K2 (P3_0)
if (IsButtonPressed(P3_0) && !isRunning) {
isRunning = 1; // 设置状态为正在流水
// 从右向左流水
for (LEDNum = LED_COUNT - 1; LEDNum < LED_COUNT; LEDNum--) {
P2 = ~(0x01 << LEDNum); // 点亮对应的LED
Delay(200); // 控制流水速度
if (LEDNum == 0) break; // 防止越界
}
isRunning = 0; // 流水结束,重置状态
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1