📄 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 + -