?? key8x8.c
字號:
/*****************************************************************/
/* */
/*名稱: 讀鍵+顯示程序 */
/*功能: 讀取當前按鍵值,由數碼管顯示出來。 */
/*難度等級: 中 */
/* 作者: zengrenliang */
/* 版權: http://www.51kaifa.com */
/*編寫日期: 2006.05.19 */
/*****************************************************************/
#include<reg52.h>
#define uchar unsigned char
sbit addr0 = P1^4;//系統片選地址線0
sbit addr1 = P1^5;//系統片選地址線1
sbit addr2 = P1^6;//系統片選地址線2
sbit addr3 = P1^7;//系統片選地址線3
//行掃描數組
uchar code scan[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//row0--row7
//數碼管顯示的段碼表
uchar code table[18] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//0,1,2,3,4,5
0x82,0xf8,0x80,0x90,0x88,0x83,//6,7,8,9,a,b
0xc6,0xa1,0x86,0x8e,0xbf,0xff};//c,d,e,f,-,空格
uchar dispbuf[8]; //顯示緩沖區
/*****************************延時函數**************************/
void delay (unsigned int us)
{
while(us--);
}
/******************************顯示+讀鍵*************************/
void vLedKey_Scan()
{ unsigned char i,key,value;
for(i=0;i<8;i++){
addr3 = 0;
addr0 = 0;
addr1 = 1;
addr2 = 0;//開發板上U4(74HC574)的片選地址
P0 =table[dispbuf[0]]; //取一行顯示數據
addr3 = 1;
addr3 = 0;//在U4的11腳(鎖存信號)產生上升沿
P2 = scan[i];//取row0--row7行掃描數據
addr0 = 0;
addr1 = 0;
addr2 = 1;//開發板上U6(74HC244)的片選地址
addr3 = 1;
P0 = 0xff;//準備讀取按鍵
if(P0 !=0xff)
{value = 0;
key = ~P0;
while(key){
value++;
key = key /2;
}
dispbuf[0] = 8*i + value;//計算十六進制鍵值
}
addr3 = 0;//鍵值讀取完成,使U6無效
delay(50); //延時50us
}
}
/*******************************主函數***********************/
main()
{ uchar i;
for(i=0;i<8;i++)
dispbuf[i] = 0;
while(1){
vLedKey_Scan(); //顯示,讀鍵掃描
}
}
/********************************結束************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -