单片机按键设定软件c语言 单片机C语言按键开关程序
- 作者: 清墨府__莺莺
- 来源: 51数据库
- 2020-04-21
#include<reg52.h>#defineuintunsignedint
#defineucharunsignedchar
voiddelay_ms(uint);
sbitled0=P0^0;
sbitled1=P0^1;
sbitkey1=P3^2;
sbitkey2=P3^3;
voidmain()
{
uchari=0;
ucharj=0;
while(1)
{
if(key1==0)//按键1
{
delay_ms(10);
if(key1==0)
{
i++;
i=i%2;
switch(i)
{
case0:led0=1;break;//关小灯
case1:led0=0;break;//开小灯
default:break;
}
}
while(!key1);
}
if(key2==0)//按键2
{
delay_ms(10);
if(key2==0)
{
j++;
j=j%2;
switch(j)
{
case0:led1=1;break;//关小灯
case1:led1=0;break;//开小灯
default:break;
}
}
while(!key2);
}
}
}
voiddelay_ms(uintz)//延时子程序
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
关于单片机温度控制系统C语言程序中的按键设置程序,请求详细的介绍下按键的输入过程。while(1) { if(KeyFl
if(keypress==true)检测有键按下
{delay_us(50); 延迟50us,软件滤波防抖动
if(keypress==true) 检测有键被按下
key_value=P1;提取键值
{switch(key_value) 识别是那个键被按下了
case 0x01: XXX;break;
case 0x02:XXX;BREAK;进入对应工步或者动作即可。
......
}
}
}
您好,能帮我分析下下面的程序按键的过程吗,主要按键扩展标志起什么样子?由于输入字体有限,我删除了部分程序。
if(KeyFlag == 0)
{
}
else if(KeyFlag == 1)
{
if(BUTTON_add == 0 && KeyLock ==0)
{
}
if(BUTTON_reduce == 0 && KeyLock ==0)
{
}
else if(KeyFlag == 2){
if(BUTTON_add == 0 && KeyLock ==0)
{
}
if(BUTTON_reduce == 0 && KeyLock ==0)
{
}
标志扩展的目的就是增加在不同情况下,使用少量的键盘,得到多功能的组合之效果而已,比如您的程序,如果使用KeyFlag作为标志,如果因为某种情况可以改变这个标志值,则不同的标志值下,加键与锁定键就可以实现不同的功能啊。
if(KeyFlag == 0) 这个的意思是,如果没有键盘按下,则不动作
{
}
else if(KeyFlag == 1)否则如果有按键按下,且标志为1时
{
if(BUTTON_add == 0 && KeyLock ==0) 如果按键+与锁定按键同时按下时,进行{}中的处理。
{
}
if(BUTTON_reduce == 0 && KeyLock ==0)如果按键-减与锁定键同时按下时,则处理()中。。。
{
}
else if(KeyFlag == 2){
if(BUTTON_add == 0 && KeyLock ==0)
{
}
if(BUTTON_reduce == 0 && KeyLock ==0)
{
单片机C语言,红外线遥控器,长按按键一直按下?程序该怎样区分呢?
按下时发送正常的编码,发送完毕,若按键依然按下,则发送重复码,重复码和引导码有共同的特点,就是周期短了一些(引导:13.5ms;重复:11.25ms),这个不就可以区分了吗?
只要接收的码周期是13.5,即一组新发送的编码,若是11.25则是重复码,重复码时,则将之前接收到的编码作为本次接收到的编码处理即可。来自:求助得到的回答
单片机 按键作为外部中断的输入,怎么使用软件防抖动?c语言,谢谢。
进入中断后,关闭这个外部中断,同时启动一个50ms的定时器,退出这个外部中断。在那个50ms定时到时,判断这个外部中断引脚的电平 ,确定是否为抖动。
单片机 用c语言编写 一个按键切换led样式
将按键一边接单片机I/O口,一边接地。这样,按键按下时,该I/O口为低电平,未按下时是高电平(单片机上电后I/O口默认为高电平),假如按键接在了P1^0口,程序如下
#include<reg52.h>
sbit key=P1^0;
void main()
{
while(1)
{
if(key==0)
{
(led样式1程序)
else
{
(led样式2程序)
}
}
}
}
这样,当按键按下时,led是样式一;松开时是样式二
单片机时钟C语言程序 按键调时的地方不知道哪里错了 大神指教一下吧
1.#include后面没有加头文件你应该用的是51把,加上reg52.h这个头文件;
2.display函数的第一个位选结束应该使wei=0;
3.按键key1的检测程序有错误,你的意思貌似使用按键1来切换设置的时分秒,应该改成
if(key1==0)
{
delay(10);//延时消抖
if(key1==0)
{
if(nop<3)//判断是否设定完毕,按4下代表设置结束将nop设为0
nop++;
else
nop=0;
while(!key1);//松手检测
delay(10);//松手抖动延时
while(!key1);//再次进行松手检测
}
}
以及底下key2和key3的检测都应该按照这样的模式写从而能更好的消除按键抖动造成的重复按键;
4.时分秒设定判断你都是写的if(nop==1&&......)应该分别是nop==1、nop==2、nop==3来判定是到底是对应的时分秒的哪一个。
是这意思么 我这样搞的一直在叫 去掉防抖的语句后可以显示 但是会因为抖动出现BUG
真的谢谢了 已经解决了
跪求大神给我用c语言编程,用51单片机控制3个按键和3个发光二极管,设置一个3人抢答器,要求当有某
最容易理解的写法:设置b1、b2、b3、reset四个按钮(按下为0)和对应的LED1、LED2、LED3三个灯(点亮为0)
intreset,b1,b2,b3,LED1,LED2,LED3;
while(1)
{
(读取reset)
if(reset==0)
{
LED1=LED2=LED3=1;
read=1;
}
if(read==1)
{
(读取b1,b2,b3);
if(b1==0)
{
LED1=0;
read=0;
}
elseif(b2==0)
{
LED2=0;
read=0;
}
elseif(b3==0)
{
LED3=0;
read=0
}
elseLED1=LED2=LED3=1;
}
}
更多我试一试
不一定对哈……我没玩过单片机……
开头怎么写的
衔接这个
那个我就真不知道了……应该是设置引脚之类的吧……并没有玩过……
这样可以么
你在电脑上看……就是定义几个变量而已……不是别的。而且我觉得你可能需要设置引脚什么的。
那怎么玩
这个……你可能要查一下单片机开头怎么编……貌似是有一些说法的。而且我好像忘记输出了……
试了,不得行。。。
怎么呢?我看看程序。
老师说设置引脚是这样的,你再看看
应该是这样的,你写输出了吗?
没有
怎么写
……
你等一会儿
sbitb1=P3^4;sbitb2=P3^5;
sbitb3=P3^6;
sbitrst=P3^7;
sbitl1=P3^4;
sbitl2=P3^5;
sbitl3=P3^6;
l1=l2=l3=1;
intmain()
{
unsignedcharread;
while(1)
{
if(rst==0)
{
l1=l2=l3=1;
read=1;
}
if(read==1)
{
if(b1==0)
{
l1=0;
read=0;
}
if(b2==0)
{
l2=0;
read=0;
}
if(b3==0)
{
l3=0;
read=0
}
}
return0;
}
改一下6~8行,那是led的口,写错了
转载请注明出处51数据库 » 单片机按键设定软件c语言 单片机C语言按键开关程序