📄 lcd_dot.c
字号:
/////////////////////////////////////////////////////////////////////
///////////硬件连线说明:WR--AB4、RD--AB5、数据口0~7--DB0~DB7
/////////// C/D---AB6、FS--AB7、CE--OUTIO2
/////////////////////////////////////////////////////////////////////
#pragma large
#include <reg51.h>
#include <string.h>
#define COMW_ADD ((unsigned char volatile xdata *)(0xE060))// 指令口写地址
#define COMR_ADD ((unsigned char volatile xdata *)(0xE050))// 指令口读地址
#define DATW_ADD ((unsigned char volatile xdata *)(0xE020))// 数据口写地址
#define DATR_ADD ((unsigned char volatile xdata *)(0xE010))// 数据口读地址
char CM; //指令寄存器
char DT; //数据寄存器
extern int addr; //地址
extern unsigned char show_com;
extern char char_data;
extern unsigned char bmp_dat[1028];
int Start_addr;
void lcd_dot_init(void);
void Show_dot(unsigned char Y,unsigned char X);
void Show_text(unsigned char line,unsigned char col,unsigned char i);
void Show_string(unsigned char line,unsigned char col,unsigned char *string);
void Show_han(unsigned char line,unsigned char col,unsigned char *ch);
void clear_LCD();
void WRITE_COM(void);
void WRITE_DAT(void);
void Set_ADD();
void Get_dot_ADD(unsigned char Y,unsigned char X);
void Get_show_com(unsigned char i);
void lcd_delay();
void Show_int_num_dot(unsigned char line,unsigned char col,unsigned int temp,char wei,unsigned char float_);
char State_0_1_test();
char State_2_test();
void lcd_dot_init(void)
{
////////////////////////////清屏///////////////////////////////
clear_LCD();
//////////////////////Set text home address 0x2000////////////
DT=0x00;
WRITE_DAT();
DT=0x04;
WRITE_DAT();
CM=0x40;
WRITE_COM();
///////////////////////Set text area///////////////////////////
DT=0x10;
WRITE_DAT();
DT=0x00;
WRITE_DAT();
CM=0x41;
WRITE_COM();
/////////////////////Set graphic home address 0x0000////////////
DT=0x00;
WRITE_DAT();
DT=0x00;
WRITE_DAT();
CM=0x42;
WRITE_COM();
/////////////////////Set graphic area////////////////////////////
DT=0x10;
WRITE_DAT();
DT=0x00;
WRITE_DAT();
CM=0x43;
WRITE_COM();
/////////////////////Mode set////////////////////////////////////
CM=0x80;
WRITE_COM();
////////////////////Display mode//////////////////////////////////
CM=0x9c;
WRITE_COM();
}
/////////////////////////////////////LCD点显示///////////////////////////////////////
//(Y,X)为坐标值,左下方为(0,0);Y为纵向坐标:(0~255),X为横向坐标:(0~127)
/////////////////////////////////////////////////////////////////////////////////////
void Show_dot(unsigned char Y,unsigned char X)
{
Start_addr=0;
Get_dot_ADD(Y,X); //获取显示地址
Set_ADD(); //建立地址
Get_show_com(X); //获取显示数据
CM=show_com; //传送数值
WRITE_COM();
}
////////////////////////////////////LCD字符显示/////////////////// /////////////////
//(line,col)为坐标值,左上方为(0,0);line为行数:(0~7),col为列数:(0~15)
/////////////////////////////////////////////////////////////////////////////////////
void Show_text(unsigned char line,unsigned char col,unsigned char i)
{
Start_addr=0x0400;
addr=Start_addr+16*line+col;//获取显示地址
Set_ADD(); //建立地址
DT=i;
*DATW_ADD=DT;
CM=0xC4;
WRITE_COM();
}
////////////////////////////////////LCD字符串显示/////////////////// /////////////////
//(line,col)为坐标值,左上方为(0,0);line为行数:(0~7),col为列数:(0~15)
/////////////////////////////////////////////////////////////////////////////////////
void Show_string(unsigned char line,unsigned char col,unsigned char *string)
{
unsigned char str_len;
unsigned char cnt;
str_len=strlen(string);
for(cnt=0;cnt<str_len-1;cnt++)
{
Show_text(line,col+cnt,string[cnt]-32);
}
}
/////////////////////////////////////LCD汉字显示/////////////////////////////////////
//(line,col)为坐标值,左上方为(0,0);line为行数:(0~63),col为列数:(0~7)
/////////////////////////////////////////////////////////////////////////////////////
void Show_han(unsigned char line,unsigned char col,unsigned char *ch)
{
unsigned char cnt;
Start_addr=0x0000;
addr=Start_addr+16*line+col*2; //获取显示地址
for(cnt=0;cnt<32;cnt+=2)
{
Set_ADD(); //建立地址
CM=0xB0;
WRITE_COM();
DT=ch[cnt]; //传送数值
WRITE_DAT();
DT=ch[cnt+1]; //传送数值
WRITE_DAT();
CM=0xB2;
WRITE_COM();
addr+=16;
}
addr=0;
Set_ADD();
}
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////LCD图形显示/////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
void Show_bmp()
{
int i;
//////显示图形
DT=0x00;
WRITE_DAT();
DT=0x00;
WRITE_DAT();
CM=0x24;
WRITE_COM();
CM=0xB0;
WRITE_COM();
for(i=0;i<1024;i++)
{
DT=bmp_dat[i]; //传送数值
WRITE_DAT();
}
CM=0xB2;
WRITE_COM();
addr=0;
Set_ADD();
}
////////////////////////写指令代码子程序//////////////////////
void WRITE_COM(void)
{
while(!State_0_1_test()) ;
*COMW_ADD=CM; //写指令代码
}
/////////////////////////写数据代码子程序/////////////////////
void WRITE_DAT(void)
{
while(!State_0_1_test()) ;
*DATW_ADD=DT; //写指令代码
}
//////////////////////////判断状态0、1/////////////////////////
char State_0_1_test()
{
char temp;
temp=*COMR_ADD;
temp&=0x03;
if(temp==0x03) return 1;
else return 0;
}
///////////////////////////判断状态2////////////////////////////
char State_2_test()
{
char temp;
temp=*COMR_ADD;
temp&=0x04;
if(temp==0x04) return 1;
else return 0;
}
////////////////////////////清屏////////////////////////////////
void clear_LCD()
{
int i;
//////显示数据清零
DT=0x00;
WRITE_DAT();
DT=0x00;
WRITE_DAT();
CM=0x24;
WRITE_COM();
CM=0xB0;
WRITE_COM();
for(i=0;i<2048;i++)
{
DT=0; //传送数值
WRITE_DAT();
}
CM=0xB2;
WRITE_COM();
addr=0;
Set_ADD();
}
////////////////////////////设置地址//////////////////////////////
void Set_ADD()
{
char low;
char heigh;
int addr_temp;
addr_temp=addr;
low=addr_temp;
addr_temp>>=8;
heigh=addr_temp;
DT=low;
WRITE_DAT();
DT=heigh;
WRITE_DAT();
CM=0x24;
WRITE_COM();
}
/////////////////////////////获得点显示地址/////////////////////////
void Get_dot_ADD(unsigned char Y,unsigned char X)
{
char temp;
char add;
int ADDRESS=512;
temp=Y/4;
temp-=31;
add=X/8;
ADDRESS-=(temp*16);
ADDRESS+=add;
addr=Start_addr+ADDRESS;
}
////////////////////////////获得显示点的字符命令show_com/////////////
void Get_show_com(unsigned char i)
{
char cnt;
cnt=i%8;
switch(cnt)
{
case 0: show_com=0xFF;break;
case 1: show_com=0xFE;break;
case 2: show_com=0xFD;break;
case 3: show_com=0xFC;break;
case 4: show_com=0xFB;break;
case 5: show_com=0xFA;break;
case 6: show_com=0xF9;break;
case 7: show_com=0xF8;break;
default:show_com=F0;
}
}
void lcd_delay()
{
int i=2048;
while(i--);
}
void Show_int_num_dot(unsigned char line,unsigned char col,unsigned int temp,char wei,unsigned char float_)
{
char num[7];
char i;
for(i=0;i<wei;i++)
{
num[wei-1-i]=temp%10+48;
temp=temp/10;
}
num[wei+1]='\0';
for(i=wei;i>=float_;i--)
{
num[i]=num[i-1];
if(i==float_)
num[i]='.';
}
Show_string(line,col,num);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -