《KEY按键应用》大全文档格式.docx

上传人:b****3 文档编号:8136353 上传时间:2023-05-10 格式:DOCX 页数:29 大小:27.34KB
下载 相关 举报
《KEY按键应用》大全文档格式.docx_第1页
第1页 / 共29页
《KEY按键应用》大全文档格式.docx_第2页
第2页 / 共29页
《KEY按键应用》大全文档格式.docx_第3页
第3页 / 共29页
《KEY按键应用》大全文档格式.docx_第4页
第4页 / 共29页
《KEY按键应用》大全文档格式.docx_第5页
第5页 / 共29页
《KEY按键应用》大全文档格式.docx_第6页
第6页 / 共29页
《KEY按键应用》大全文档格式.docx_第7页
第7页 / 共29页
《KEY按键应用》大全文档格式.docx_第8页
第8页 / 共29页
《KEY按键应用》大全文档格式.docx_第9页
第9页 / 共29页
《KEY按键应用》大全文档格式.docx_第10页
第10页 / 共29页
《KEY按键应用》大全文档格式.docx_第11页
第11页 / 共29页
《KEY按键应用》大全文档格式.docx_第12页
第12页 / 共29页
《KEY按键应用》大全文档格式.docx_第13页
第13页 / 共29页
《KEY按键应用》大全文档格式.docx_第14页
第14页 / 共29页
《KEY按键应用》大全文档格式.docx_第15页
第15页 / 共29页
《KEY按键应用》大全文档格式.docx_第16页
第16页 / 共29页
《KEY按键应用》大全文档格式.docx_第17页
第17页 / 共29页
《KEY按键应用》大全文档格式.docx_第18页
第18页 / 共29页
《KEY按键应用》大全文档格式.docx_第19页
第19页 / 共29页
《KEY按键应用》大全文档格式.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《KEY按键应用》大全文档格式.docx

《《KEY按键应用》大全文档格式.docx》由会员分享,可在线阅读,更多相关《《KEY按键应用》大全文档格式.docx(29页珍藏版)》请在冰点文库上搜索。

《KEY按键应用》大全文档格式.docx

bitHbit;

Hbit=HandSignal;

/*采样信号线*/

if(NewKey==FALSE){ 

/*如果上一次按键事件已经北处理*/

switch(ib_HandState){ 

/*根据接收状态散转*/

caseLEAD:

/*引导头接收情况*/ 

if(Hbit){ 

/*如果信号线是高电平*/ 

if((ib_LowTime>

MIN_LeadTime)&

&

(ib_LowTime<

MAX_LeadTime))/*判断低电平时间是否合乎要求*/

ib_HandState=START;

/*正确进入同步头接收状态*/

elseib_HandState=RESTART;

/*否则复位接收程序*/

ib_LowTime=0;

/*清除低电平时间计数*/

}

else{ 

/*如果信号是低电平*/ 

ib_LowTime++;

/*增加低电平时间计数器*/

if(ib_LowTime>

MAX_LeadTime) 

/*判断低电平时间是否超时*/

ib_HandState=RESTART;

/*是的话复位接收程序*/

break;

caseSTART:

/*同步头接收情况*/

if(Hbit){ 

/*如果信号线是高电平*/ 

ib_HighTime++;

/*高电平时间计数器加一*/

if(ib_HighTime>

MAX_SynTime) 

/*如果高电平时间超长,复位接收程序*/

}

/*如果信号线是低电平*/

if((ib_HighTime>

MIN_SynTime)&

(ib_HighTime<

MAX_SynTime))/*如果高电平时间合乎要求,将状态设定为数据为高电平检测*/

ib_HandState=WAIT_HIGH;

/*否则复位接收程序*/ 

ib_HighTime=0;

caseWAIT_HIGH:

/*等待数据位的上升沿的情况*/

if(Hbit){ 

/*如果检测到一个上升沿*/ 

MIN_L_Time)&

MAX_L_Time)){ 

/*如果低电平时间合乎要求,将状态设定为等待数据下降沿*/

ib_HandState=WAIT_LOW;

elseib_HandState=RESTART;

/*如果仍为低电平*/

/*低电平时间计数器加一*/

MAX_L_Time) 

/*如果低电平时间超长,则复位寄售程序*/

ib_HandState=RESTART;

caseWAIT_LOW:

/*等待数据下降沿的情况*/ 

/*如果仍是高电平*/

/*高电平数据计数器加一*/ 

MAX_H_Time) 

/*如果高电平实际超长,则复位接收程序*/

/*如果收到一个下降沿*/

ib_KeyCode[ib_KeyPoint]>

>

=1;

/*接收数据字节右移一位*/

MIN_B1TIME)&

