📄 lcd.txt
字号:
#include <reg51.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<absacc.h>
#include<ctype.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_PORT P0 //用P0口传送就(DB0~DB7)的数据
#define Left 1
#define Right 2
#define _nop {}
sbit LCD_Busy=P0^7;
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;
sbit LCD_CS1=P2^3;
sbit LCD_CS2=P2^4;
sbit LCD_RST=P2^5;
sbit F_M_Q=P2^6;
uchar rx_dat=0;
uchar rx_dat_mem=0;
char code ji[]={0x00,0x04,0x04,0x04,0xFF,0x54,0x54,0x54,0x54,0x54,0xFF,0x04,0x04,0x04,0x00,0x00,
0x11,0x51,0x49,0x4D,0x4B,0x49,0x49,0x7D,0x49,0x49,0x4B,0x45,0x4D,0x59,0x09,0x00};//基
char code yu[]={0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x00,
0x00,0x00,0x00,0x00,0x20,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//于
char code sheng[]={0x00,0x80,0x60,0x1E,0x10,0x10,0x10,0x10,0xFF,0x12,0x10,0x10,0x98,0x10,0x00,0x00,
0x01,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x61,0x40,0x00};//生
char code ming[]={0x40,0x40,0xA0,0x90,0xA8,0xA4,0xA2,0x21,0xA2,0xA4,0xA8,0x90,0xB0,0x60,0x20,0x00,
0x00,0x00,0x3F,0x08,0x08,0x08,0x1F,0x00,0xFF,0x00,0x10,0x30,0x1F,0x00,0x00,0x00};//命
char code tan[]={0x08,0x08,0x08,0xFF,0x48,0x88,0xA6,0x9A,0x82,0xE2,0x82,0x8A,0x92,0xB6,0x82,0x00,
0x02,0x42,0x81,0x7F,0x00,0x10,0x08,0x06,0x01,0xFF,0x02,0x04,0x18,0x30,0x10,0x00};//探
char code ce[]={0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00};//测
char code de[]={0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,
0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x03,0x26,0x40,0x20,0x1F,0x00,0x00};//的
char code wu[]={0x00,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0xC2,0x42,0x42,0x42,0x42,0x42,0x40,0x00,
0x40,0x40,0x20,0x10,0x08,0x04,0x03,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x70,0x00};//无
char code xian[]={0x40,0x60,0x58,0xC7,0x62,0x00,0x90,0x90,0x90,0xFF,0x90,0x92,0x9C,0x94,0x80,0x00,
0x20,0x22,0x23,0x12,0x12,0x12,0x20,0x20,0x10,0x13,0x0C,0x14,0x22,0x40,0xF8,0x00};//线
char code yao[]={0x40,0x42,0xCC,0x00,0x00,0x4A,0x32,0x26,0x2A,0xE1,0x31,0x29,0x25,0x00,0x00,0x00,
0x40,0x20,0x1F,0x20,0x40,0x41,0x5D,0x51,0x51,0x5F,0x51,0x51,0x5D,0x41,0x40,0x00};//遥
char code kong[]={0x08,0x08,0x08,0xFF,0x88,0x48,0x00,0x98,0x48,0x28,0x0A,0x2C,0x48,0xD8,0x08,0x00,
0x02,0x42,0x81,0x7F,0x00,0x00,0x40,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x40,0x00};//控
char code che[]={0x00,0x04,0x84,0xC4,0xA4,0x9C,0x87,0x84,0xF4,0x84,0x84,0x84,0x84,0x84,0x00,0x00,
0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00};//车
char code nan[]={0x04,0x04,0xE4,0x24,0x24,0x64,0xB4,0x2F,0x24,0xA4,0x64,0x24,0x24,0xE6,0x04,0x00,
0x00,0x00,0x7F,0x04,0x05,0x05,0x05,0x7F,0x05,0x05,0x05,0x25,0x44,0x3F,0x00,0x00};//南
char code shi[]={0x00,0xFC,0x00,0x00,0xFF,0x00,0xF2,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xF2,0x00,
0x40,0x27,0x10,0x0E,0x01,0x00,0x0F,0x00,0x00,0x00,0xFF,0x00,0x04,0x08,0x07,0x00};//师
char code da[]={0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00};//大
char code dian[]={0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00};//电
char code yuan[]={0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00};//院
char code ren[]={0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3F,0xC2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x01,0x06,0x0C,0x18,0x30,0x60,0x20,0x00};//人
char code you[]={0x00,0x04,0x84,0x44,0xE4,0x34,0x2C,0x27,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,
0x02,0x01,0x00,0x00,0xFF,0x09,0x09,0x09,0x29,0x49,0xC9,0x7F,0x00,0x00,0x00,0x00};//有
char code kuaz[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0x3E,0x0E,0x06,0x02,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x7C,0x70,0x60,0x40,0x00};//【
char code kuay[]={0x02,0x06,0x0E,0x3E,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x60,0x70,0x7C,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//】
char code sz1[]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};//数字1
char code sz2[]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};//数字2
char code sz3[]={0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};//数字3
char code sz4[]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};//数字4
char code sz5[]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};//数字5
char code sz6[]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};//数字6
char code sz7[]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};//数字7
char code sz8[]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};//数字8
char code sz9[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};//数字9
char code sz0[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};//数字0
char code ZFA[]={0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20};//字符"A"
char code ZFB[]={0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00};//字符"B"
char code ZFC[]={0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00};//字符"C"
char code ZFD[]={0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00};//字符"D"
char code ZFG[]={0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00};//字符G
char code ZFI[]={0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};//字符I
char code ZFK[]={0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00};//字符K
char code ZFM[]={0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00};//字符M
char code ZFN[]={0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00};//字符N
char code ZFO[]={0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00};//字符O
char code ZFR[]={0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20};//字符R
char code ZFW[]={0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00};//字符W
char code ZFX[]={0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00};//字符"*"
char code ZFJ[]={0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00};//字符"#"
char code ZFSLH[]={0x00,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//字符"..."
char code PIEH[]={0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//字符"'"
char code hengxian[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01};//横线
/*--------------------延时微妙级别的函数-----------------*/
void DELAY_XUS( uchar delay_time)
{
while(delay_time)
delay_time--;
}
/********************************************************************/
/***************延时毫妙级别的函数 delay_time*10ms的时间*************/
/********************************************************************/
void DELAY_XMS(uchar delay_time)
{
uchar i,j,k;
for(i=0;i<delay_time;i++)
for(j=0;j<10;j++)
for(k=0;k<120;k++) {;}
}
/********************************************************************/
/***************延时毫妙级别的函数 delay_time*1ms的时间*************/
/********************************************************************/
void DELAY_NMS(uchar delay_time)
{
uchar i,k;
for(i=0;i<delay_time;i++)
for(k=0;k<120;k++) {;}
}
/***********************************************************************************/
/**************************串口函数*************************************************/
/***********************************************************************************/
/**********************串口初始化函数***********************************************/
void UART_INIT()
{
TMOD=0x20; //定时器在方式2下工作
SCON=0x50; //方式1工作(8位UART,波特率可变),允许串行接收
TH1=0xFD; //波特率为9600
TR1=1; //启动定时器1运行
ES=1; //串口中断使能
EA=1; //中断总开关使能
}
/******************************接收中断函数*****************************************/
void RX_DATA() interrupt 4
{
RI=0;
rx_dat=SBUF;
}
/*****************************发送函数**********************************************/
void TX_DATA(uchar n)
{
SBUF=n;
while(TI==0);
TI=0;
}
/*---------- 液晶模块复位函数---------------*/
void LCD_RESET(void)
{
LCD_RST=0;
DELAY_XUS(50);
LCD_RST=1;
DELAY_XUS(50);
}
/*------液晶模块忙信号的检测-----------*/
void LCD_CHECK_BUSY(void)
{
LCD_RS=0; //选择指令寄存器
LCD_RW=1; //选择读方式
LCD_PORT=0XFF; //LCM数据口置全1
while(1)
{
LCD_EN=1; //使能,把LCM的数据读入MCU
_nop;
_nop; //2个机器周期的延时
if(LCD_PORT<0X80)break; //P0^7口为1时候表示LCM模块为忙的状态,0为空闲的状态
LCD_EN=0; //禁能
}
LCD_EN=0; //禁能
}
/*---------------向液晶模块写入控制指令代码---------------------*/
void LCD_W_COMMAND( uchar command, uchar cs_num)
{
if(cs_num==1)//选择左半屏
{
LCD_CS1=1;
LCD_CS2=0;
}
else if(cs_num==2)//选择右半屏
{
LCD_CS1=0;
LCD_CS2=1;
}
LCD_CHECK_BUSY();
LCD_EN=0;
LCD_RS=0;
LCD_RW=0;
LCD_PORT=command;
LCD_EN=1;
DELAY_XUS(2);
LCD_EN=0;
}
/*------------------------向液晶模块写入数据-----------------------------*/
void LCD_W_DATA(uchar Date ,uchar cs_num)
{
if(cs_num==1)//选择左半屏
{
LCD_CS1=1;
LCD_CS2=0;
}
else if(cs_num==2)//选择右半屏
{
LCD_CS1=0;
LCD_CS2=1;
}
LCD_CHECK_BUSY();
LCD_EN=0;
LCD_RS=1;
LCD_RW=0;
LCD_PORT=Date;
LCD_EN=1;
DELAY_XUS(2);
LCD_EN=0;
}
/*-------------- LCD初始化------------*/
void LCD_INIT(void)
{
LCD_RESET();
DELAY_XUS(50);
LCD_W_COMMAND(0X3F,Left); //LCD为开的状态
LCD_W_COMMAND(0X3F,Right);
LCD_W_COMMAND(0XC0,Left); //读起始行
LCD_W_COMMAND(0XC0,Right);
LCD_W_COMMAND(0XB8,Left); //读起始页
LCD_W_COMMAND(0XB8,Right);
LCD_W_COMMAND(0X40,Left); //读起始列
LCD_W_COMMAND(0X40,Right);
}
/*--------------------------------------------------------------
---------------LCD清屏函数---------------------------------------
-------------------------------------------------------------*/
void LCD_CLR(uchar cs_num)
{
uchar i,j,temp;
for(i=0;i<8;i++)
{
temp=0XB8+i;
LCD_W_COMMAND(temp,cs_num);
temp=0X40;
LCD_W_COMMAND(temp,cs_num);
for(j=0;j<64;j++)
LCD_W_DATA(0X00,cs_num);
}
DELAY_XUS(50);
}
/*-----------------------------------------------------------
向液晶模块左右半屏写入图像显示数据
------------------------------------------------------------*/
void LCD_GRAPH_PLAY(uchar *disbuf,uchar cs_num)
{
uchar i,j,temp;
for(i=0;i<8;i++)
{
temp=0XB8+i;
LCD_W_COMMAND(temp,cs_num);
temp=0X40;
LCD_W_COMMAND(temp,cs_num);
for(j=0;j<64;j++)
LCD_W_DATA(disbuf[i*64+j],cs_num);
}
DELAY_XUS(50);
}
/*-----------------------------------------------------------------------
*下面这个函数用于向液晶模块左右半屏写入汉字显示数据。
*函数入口参数disbuf-----向液晶模块写入的汉字显示数据
cs_num------液晶模块左右半屏的选择数
page_num------开始显示页数(0----7),共八页
clm_num------开始显示列数 (16的倍数),共64列
word_num------每页显示的汉字个数(最多为4个)
-----------------------------------------------------------------------*/
void LCD_HZ_PLAY(uchar page_num,uchar clm_num,uchar word_num,uchar
*disbuf,uchar cs_num)
{
uchar i,k,temp;
temp=0xB8+page_num;
LCD_W_COMMAND(temp,cs_num);
temp=0x40+clm_num;
LCD_W_COMMAND(temp,cs_num);
for(i=0;i<word_num;i++)
{
for(k=0;k<16;k++)
{
LCD_W_DATA(disbuf[k+32*i],cs_num);
}
}
page_num++;
temp=0xB8+page_num;
LCD_W_COMMAND(temp,cs_num);
temp=0x40+clm_num;
LCD_W_COMMAND(temp,cs_num);
for(i=0;i<word_num;i++)
{
for(k=16;k<32;k++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -