㈠ 怎么用C语言/C51程序实现单片机按键长按开机与长按关机
首先需要硬件支持,也就是单片机某个引脚可以控制断电和维持上电
按键的的作用也可以给单片机供电,并且还要有个专门的引脚检测按键状态。
软件:首先是长按判断。这个最好用按键扫描。就是检测按键按下时候,定时器计时,如果松开就立即清零。在设置一个功能函数检测定时值,大于两秒后,就表示长按。
按键按下单片机供电开始计时,如果达到长按标准,就输出引脚控制持续供电,这时候按键松了也不会断电。
运行期间,按键再次按下并符合长按,那木引脚输出停止供电,这时候如果按键松开,那就彻底没电关机。
㈡ 高手帮忙.用51单片机控制一个灯.要求按下启动按钮后以亮5秒,灭3秒为周期运行.关键是要有掉电保持功能!!
关键丛巧和的掉电保护可以像1L那样说用内部EEPROM实渗盯现,或者用24C02(外置宽孙的EEPROM)来做,然后灯亮灭那些就容易搞了。具体思路还是自己动手才懂的
㈢ 单片机按键触发C程序
while(1)
{
if(keyflag==1) //有按下切出死循环
break;
else continue;
}
while(1)
{
..... //用户自己的程序
}
这种方法是模拟按键按下启动真正的应用程序,触发的是自己的功能程序短。从效果上来还是可以的
㈣ 单片机的按键启动和复位电路图
单片机的复位有上电复位和按钮手动复位两种。如图(a)所示为上电复位电路,图(b)所示为上电按键复位电路。
上电复位是利用电容充电来实现的,即上电瞬间RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐下降。图(a)中的R是施密特触发器输入端的一个10KΩ下拉电阻,时间常数为10×10-6×10×103=100ms。只要VCC的上升时间不超过1ms,振荡器建立时间不超过10ms,这个时间常数足以保证完成复位操作。上电复位所需的最短时间是振荡周期建立时间加上2个机器周期时间,在这个时间内RST的电平应维持高于施密特触发器的下阈值。
上电按键复位(b)所示。当按下复位按键时,RST端产生高电平,使单片机复位。复位后,其片内各寄存器状态改变,片内RAM内容不变。
由于单片机内部的各个功能部件均受特殊功能寄存器控制,程序运行直接受程序计数器PC指挥。各寄存器复位时的状态决定了单片机内有关功能部件的初始状态。
另外,在复位有效期间(即高电平),80C51单片机的ALE引脚和引脚均为高电平,且内部RAM不受复位的影响。
图要点一下查看大图才清楚哦O(∩_∩)O
㈤ 单片机怎么用一个按钮控制步进电机启动和停止
单片机用一个按钮控制步进电机启动和停止,这很容易的,识别按键按下的程序会写吧,那定义一个位变量,即标志位,如flag,上电后flag=0,为电机停止状态。每按一次按键,flag=!flag,即取反一次,然后再判断标志位,flag=1,则启动电机。flag=0,则停止电机。
㈥ 单片机如何用一个按键实现启停
不知道你想要实现啥样的启停,今天上班有点闲,给你写一个程序做参考,你可以根据你的需要进行更改。//功能是按键,按下启动停止,启动后LED灯闪烁,
停止LED灯灭。
#include
"REG52.H"
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();
//执行应运程序
}
}