MAX_B1TIME)){/*如果高电平宽度符合逻辑1标准,接收字节高位置一*/

ib_KeyCode[ib_KeyPoint]+=0x80;

ib_BitCount++;

/*接收数据位计数器加一*/

if(ib_BitCount>

7){ 

/*如果接收满一个字节*/

ib_BitCount=0;

/*清空位计数器*/

ib_KeyPoint++;

/*指向下一个字节*/

if(ib_KeyPoint>

3) 

/*如果接收完整个数据*/

{

//unsignedchari;

NewKey=TRUE;

/*置有新键按下标志*/

//for(i=0;

i<

4;

i++){

//TI=0;

//SBUF=ib_KeyCode;

//while(!

TI);

//}

//ib_HandState=RESTART;

ib_HighTime=0;

/*将高电平时间计数器清零*/

/*设定系统为等待上升沿状态*/

default:

if(ib_HandState==RESTART){ 

/*如果程序处于复位状态*/

/*复位各项参数*/

ib_HandState=LEAD;

ib_KeyCode[0]=0;

ib_KeyCode[1]=0;

ib_KeyCode[2]=0;

ib_KeyCode[3]=0;

ib_KeyPoint=0;

NewKey=FALSE;

好多遥控器(无线,红外)发射数据都是PPM调制的,以上程序稍微改动后可以应用于各种PPM调制信号的场合。

4矩阵式键盘识别技术

#include<

AT89X51.H>

unsignedcharID;

voiddelay10ms(void)

{unsignedchari,j;

for(i=20;

i>

0;

i--)

for(j=248;

j>

j--);

}

voiddelay02s(void)

{unsignedchari;

{delay10ms();

voidmain(void)

{while

(1)

{if(P3_7==0)

if(P3_7==0)

{ID++;

if(ID==4)

{ID=0;

while(P3_7==0);

switch(ID)

{case0:

P1_0=~P1_0;

delay02s();

case1:

P1_1=~P1_1;

case2:

P1_2=~P1_2;

case3:

P1_3=~P1_3;

支持键盘双击事件的C程序设计!

/**********************************************************************************

KeyBoardEncodeProgram

ThisProgramcanencodepress_keyupto128anditcandealKB_DBClickMessage

Thisisjustatestproramandonlyuse2key.IfMoreKeyneedtoEncode,please

modifythefunction:

KBKeyPress()

ThisPorgramuseMessage_Drivermethod,theKB_MsgisusedtorecordwhatKB_Msghasoccured.

Themeaningof'

SysKBMsg'

islistasfollowing.

ProgramDesign:

LiBaizhan

Ver:

1.10

Date:

2003-3-16

************************************************************************************/

reg51.h>

intrins.h>

sbit 

Key1 

P1^0;

Key2 

P1^1;

SomeSystemVarPre_Definition

CrystalFrequenceis11.0592MHz

#define 

TIME_2MS 

0X74

TIME_20MS 

0X043B

KB_INTERNAL 

/*KeyDBClkDetectionInternal*/

SysKBMsgdefineKeyboardMessage,itincludeSingle_ClickorDouble_Click

It'

sbit6~bit0recordkey_encodeandbit7recordDBClk

(1)orSglClk(0)

Itcanrecordandencodeupto127(2^7-1)keys

Nokeyispresswhenitis0

ThismethoddidnotdealkeysuchasCtrl_KeyorAlt_KeyorShift_Key...etc.

/*_________________________________________________*/

dataunsignedcharSysKBMsg=0;

/*| 

|*/

/*|D/S|KB6|KB5|KB4|KB3|KB2|KB1|KB0|*/

dataunsignedcharKBCounter=0;

bit 

KBCounterStart=0;

KBCounterStop=0;

/*ifKeyBoardcounterstopthenthisbitis1*/

KBCounterFlag=0;

/*CurrentCounterisusedbyKeyBoard*/

voidTimerInt0(void)interrupt1 

/*timer0interruptusetorecordhowlongkeyispress*/

TR0=0;

if(KBCounterFlag) 

/*CurrentCounterisusedbyKeyBoard*/

if(KBCounter<

KB_INTERNAL) 

/*ifDBClkDetectionisnotfinishthendetectcontinue*/

KBCounter++;

TR0=1;

else

KBCounter=0;

/*DBClkDetectionisfinish*/

KBCounterStop=1;

voidDelayMS(unsignedintdltime);

voidInit51(void);

unsignedcharKBKeyPress(void);

/*onlyreturnwhatkeyispress*/

voidKBKeyEncode(void);

/*encodewhichkeyispressedandDBClkorSglClk*/

voidKBStartTimer(unsignedcharCntH,unsignedcharCntL);

/*loadcounterinitialvalueandstarttimer*/

voidKBStopTimer(void);

voidKBDealPressKey(void);

/*dealkey_pressmessage*/

Init51();

while

(1)

KBKeyEncode();

/*recoredwhatKeyBoardMsgoccure:

whichkeyispressandsingleclkordbclk*/

KBDealPressKey();

DelayTimeis:

(20+17*dl_time)*12/CrystalFrequence(us)

voidDelayMS(unsignedintdltime)

unsignedinti;

for(i=0;

dltime;

i++);

voidInit51(void)

SCON 

=0x50;

/*mode1:

8-bitUART,enablereceiver 

TMOD 

=0x21;

/*timer1mode2:

8-Bitreload 

/*timer0mode1:

16-bitTimer 

TH1 

=BAUD_4800;

/*reloadvalue9600baud 

TR1 

=1;

/*timer1run 

IE 

=0X12;

/*enableSerialINT,Timer0INT 

ES 

=0;

/*disableSerialINT*/

EA 

=1;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2