📄 lcd.c
字号:
#include <intrins.h>
#include "main.h"
#include "lcd.h"
#include "mcs51.h"
//extern uchar code HZ16[][16];
/*--------液晶驱动----*/
void write_com(unsigned char cmdcode)//写命令到LCD
{
Di = 0;
Rw = 0;
Lcd_Bus = cmdcode;
Delay12864(0);
E = 1;
Delay12864(0);
E = 0;
}
/************************/
void write_data(unsigned char Dispdata)//写数据到LCD
{
Di = 1;
Rw = 0;
Lcd_Bus = Dispdata;
Delay12864(0);
E = 1;
Delay12864(0);
E = 0;
}
/***************************/
void Clr_Scr(void)//清除内存
{ unsigned char j,k;
CS1=1;CS2=1;
write_com(Page_Add+0);
write_com(Col_Add+0);
for(k=0;k<8;k++){
write_com(Page_Add+k);
write_com(Col_Add+0);
for(j=0;j<64;j++){
write_data(0x00);
}
}
}
/****************************/
void Disp_Chinese(unsigned char pag,unsigned char col, char code *hzk)
{ unsigned char j=0,i=0;//指定位置显示汉字16*16
for(j=0;j<2;j++){
write_com(Page_Add+pag+j);
write_com(Col_Add+col);
for(i=0;i<16;i++){
write_data(hzk[16*j+i]);
}
}
}
/*************************/
void Disp_Digit(unsigned char pag,unsigned char col, unsigned char code *hzk)
{ unsigned char j=0, i=0; //指定位置显示字母或数字8*16
for(j=0;j<2;j++){
write_com(Page_Add+pag+j);
write_com(Col_Add+col);
for(i=0;i<8;i++){
write_data(hzk[8*j+i]);
}
}
}
/***********************************/
/*void Display_1(uchar type,uchar xy,uint display_data)//teye=1显示汉字teye=0显示ASCII码
{
uchar row,line;
CS1=0;CS2=0;
row = (xy%16)*8;//列
line = 2 * (xy/16); //行
if(type)
{
putHZ(row,line,display_data);
}
else
{
putASCII(row,line,display_data);
}
CS1=1;CS2=1;
}*/
/************显示汉字驱动***********************/
/*void putHZ(uchar x,uchar y,uint show_data_index)//Y=ROW X=COLUMN
{
uchar i;
//pagenum--页地址,低四位(0~8)
//hcolumnnum--行地址高四位
//lcolumnnum--行地址低四位
uchar pagenum,hcolumnnum,lcolumnnum;
pagenum=y|0x0B0;
hcolumnnum=((x)/0x10)|0x10;
lcolumnnum=((x)%0x10);
SerialWrite(0,pagenum);
//STARTROWADDR--初始化显示行
SerialWrite(0,STARTROWADDR);
SerialWrite(0,hcolumnnum);
SerialWrite(0,lcolumnnum);
for(i=0;i<16;i++)
{
SerialWrite(1,HZ16[show_data_index][i]);
}
pagenum++;
SerialWrite(0,pagenum);
//STARTROWADDR--初始化显示行
SerialWrite(0,STARTROWADDR);
SerialWrite(0,hcolumnnum);
SerialWrite(0,lcolumnnum);
for(i=0;i<16;i++)
{
SerialWrite(1,HZ16[show_data_index+1][i]);
}
}*/
/******************显示ASCII码驱动******************************/
/*void putASCII(uchar x,uchar y,uint show_data_index)
{
uchar i,pagenum,hcolumnnum,lcolumnnum;
CS1=0;CS2=0;
pagenum=y|0xB0;
hcolumnnum=((x)/0x10)|0x10;
lcolumnnum=((x)%0x10);
SerialWrite(0,pagenum);
//STARTROWADDR--初始化显示行
SerialWrite(0,STARTROWADDR);
SerialWrite(0,hcolumnnum);
SerialWrite(0,lcolumnnum);
for(i=0;i<8;i++)
{
SerialWrite(1,HZ16[show_data_index][i]);
}
pagenum++;
SerialWrite(0,pagenum);
//STARTROWADDR--初始化显示行
SerialWrite(0,STARTROWADDR);
SerialWrite(0,hcolumnnum);
SerialWrite(0,lcolumnnum);
for(i=0;i<8;i++)
{
SerialWrite(1,HZ16[show_data_index][i+8]);
}
CS1=1;CS2=1;
}*/
/*************显示首地址*********************/
/*void SerialWrite(uchar ComDatFlag,uchar OutData)
{
uchar j;
Rw=ComDatFlag; //DATA=1,COMMAND=0
for(j=0;j<8;j++)
{
E=0;
if((OutData&0x80)==0x80)
Di=1;
else
Di=0;
_nop_();
OutData<<=1;
E=1;
_nop_();
}
}*/
void Init_lcd(void)//初始化LCD屏
{
CS1=1;
CS2=1;
Delay12864(100);
write_com(Disp_Off);
write_com(Page_Add+0);
write_com(Start_Line+0);
write_com(Col_Add+0);
write_com(Disp_On);
}
/******************************************************************************/
void Uplcd()
{
Rst=1;
CS1=0;CS2=0;
CS1=1;
ACC=0x03F;
W_INST();
CS1=0;
CS2=1;
ACC=0x03F;
W_INST();
}
void W_INST() // 写指令子程序(INST)
{
Di=0;
Delay12864(0);
Rw=0;
Delay12864(0);
ACC=P0;
E=1;
Delay12864(0);
E=0;
}
void Delay12864(unsigned int t)//
{ unsigned int i,j;
for(i=0;i<t;i++){
for(j=0;j<10;j++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -