?? 8x8 lcd.c
字號:
//******** 小波電子工作室 All rights reserved******
//******** 個人主頁:http://hi.baidu.com/niejinbo **
//******** 文 件 名: lcd_key.1.c ************
//******** 功能概要: 4*4矩陣鍵盤掃描 ***********
//******** MCU: STC89C52 晶振:11.0592Mhz **********
//******** 設 計 者: 聶金波 ************
//******** 完成日期: 2008-07-14 ************
//******** 當前版本: 0714.1 ************
//******** 改進說明: 暫無 ************
//******** 補充說明: 從鍵盤輸入0-F,在LCD上顯示出來
//*********頭文件區*******************
#include<reg52.h>
#include<math.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
//*********定義變量區*******************
sbit e=P2^7; //LCD使能信號
sbit rs=P2^5; //LCD數據/命令選擇信號
sbit rw=P2^6;
uchar tab_key[50];
uchar code tab[]="0123456789abcdef";
uchar n=0,temp,key;
//*********函數聲明區********************
void lcd_disp(); //LCD顯示函數
void lcd_init(); //LCD初始化函數
void write_com(uchar); //寫命令函數
void write_data(uchar); //寫數據函數
void delay(uint); //延遲函數
void key_scan(); //鍵盤掃描函數
void key_manage1(); //鍵盤功能分配函數
void key_manage2();
void key_manage3();
void key_manage4();
void key_manage5();
void key_manage6();
void key_manage7();
void key_manage8();
void key_manage9();
void key_manage10();
void key_manage11();
void key_manage12();
void key_manage13();
void key_manage14();
void key_manage15();
void key_manage16();
//**********主函數開始**********
void main()
{
lcd_init();
write_com();
while(1)
{
key_scan();
lcd_disp();
}
}
//**********LCD顯示函數開始***********
void lcd_disp()
{
uchar j,i=0;
write_com(0x80);
for(i=0;i<n;i++)
{
j=tab_key[i];
write_data(tab[j]);
}
}
/*void key_manage16()
{
tab_key[n]=15;
n++;
} */
//**********LCD初始化函數開始*********
void lcd_init()
{
e=0;
write_com(0x38); //設置顯示模式:16X2,5X7,8位數據接口
write_com(0x0c); //開顯示,顯示光標,光標閃爍
write_com(0x06); //讀寫一個字符后,地址指針及光標加一,且光標加一整屏顯示不移動
write_com(0x80); //設置光標指針
}
//**********寫命令函數開始************
void write_com(uchar com)
{
rs=0;
rw=0;
e=0;
P0=com; //寫入命令
delay(3); //延時約3ms
e=1; //LCD使能端置高電平
delay(5); //延時約5ms
e=0; //LCD使能端拉低電平
}
//**********寫數據函數開始************
void write_data(uchar dat)
{
rs=1; //低電平寫數據
rw=0;
P0=dat; //寫入命令
delay(3); //延時約3ms
e=1; //LCD使能端置高電平
delay(5); //延時約5ms
e=0; //LCD使能端拉低電平
}
//**********鍵盤掃描函數開始****
void key_scan()
{
//**********掃描第一行*********
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key_manage1();
break;
case 0xde:
key_manage2();
break;
case 0xbe:
key_manage3();
break;
case 0x7e:
key_manage4();
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
//**********掃描第二行*********
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key_manage5();
break;
case 0xdd:
key_manage6();
break;
case 0xbd:
key_manage7();
break;
case 0x7d:
key_manage8();
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
//**********掃描第三行*********
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key_manage9();
break;
case 0xdb:
key_manage10();
break;
case 0xbb:
key_manage11();
break;
case 0x7b:
key_manage12();
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
//**********掃描第四行*********
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key_manage13();
break;
case 0xd7:
key_manage14();
break;
case 0xb7:
key_manage15();
break;
case 0x77:
key_manage16();
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
}
//*********延時函數開始**************
void delay(uint k)
{
uint i,j;
for(i=k;i>0;i--)
for(j=50;j>0;j--);
}
//******鍵盤功能分配函數群開始********
// 鍵盤功能示意圖
// 設計者:聶金波
//** 1 ** 2 ** 3 ** 4 **
//** 5 ** 6 ** 7 ** 8 **
//** 9 ** 0 ** s ** c **
//** M1** M2** M3** M4**
void key_manage1()
{
tab_key[n]=0;
n++;
}
void key_manage2()
{
tab_key[n]=1;
n++;
}
void key_manage3()
{
tab_key[n]=2;
n++;
}
void key_manage4()
{
tab_key[n]=3;
n++;
}
void key_manage5()
{
tab_key[n]=4;
n++;
}
void key_manage6()
{
tab_key[n]=5;
n++;
}
void key_manage7()
{
tab_key[n]=6;
n++;
}
void key_manage8()
{
tab_key[n]=7;
n++;
}
void key_manage9()
{
tab_key[n]=8;
n++;
}
void key_manage10()
{
tab_key[n]=9;
n++;
}
void key_manage11()
{
tab_key[n]=10;
n++;
}
void key_manage12()
{
tab_key[n]=11;
n++;
}
void key_manage13()
{
tab_key[n]=12;
n++;
}
void key_manage14()
{
tab_key[n]=13;
n++;
}
void key_manage15()
{
tab_key[n]=14;
n++;
}
void key_manage16()
{
tab_key[n]=15;
n++;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -