单片机中用C语言按键检测的小程序?

单片机中用C语言按键检测的小程序?,第1张

有独立键盘和距阵键盘的 独立键盘的很简单我就不写了 距阵的我给你写一个

//键盘扫描

uchar Keys_Scan()

{

uchar sCode,kCode,i,k

//低4 位置0,放入4 行

P1=0xf0

//若高4 位出现0,则有键按下

if((P1&0xf0)!=0xf0)

{

DelayMS(2)

if((P1&0xf0)!=0xf0)

{

sCode=0xfe//行扫描码初值

for(k=0k<4k++) //对4 行分别进行扫描

{

P1=sCode

if((P1&0xf0)!=0xf0)

{

kCode=~P1

for(i=0i<16i++) //查表得到按键序号并返回

if(kCode==KeyCodeTable[i])

return(i)

}

else

sCode=_crol_(sCode,1)

}

}

}

return(-1)

参照窗口程序的设计,检测按键就是用个while来不断检测是不是按到了某个键,至于要做什么就塞循环里

难道要搞机票预订系统么寒……

C是面向过程的只能这样,否则微软早就改进窗口程序代码了

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit led1 = P2^0//定义管脚;

sbit led2 = P2^1

sbit led3 = P2^2

sbit led4 = P2^3

sbit led5 = P2^4

sbit led6 = P2^5

sbit key = P1^0

uchar tcount=0,count=0//定义时间变量和按键计数变量;

void Delay(uchar i)//机械延时;

{

while(--i)

}

void LedLight(void)//LED控制函数;

{

switch(count)

{

case 3 : led1 = 0break//3下时,LED1亮;

case 5 : led2 = 0break//5下时,LED2亮;

case 7 : led3 = 0break//7下时,LED3亮;

case 9 : led4 = 0break//9下时,LED4亮;

case 11: led5 = 0break//11下时,LED5亮;

case 13: led6 = 0break//13下时,LED6亮;

default: P2 = 0xffbreak//其余的都不亮;

}

}

void InitTimer0(void)//定时器0初始化;

{

TMOD = 0x00

TH0 = (65536-50000)/256

TL0 = (65536-50000)%256

TR0 = 1

}

void main(void)//主函数

{

InitTimer0()

while(1)//无限循环

{

if(key==0)//检查按键是否按下;

{

Delay(10)//机械延时

if(key==0){count++}//按键计数

while(key==0)

}

if(TF0==1)//复位定时器0

{

TF0=0

TH0 = (65536-50000)/256

TL0 = (65536-50000)%256

tcount++

if(tcount==20)//1秒的时间

{

LedLight()

Delay(100)

count=0//复位按键计数变量

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12063833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存