久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
狀態機實現鍵盤矩陣0~f顯示的單片機源碼
[打印本頁]
作者:
淺夢無痕
時間:
2018-1-23 21:25
標題:
狀態機實現鍵盤矩陣0~f顯示的單片機源碼
基于c語言,狀態機實現鍵盤矩陣0~f
功能:狀態機實現矩陣鍵盤 (從0~F的顯示)
說明: P2^0-P2^3接行,P2^4-P2^7接列,10ms中斷掃描
單片機: AT89S52
******************************************************/
#include<reg52.h>
#define KEY P2
#define NO_KEY 0xff //無按鍵按下
#define KEY_STATE0 0 //判斷按鍵按下
#define KEY_STATE1 1 //確定按鍵按下
#define KEY_STATE2 2 //按鍵釋放狀態
#define V_TH0 0Xd8
#define V_TL0 0Xf0
#define V_TMOD 0X01
#define uint unsigned int
#define uchar unsigned char
sbit DAT=P0^3;
sbit CLK=P0^2;
uint flag=0; //按鍵掃描標志
uchar code tab[]={
0xed,0x09,0xbc,0x9d,0x59,0xd5,
0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,
0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全滅
void sendbyte(uchar byte) //這個是數碼管的驅動
{
uchar num,c;
num=tab[byte];
for(c=0;c<8;c++)
{
CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1; //右移位賦值
}
}
unsigned char KeyScan()
{
static unsigned char key_state=KEY_STATE0;
uchar key_value,key_temp;
uchar key1,key2;
KEY=0xf0;
key1=KEY&0xf0; //確定哪一行的按鍵按下
KEY=0x0f;
key2=KEY&0x0f; //確定哪一列的按鍵按下
key_temp=key1|key2; //確定按鍵位置
switch(key_state) //檢測當前狀態
{
case KEY_STATE0:
if(key_temp!=NO_KEY)
{
key_state=KEY_STATE1; //轉換狀態
}
break;
case KEY_STATE1:
if(key_temp==NO_KEY)
{
key_state=KEY_STATE0;
}
else
{
switch(key_temp) //當確定按鍵按下后,列舉所有的按鍵情況
{
case 0x7e: key_value=0;break;
case 0xbe: key_value=1;break;
case 0xde: key_value=2;;break;
case 0xee: key_value=3;break;
case 0x7d: key_value=4;break;
case 0xbd: key_value=5;break;
case 0xdd: key_value=6;break;
case 0xed: key_value=7;break;
case 0x7b: key_value=8;break;
case 0xbb: key_value=9;break;
case 0xdb: key_value=10;break;
case 0xeb: key_value=11;break;
case 0x77: key_value=12;break;
case 0xb7: key_value=13;break;
case 0xd7: key_value=14;break;
case 0xe7: key_value=15;break;
}
key_state=KEY_STATE2;
}
break;
case KEY_STATE2:
if(key_temp==NO_KEY)
{
key_state=KEY_STATE0;
}
break;
}
return key_value;
}
main(void)
{
uchar readkey=NO_KEY;
P2=0xff;
TMOD=V_TMOD;
TH0=V_TH0; //12MHz 10Ms
TL0=V_TL0;
ET0=1;
EA=1;
TR0=1;
while(1)
{
if(flag)
{
flag=0;
readkey=KeyScan();
switch(readkey) //switch語句里面的case判斷后,接著的語句為相應的需要做的事情,
{ //這里只是在數碼管顯示相應的數值。
case 0: sendbyte(0);break;
case 1: sendbyte(1);break;
case 2: sendbyte(2);break;
case 3: sendbyte(3);break;
case 4: sendbyte(4);break;
case 5: sendbyte(5);break;
case 6: sendbyte(6);break;
case 7: sendbyte(7);break;
case 8: sendbyte(8);break;
case 9: sendbyte(9);break;
case 10: sendbyte(10);break;
case 11: sendbyte(11);break;
case 12: sendbyte(12);break;
case 13: sendbyte(13);break;
case 14: sendbyte(14);break;
case 15: sendbyte(15);break;
}
}
}
}
void timer0() interrupt 1
{
TH0=V_TH0; //10Ms
TL0=V_TL0;
flag=1;
}
復制代碼
狀態機實現矩陣鍵盤.doc
2018-1-23 21:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
36 KB, 下載次數: 12, 下載積分: 黑幣 -5
作者:
cccc888
時間:
2018-1-24 11:02
uchar key_value,key_temp; KEY=0xf0; key_temp=KEY&0xf0; //確定哪一行的按鍵按下 KEY=0x0f; key_temp=key_temp | KEY&0x0f; //確定哪一列的按鍵按下 //key_temp=key1|key2; //確定按鍵位置
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
69视频在线播放
|
日本一区二区三区四区
|
精品国产伦一区二区三区观看说明
|
91精品国产综合久久久密闭
|
国产一区二区久久
|
精品一区二区三区av
|
国产精品一区二区三区在线
|
国产一区二区精品自拍
|
视频一区在线观看
|
亚洲精品一区中文字幕乱码
|
羞羞视频网
|
日韩有码一区
|
av在线电影网
|
四虎影院免费在线播放
|
久久久久久高潮国产精品视
|
羞羞免费网站
|
日韩av免费在线观看
|
日韩在线免费播放
|
日韩在线免费看
|
桃花av在线
|
精品国产乱码久久久久久丨区2区
|
日韩欧美手机在线
|
欧美黄在线观看
|
久久久久成人精品亚洲国产
|
99久久精品免费视频
|
亚洲精品短视频
|
www.久久
|
欧美一区二区在线免费观看
|
青草青草久热精品视频在线观看
|
日本久久精品视频
|
欧美精品1区
|
69av网
|
欧美极品一区二区
|
国产在线精品一区二区
|
国产精品亚洲精品久久
|
99久久久无码国产精品
|
欧美一级片在线播放
|
一区二区电影网
|
日本久久一区二区三区
|
亚洲日韩中文字幕一区
|
亚洲一区二区中文字幕
|