日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 程序思路與缺陷參考:51單片機(jī)(AT89C52)矩陣鍵盤(pán)檢測(cè)程序#include typedef unsigned char uchar; typedef unsigned int uint; #define dula_h PORTD|=0x01 #define dula_l PORTD&=0xfe #define wela_h

程序思路與缺陷參考:51單片機(jī)(AT89C52)矩陣鍵盤(pán)檢測(cè)程序

#include

typedef unsigned char uchar;

typedef unsigned int uint;

#define dula_h PORTD|=0x01

#define dula_l PORTD&=0xfe

#define wela_h PORTD|=0x02

#define wela_l PORTD&=0xfd

#define keyport PORTB

#define keypin (PINB)

#define keydre DDRB

#define keystate0 0 //按鍵確認(rèn)狀態(tài)

#define keystate1 1 //按鍵無(wú)動(dòng)作狀態(tài)

char keystate=1; //按鍵狀態(tài)初始化為按鍵無(wú)動(dòng)作狀態(tài)

uchar keynum=0;

void delayms(uint z) //1ms

{

uint x,y;

for(x=z;x>0;x--)

for(y=157;y>0;y--);

}

uchar table[]={ //共陽(yáng)數(shù)碼管

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

void smg(void)

{

dula_l;

wela_l;

PORTC=0x01;

wela_h;

wela_l;

PORTC=table[keynum];

dula_h;

dula_l;

delayms(1);

PORTC=0x02;

wela_h;

wela_l;

PORTC=table[keynum];

dula_h;

dula_l;

delayms(1);

PORTC=0x04;

wela_h;

wela_l;

PORTC=table[keynum];

dula_h;

dula_l;

delayms(1);

PORTC=0x08;

wela_h;

wela_l;

PORTC=table[keynum];

dula_h;

dula_l;

delayms(1);

PORTC=0x10;

wela_h;

wela_l;

PORTC=table[keynum];

dula_h;

dula_l;

delayms(1);

PORTC=0x20;

wela_h;

wela_l;

PORTC=table[keynum];

dula_h;

dula_l;

delayms(1);

PORTC=0x40;

wela_h;

wela_l;

PORTC=table[keynum];

dula_h;

dula_l;

delayms(1);

PORTC=0x80;

wela_h;

wela_l;

PORTC=table[keynum];

dula_h;

dula_l;

delayms(1);

}

void keyscan(void)

{

uchar temp1,temp2,column,row;

switch(keystate)

{

case keystate0: //keystate0,按鍵按下確認(rèn)狀態(tài),下一狀態(tài)為keystate1(按鍵無(wú)動(dòng)作狀態(tài))

keydre=0xff;

keyport=0x0f;

keydre=0xf0;

temp1=keypin;

keydre=0xff;

keyport=0xf0;

keydre=0x0f;

temp2=keypin;

if((temp1|temp2)!=0xff)

{

temp1|=temp2;

if(!(temp1&0x80))

row=3;

else

if(!(temp1&0x40))

row=2;

else

if(!(temp1&0x20))

row=1;

else

if(!(temp1&0x10))

row=0;

if(!(temp1&0x08))

column=3;

else

if(!(temp1&0x04))

column=2;

else

if(!(temp1&0x02))

column=1;

else

if(!(temp1&0x01))

column=0;

keynum=column*4+row;

while(!(keyport==0x0f|keyport==0xf0));

keystate=keystate1;

break;

}

else

keystate=keystate1;

break;

case keystate1: //keystate1,按鍵無(wú)動(dòng)作狀態(tài),下一狀態(tài)為keystate0(按鍵無(wú)動(dòng)作狀態(tài))

keydre=0xff;

keyport=0x0f; //輸出0x0f

keydre=0xf0;

temp1=keypin;

keydre=0xff;

keyport=0xf0; //輸出0xf0

keydre=0x0f;

temp2=keypin;

if((temp1|temp2)!=0xff)

{

keystate=keystate0;

}

else

keystate=keystate1;

break;

}

}

void main(void)

{

DDRC=0xff;

DDRD|=0x03;

while(1)

{

keyscan();

smg();

}

}



本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