📄 display.c
字号:
/*****************************************************************/
/* */
/*名称: PS/2解码+LCD12864显示程序 */
/*功能: 1 解码键盘的串行数据,译出当前按键值 */
/* 2 在LCD12864上显示PS/2键盘上可显示的字符 */
/* 3 实现LCD12864的换行显示,退格等功能 */
/*难度等级: 高 */
/* 作者: 51kaifa */
/* 版权: http://www.51kaifa.com */
/*编写日期: 2006.05.20 */
/*****************************************************************/
#include <reg52.h>
#include <string.h>
#include "tcode.h" //PS/2通码表
#define uchar unsigned char
/**********引脚定义*********/
sbit lck = P3^5; //锁存信号
sbit Key_CLK = P3^2; //PS/2键盘数时钟线
sbit Key_Data= P1^4; //PS/2键盘数据线
/********常用命令及参数定义********/
#define DISPON 0x3f
#define DISPOFF 0x3e
#define DISPFIRST 0xc0
#define SETX 0x40
#define SETY 0xb8
#define LCDBUZY 0x80
#define L 0x00
#define R 0x40
#define LIMIT 0x80
/**********全局变量************/
bit xy,simple,BF;
uchar cbyte, statu;
uchar IntNum=0;
uchar KeyV=0,uGetvalue=0;
static unsigned char Key_UP=0, Shift = 0;
static unsigned char DisNum = 0; //显示用指针
/**************函数******************/
void delay3s(void);
void WrL(uchar x);
void WrR(uchar x);
void Lcmcls(void);
void wtcom(void);
void Lcminit (void);
void Putpicture(void);
void VtoH8x16change(uchar *hzbuf);
void Puthalf(uchar *strch,uchar row,uchar col);
void Wrdata(uchar x,uchar row,uchar col);
void Locatexy(uchar row,uchar col);
void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
void vWrite8x16String(uchar *str,uchar col, uchar row, bit flag);
void Decode(unsigned char ScanCode);
extern unsigned char code help[];//开机显示的帮助信息
extern unsigned char code char_Table[95][16];//字符显示点阵
/***********主程序***************/
void main(void)
{
P2 = 0xff;
EX0 = 1; //允许PS/2中断
IT0 = 0; //低电平有效
EA = 1; //开中断
Lcminit(); //初始化LCD
Putpicture();
delay3s();
while(!BF);//检测接上键盘后准继续
Lcmcls();//清屏
do
{
if (BF)
Decode(KeyV);//解码
else
EA = 1; //开中断
}
while(1);
}
/***************微秒级延时*****************/
void delay(unsigned int time)
{ unsigned int i;
for(i=0;i<time;i++);
}
/***************约3S延时********************/
void delay3s(void)
{
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
}
//***********初始化LCD*******************/
void Lcminit (void)
{
cbyte=DISPOFF;
WrL(cbyte);
WrR(cbyte);
cbyte=DISPON;
WrL(cbyte);
WrR(cbyte);
cbyte=DISPFIRST;
WrL(cbyte);
WrR(cbyte);
Lcmcls();
Locatexy(0,0);
}
/***************LCD清屏********************/
void Lcmcls(void)
{ uchar i,j;
for(i=0;i<8;i++){
delay(6);
for(j=0;j<LIMIT;j++){
delay(6);
Wrdata(0x0,i,j);
}
}
}
/**************写左区***************/
void WrL(uchar x)
{
P0=0xFF;//P0口送FF,准备读
lck = 0;
P1 = 0x2a;//ELCD=1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -