msww.net
当前位置:首页 >> 单片机按键检测程序 >>

单片机按键检测程序

按你的说法,接了5V没按下时就是高电平了,按下就是低电平了,要想按下是低电平,就要在按键和单片机之间接反相器74LS04.下面的监控程序仍有效按键连P3口,(不一定非P3),设计程序,让单片机对按键实时监控和检测.下面是一小段检测开按键的汇编,供参考ORG 0000HMOV P3,#0FFH :开关准备MOV A,P3 ;读开关值LOOP:MOV P1,A ;送P1口显示MOV 20H,A ;暂存WQ:MOV A,P3 ;再次检测开关CJNE A,20H,LOOP ;有新数据送P1口显示SJMP WQ ;无新数据,继续检测P3口END

------------------------------------------------*/#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define uchar unsigned char#define uint unsigned intunsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,

轮训啊,加入默认你的按键是高电平,一旦按下就是低电平,那么检测如下:while(BUTTON != 0);delay(15ms);//等待15ms左右,消抖动处理if(BUTTON == 0)printf("你按下了按键");

你留下邮箱,我有这方面的0基础视频教学

void main(void){while(1){if(P3_7==0)//判断是否有按下,为0则按下{delay10ms();//延时10MS,去抖动if(P3_7==0)//再次判断,如果还为0则真的按下了.{count++;//每按下一次就加1if(count==16)//加到16返回0{count=0;}P1=~count;//P1口把按下的次数输出,如第一次就是11111110,第二次就是11111101:十六进制转成IO口的二进制while(P3_7==0);//直到按键放开才判断下一次按键}}}

s1=1; s2=1; s3=1; if(s1==0) //s1判断调节位,按下几次,确定调节位置 { delay(50); if(s1==0) { s1num++; while(!s1); } } if(s1num!=0) //确定完那位,判断增减及大小 { if(s2==0) //s2增加 { delay(5); if(s2==0) { while(!s2); //s2=1时向下执行 if(s1num==1

源程序就不贴了 大概说下思路吧 按键扫描 一般按键的模式都为行列扫描模式 假设 5*5键盘 共25个按键 占用51单片机 10个IO口扫描的方式 一般使用定时扫描方式,在定时中断里面执行按键扫描操作.可先将第一行的IO口置0 再扫描列的5个IO口看哪个为0 为0 的就说明该位置按键被按下再 将第二行的IO置0 再重复上面的判断 依次扫描剩余三个 当然要做得好点的话就要加上防抖动 重复按键判断 长按键操作处理啥的了

不同按键按下时电阻大小不一样,分压也不一样,用adc读取calibrat的电压值,即可判断哪个按键按下.

void main(){wela=1;p0=0xfe;wela=0;p3=0xff;while(1){if(key1==0){delay(5);if(key1==0){d1=0;num++;if(num==10)num=0;}while(!key1);delay(5);while(!key1);}elsed1=1;dula=1;p0=table[num];dula=0;}}

while(key) num++;假设有按键的时候 num加加 根据按下的次数确定当前应该显示哪个花样 然后检测完之后用switch-case根据num执行某个花样的流水灯 所有的都加在一个while(1) 的死循环里面 while(1) { char num=0; while(key)这个是你定义的按键端口 num++; switch(num) { case 0:花样1; case 1:花样2; } } 我觉得这样写就行了 原理一样吧 先检测 在执行 因为程序每次只能执行一个地方

网站首页 | 网站地图
All rights reserved Powered by www.msww.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com