‘壹’ 单片机一个按键控制一个程序
你把几种方式写成几个子程序,然后主程序调用按键检测,根据检测到的键值调用对应的子函数即可
‘贰’ 状态机:用51单片机实现时钟、加法的实现。用keil软件,不能用delay。
51单片机在编程时需要用定时或者延时,一般尽量不要用delay延时函数,可以用定时器中断实现定时和延时,长延时可以用定时器计数。
‘叁’ AVR 单片机C语言怎样实现按键按一下led灯闪烁 再按一下led灯灭如此反复循环 led接PC0脚 按键接PB0脚 (用
用状态机写:
函数1:LED闪烁
main()
{
while(1)
{
if(KEY)
State = ~State;
if(State)
LED闪烁
else
LED熄灭
}
}
‘肆’ 单片机使用状态机无延时按键消抖是怎样的原理
状态机,自动化专业一般比较愿意吹嘘这种花架子。
它是定时(比如20ms)检测一遍各个变量,得到的数据,就称为一个状态。
隔一会,检测一遍,得到一个状态。
再隔一会,再检测一遍,再得到一个状态。
。。。
每次检测后,对前后的状态进行比较,由其不同的变化,执行相应的程序。
其实,这就是一个巡逻哨,很有可能错过有用的信息。
这种方法,并不如直接扫描法更直接,更加稳定可靠。
‘伍’ 学习51单片机 状态机程序,按键控制led灯,按下之后一直亮着,不反转
原为:
if(st==2)
{
P1=~P1;
st=3;
}
return;
改为:
if(st==2)
{
P1=~P1;
st=3;
return;
}
‘陆’ 单片机返回键值好还是键号好
单片机返回键值好。在所有智能产品中,按键是最为常用的,所以按键程序的好坏很重要。在学校里学的按键检测方法是不适用,很浪费时间,减少了CPU的效率。在人们的不断努力下,基本上编程都是用状态转移思想,用状态机思想编的按键检测程序也很多。
‘柒’ 用单片机C语言怎么写用状态机实现按键控制LED灯闪烁这个程序
#include<STC12C52.H>
#defineucharunsignedchar
#defineuintunsignedint
sbitkey=P1^2;
sbitp1_6=P1^6;
voiddelay(uchardelay_time)
{
ucharn;
uintm;
for(n=0;n<delay_time;n++)
{
for(m=0;m<10000;m++);
}
}
voidkeyscan()
{
if(key==0)
{
delay(5);
if(key==0)
while(!key)
{
p1_6=0;
delay(20);
p1_6=1;
delay(20);
}
}
}
voidmain()
{
WDT_CONTR=0x3C;
while(1)
{
keyscan();
WDT_CONTR=0x3C;
}
}
这个功能可以用中断来实现,当然,现在我写的这个也可以实现。由于你用的晶振频率不知道,所以你自己修改一下延时时间,再把头文件改一下,就可以了,我试验了,可以实现改功能。
‘捌’ 用单片机C语言怎么写用状态机实现按键控制LED灯闪烁这个程序
按键控制LED闪烁,状态机就是检测按键,如果没有按下就不闪烁,如果按下就开始闪烁。楼主提的问题就是一个问题。你到底是想问状态机还是想问程序?
“用单片机C语言怎么写用状态机,实现按键控制LED灯闪烁,这个程序”
“用单片机C语言怎么写,用状态机实现,按键控制LED灯闪烁这个程序”
???
‘玖’ 单片机状态机按键为什么还会抖动
1、状态机是放在定时器里的?
2、中断时间加长
‘拾’ 状态机:用51单片机实现时钟、加法的实现。用keil软件,不能用delay。
不让用delay那就用定时器呗,12M晶振的时候定时器最大可以记65535us,你设50000us,也就是50ms,然后每次在定时中断里对一个全局变量加一。加到20时就是1秒了,然后置位一个全局秒标志位,把加一寄存器置0,进去下一个计时周期。然后主程序里检测到标志位置位的时候,把它置0,然后进行加1秒运算