不知道你想要实现啥样的启停,今天上班有点闲,给你写一个程序做参考,你可以根据你的需要进行更改。//功能是按键,按下启动停止,启动后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没有跳出。
以上就是关于单片机如何用一个按键实现启停全部的内容,包括:单片机如何用一个按键实现启停、单片机怎么编写程序暂停功能,利用中断能实现吗、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)