久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 課程設計,鍵盤掃描顯示程序(c51)

課程設計,鍵盤掃描顯示程序(c51)

作者: 時間:2016-11-18 來源:網絡 收藏
//課程設計,鍵盤掃描顯示程序

//由于開發板中使用了鎖存器,在proteus中仿真的話,加上鎖存器的話,會出現亂碼,并且//不成功,所以,就不貼圖了,不過以下代碼,在事物板上測試成功

本文引用地址:http://cqxgywz.com/article/201611/315824.htm

//實驗代碼為實現按鍵掃描,并顯示在數碼管上

//實驗班上共有4個按鍵,分別接在p3.4,p3,5,p3.6.p3.7上,因此并沒有用到矩陣鍵盤掃描,//控制起來比較簡單,6數碼管觀通過鎖存器接在P0口上。

#include

#define uchar unsigned char

#define uint unsigned int

sbit dula=P2^6; //數碼管段選控制位

sbit wela=P2^7; //數碼管位選控制位

uchar key=8;

//共陰數碼管段碼(不叫特殊的編碼)

uchar code table[]=

{

0xed, 0x48, 0xf4, 0xb5, 0x99,

0x3d, 0x7d, 0x85, 0xfd, 0xbd,

0xdd, 0x79, 0x6c, 0xf1, 0x7c,

0x5c, 0x10, 0x00,

};

//位選編碼

uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//函數聲明

void display(uchar Duan_value,uchar Wei_value); //數碼管掃描函數

void delay(uchar t); //延時函數

void key_scan(); //按鍵掃描函數

void delay(uchar t)

{

uchar x,y;

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

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

}

//顯示對應位選的數碼管按鍵值

void display(uchar Duan_value,uchar Wei_value)

{

dula=1;

P0=table[Duan_value];

dula=0;

wela=1;

P0=table1[Wei_value];

wela=0;

delay(3);

}

void key_scan()

{

uchar temp;

P3=0xff; //P3口寫1,用于讀取數據

temp=P3&0xf0; //只取高四位

if(temp!=0xf0)

{

delay(10); //延時,去除抖動

temp=P3&0xf0;

if(temp!=0xf0)

{

switch(temp)

{

case 0xe0:key=0;break;

case 0xd0:key=1;break;

case 0xb0:key=2;break;

case 0x70:key=3;break;

default:

key=8;break;

}

do{ //消除按起抖動

temp=P3;

temp&=0Xf0;

}while(temp!=0xf0);

}

}

}

void main()

{

while(1)

{

display(key,5); //用開發板上最后一位顯示按鍵值

key_scan();

}

}



評論


技術專區

關閉