//键盘扫描
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//复位按键计数变量
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)