📄 液晶.c
字号:
#include <ht46r232.h>
//定义MCU与LCD的接口
#define RET _pb5
#define RW _pb2
#define RS _pb1
#define E _pb3
#define CS1 _pb4
#define CS2 _pb7
#define CS3 _pb6
#define DATA _pa
#define uchar unsigned char
#define uint unsigned int
const uchar shu[][14]=
{
{0xE0,0x03,0x10,0x04,0x08,0x08,0x08,0x08,0x10,0x04,0xE0,0x03,0x00,0x00},/*"0",0*/
{0x00,0x00,0x10,0x08,0x10,0x08,0xF8,0x0F,0x00,0x08,0x00,0x08,0x00,0x00},/*"1",1*/
{0x00,0x00,0x30,0x0C,0x08,0x0A,0x08,0x09,0x88,0x08,0x70,0x0C,0x00,0x00},/*"2",2*/
{0x00,0x00,0x30,0x06,0x08,0x08,0x48,0x08,0x48,0x08,0xB0,0x07,0x00,0x00},/*"3",3*/
{0x00,0x01,0xC0,0x02,0x20,0x02,0x10,0x0A,0xFC,0x0F,0x00,0x0A,0x00,0x00},/*"4",4*/
{0x00,0x00,0xF8,0x06,0x48,0x08,0x48,0x08,0x48,0x08,0x88,0x07,0x00,0x00},/*"5",5*/
{0xE0,0x07,0x90,0x08,0x48,0x08,0x48,0x08,0x48,0x08,0x98,0x07,0x00,0x00},/*"6",6*/
{0x00,0x00,0x38,0x00,0x08,0x00,0x88,0x0F,0x68,0x00,0x18,0x00,0x00,0x00},/*"7",7*/
{0x30,0x07,0xC8,0x08,0x88,0x08,0x88,0x08,0xC8,0x08,0x30,0x07,0x00,0x00},/*"8",8*/
{0xF0,0x0C,0x08,0x09,0x08,0x09,0x08,0x09,0x88,0x04,0xF0,0x03,0x00,0x00},/*"9",9*/
{0x08,0x08,0x18,0x0C,0x68,0x0B,0x80,0x00,0x68,0x0B,0x18,0x0C,0x08,0x08},/*"X",0*/
};
const uchar ziku[][28]=
{
{0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x07,0xE0,0x03,0xC0,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*"箭头",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*"空白",1*/
};
//延时程序;
void delay_us(int t)
{
do
t--;
while(t>1);
}
void delay10ms(unsigned long int t)
{
while(t!=0)
{
delay_us(1000);
t--;
}
}
/*----------------------------------------------------------------------------
给第一个KS0108窗口发送指令
------------------------------------------------------------------------------
--*/
void OutFI(uchar i)
{
/*unsigned char data_sta,u;
u=2;
while(u--)//检测LCD是否处于忙态
{E=0;RW=1;RS=0;CS1=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;//_pa=0xff;
data_sta=DATA;
_pac=0x00;//_pa=0xff;
E=0;RW=0;CS1=1;delay_us(1);
E=1;
}*/
delay_us(1000);
E=0;RW=0;RS=0;CS1=0;delay_us(1);
E=1;delay_us(1);
DATA=i;delay_us(1);
E=0;RW=1;CS1=1;delay_us(1);
E=1;
}
/*----------------------------------------------------------------------------
给第二个KS0108窗口发送指令
------------------------------------------------------------------------------
--*/
void OutSI(uchar i)
{
/*unsigned char data_sta;
do{
E=0;RW=1;RS=0;CS2=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;_pa=0xff;
data_sta=DATA;
_pac=0x00;_pa=0xff;
E=0;RW=0;CS2=1;delay_us(1);
E=1;delay_us(1);
}while(data_sta&0x80);*///检测LCD是否处于忙态
delay_us(1000);
E=0;RW=0;RS=0;CS2=0;delay_us(1);
E=1;delay_us(1);
DATA=i;
delay_us(1);E=0;RW=1;CS2=1;delay_us(1);
E=1; delay_us(1);
}
/*---------------------------------------------------------------------------
给第三个KS0108窗口发送指令
------------------------------------------------------------------------------
--*/
void OutTI(uchar i)
{
/*unsigned char data_sta;
do{
E=0;RW=1;RS=0;CS3=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;_pa=0xff;
data_sta=DATA;
_pac=0x00;_pa=0xff;
E=0;RW=0;CS3=1;delay_us(1);
E=1;delay_us(1);
}while(data_sta&0x80);*///检测LCD是否处于忙态
delay_us(1000);
E=0;RW=0;RS=0;CS3=0;delay_us(1);
E=1;delay_us(1);
DATA=i;
delay_us(1);E=0;RW=1;CS3=1;delay_us(1);
E=1; delay_us(1);
}
/*----------------------------------------------------------------------------
给第一个KS0108窗口发送数据
------------------------------------------------------------------------------
--*/
void OutFD(uchar i)
{
/*unsigned char data_sta,u;
u=2;
while(u--)
{
E=0;RW=1;RS=0;CS1=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;//_pa=0xff;
data_sta=DATA;
_pac=0x00;//_pa=0xff;
E=0;RW=0;CS1=1;delay_us(1);E=1;delay_us(1);
}*///检测LCD是否处于忙态
delay_us(1000);
E=0;RW=0;RS=1;CS1=0;delay_us(1);
E=1;delay_us(1);
DATA=i;
delay_us(1);E=0;RW=1;CS1=1;delay_us(1);E=1; delay_us(1);
}
/*----------------------------------------------------------------------------
给第二个KS0108窗口发送数据
------------------------------------------------------------------------------
--*/
void OutSD(uchar i)
{
/*unsigned char data_sta;
do{
E=0;RW=1;RS=0;CS2=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;_pa=0xff;
data_sta=DATA;
_pac=0x00;_pa=0xff;
E=0;RW=0;CS2=1;E=1;
}while(data_sta&0x80);*///检测LCD是否处于忙态
delay_us(1000);
E=0;RW=0;RS=1;CS2=0;delay_us(1);
E=1;delay_us(1);
DATA=i;
delay_us(1);E=0;RW=1;CS2=1;delay_us(1);E=1;delay_us(1);
}
/*----------------------------------------------------------------------------
给第三个KS0108窗口发送数据
------------------------------------------------------------------------------
--*/
void OutTD(uchar i)
{
/*unsigned char data_sta;
do{
E=0;RW=1;RS=0;CS3=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;_pa=0xff;
data_sta=DATA;
_pac=0x00;_pa=0xff;
E=0;RW=0;CS3=1;delay_us(1);E=1;delay_us(1);
}while(data_sta&0x80);*///检测LCD是否处于忙态
delay_us(1000);
E=0;RW=0;RS=1;CS3=0;delay_us(1);
E=1;delay_us(1);
DATA=i;
delay_us(1);E=0;RW=1;CS3=1;delay_us(1);E=1; delay_us(1);
}
/*------------------------------------------------------------------------------
初始化LCD,系统重启,第一次请求
---------------------------------------------------------------------------------*/
void InitLCD()
{
RET=0;delay10ms(500);
RET=1;delay10ms(20);
OutFI(0x40); //*Set the Y address 0
OutSI(0x40);
OutTI(0x40);
OutFI(0xb8); //Set the Page 0
OutSI(0xb8);
OutTI(0xb8);
OutFI(0xc0); //Set the display start line 0
OutSI(0xc0);
OutTI(0xc0);
OutFI(0x3f); //Display ON
OutSI(0x3f);
OutTI(0x3f);
}
/*------------------------------------------------------------------------------
清除三个Cks0108显示内存
清屏
---------------------------------------------------------------------------------*/
void Clrscreen()
{
unsigned char i,j;
for(i=0;i<8;i++)
{
OutFI(0xc0);
OutFI(0xb8|i);
for(j=0;j<64;j++)
{
OutFI(j|0x40);
OutFD(0x00);
}
}
for(i=0;i<8;i++)
{
OutSI(0xc0);
OutSI(0xb8|i);
for(j=0;j<64;j++)
{
OutSI(j|0x40);
OutSD(0x00);
}
}
for(i=0;i<8;i++)
{
OutTI(0xc0);
OutTI(0xb8|i);
for(j=0;j<64;j++)
{
OutTI(j|0x40);
OutTD(0x00);
}
}
}
/*--------------------------------------------------------------------------------
显示
x_add:0~191
layer:0~7
width:1~192
high:1~8页
*bmp:字模名
---------------------------------------------------------------------------------*/
void DrawNum(uchar x_add,uchar layer,uchar bmp)
{
unsigned char x;
unsigned int i=0,j;
for(x=x_add;x<x_add+7;x++)
{
if (x>127)
{
OutTI(0xc0);
for(j=0;j<2;j++)
{
OutTI((x-128)|0x40);
OutTI((layer+j)|0xb8);
OutTD(shu[bmp][i]);
i++;
}
}
else if (x>63)
{
OutSI(0xc0);
for(j=0;j<2;j++)
{
OutSI((x-64)|0x40);
OutSI((layer+j)|0xb8);
OutSD(shu[bmp][i]);
i++;
}
}
else
{
OutFI(0xc0);
for(j=0;j<2;j++)
{
OutFI(x|0x40);
OutFI((layer+j)|0xb8);
OutFD(shu[bmp][i]);
i++;
}
}
}
}
/*--------------------------------------------------------------------------------
显示
x_add:0~191
layer:0~7
width:1~192
high:1~8页
*bmp:字模名
---------------------------------------------------------------------------------*/
void DrawZi(uchar x_add,uchar layer,uchar bmp)
{
unsigned char x;
unsigned int i=0,j;
for(x=x_add;x<x_add+14;x++)
{
if (x>127)
{
OutTI(0xc0);
for(j=0;j<2;j++)
{
OutTI((x-128)|0x40);
OutTI((layer+j)|0xb8);
OutTD(ziku[bmp][i]);
i++;
}
}
else if (x>63)
{
OutSI(0xc0);
for(j=0;j<2;j++)
{
OutSI((x-64)|0x40);
OutSI((layer+j)|0xb8);
OutSD(ziku[bmp][i]);
i++;
}
}
else
{
OutFI(0xc0);
for(j=0;j<2;j++)
{
OutFI(x|0x40);
OutFI((layer+j)|0xb8);
OutFD(ziku[bmp][i]);
i++;
}
}
}
}
void X7400()
{
DrawNum(3,6,1);
DrawNum(28,6,2);
DrawNum(53,6,3);
DrawNum(78,6,4);
DrawNum(103,6,5);
DrawNum(128,6,6);
DrawNum(153,6,7);
DrawNum(3,0,1);DrawNum(10,0,4);
DrawNum(28,0,1);DrawNum(35,0,3);
DrawNum(53,0,1);DrawNum(60,0,2);
DrawNum(78,0,1);DrawNum(83,0,1);
DrawNum(103,0,1);DrawNum(110,6,0);
DrawNum(128,0,9);
DrawNum(153,0,8);
DrawNum(64,3,7);
DrawNum(71,3,4);
DrawNum(78,3,10);
DrawNum(85,3,10);
DrawNum(92,3,0);
DrawNum(99,3,0);//74XX00
}
void X7402()
{
DrawNum(3,6,1);
DrawNum(28,6,2);
DrawNum(53,6,3);
DrawNum(78,6,4);
DrawNum(103,6,5);
DrawNum(128,6,6);
DrawNum(153,6,7);
DrawNum(3,0,1);DrawNum(10,0,4);
DrawNum(28,0,1);DrawNum(35,0,3);
DrawNum(53,0,1);DrawNum(60,0,2);
DrawNum(78,0,1);DrawNum(83,0,1);
DrawNum(103,0,1);DrawNum(110,6,0);
DrawNum(128,0,9);
DrawNum(153,0,8);
DrawNum(64,3,7);
DrawNum(71,3,4);
DrawNum(78,3,10);
DrawNum(85,3,10);
DrawNum(92,3,0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -