单片机如何用一个按键实现启停

单片机如何用一个按键实现启停,第1张

不知道你想要实现啥样的启停,今天上班有点闲,给你写一个程序做参考,你可以根据你的需要进行更改。//功能是按键,按下启动停止,启动后LED灯闪烁, 停止LED灯灭。

#include "REG52H"

sbit LED1_01 = P1^1; //LED灯

sbit KEY0_01 = P1^2; //按键

bit value_flag = 0; //标志位

/

延时1ms延时子函数

/

void Delay_1ms(unsigned int Time)

{

unsigned int x, y;

for(x = Time; x > 0; x--)

for(y = 120; y > 0; y--);

}

/

按键开关启动和停止子函数

/

void Scan_keyoutCmd(void)

{

if(KEY0_01 == 0) //检测按键是否按下

{

Delay_1ms(10); //延时去抖动

if(KEY0_01 == 0) //确定按键按下

{

value_flag = ~ value_flag; //取反标志位

}

while(KEY0_01 == 0); //检测松手

}

}

/

程序运行启动和停止子函数

/

void Disp_layledketCmd(void)

{

if(value_flag == 1) //如果标志打开启动单片机运行程序

{

LED1_01 = 0;

Delay_1ms(500); //启动运行程序后LED灯开始闪烁

LED1_01 = 1;

Delay_1ms(500);

}

else if(value_flag == 0) //如果标志关闭停止单片机运行程序

{

LED1_01 = 0; //停止运行程序后LED灭。

}

}

/

函数主体

/

int main(void)

{

value_flag = 1; //打开标志位

while(1)

{

Scan_keyoutCmd();//单片机循环检测是否有按键按下启动或停止应运程序

Disp_layledketCmd(); //执行应运程序

}

}

给state的定义加上 volatile 关键字试试。

C编译器有一个优化功能,如果他在当前函数中看不到state有其他赋值,可能会认为while(state)就是一个while(1),就是死循环,从而直接忽略掉后面所有的代码。

当前,您其他代码必须正确,比如真的退出了stop,那么下一步的代码是否正确,不要因为其他错误导致以为while没有跳出。

以上就是关于单片机如何用一个按键实现启停全部的内容,包括:单片机如何用一个按键实现启停、单片机怎么编写程序暂停功能,利用中断能实现吗、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9654443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存