📄 lcd12864.h
字号:
/**************************************************************************
File Name: LCD12864.h
Author: liuxinfa
Created: 2008/8/1
Modified: NO
Revision: 1.0
Email: mc22@163.com
带中文字库的液晶12864的C程序(MD12864C-1)!并口连接液晶!
unsigned char LCD_Wait(void);//内部等待函数
void LCD_Write(bit style, unsigned char input);//向LCD写入命令或数据
void LCD_Initial();//初始化LCD
void ClearLCD(void);
void Set_xy(unsigned char xpos,unsigned char ypos); //设置显示位置
void print(unsigned char x,unsigned char y,char* str);
void printstr(unsigned char xpos,unsigned char ypos,unsigned char str[],unsigned char k);
***************************************************************************/
#include <intrins.h> //因为要用到 _nop_();
//端口定义*****************************************************************
sbit LcdRs= P2^6;
sbit LcdRw= P2^5;
sbit LcdEn= P2^4;
//sbit PSB= P2^3;
//sbit RST= P2^2;
sfr DBPort= 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
//内部等待函数*************************************************************
unsigned char LCD_Wait(void)
{
LcdRs=0;
LcdRw=1; _nop_();
LcdEn=1; _nop_();
while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在调用LCD_Write()时,会进入死循环,
//可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80
//实际硬件时打开此语句
LcdEn=0;
return DBPort;
}
//向LCD写入命令或数据******************************************************
#define LCD_COMMAND 0 // Command
#define LCD_DATA 1 // Data
void LCD_Write(bit style, unsigned char input)
{
LcdEn=0;
LcdRs=style;
LcdRw=0; _nop_();
DBPort=input; _nop_();//注意顺序
LcdEn=1; _nop_();//注意顺序
LcdEn=0; _nop_();
LCD_Wait();
}
//初始化LCD************************************************************
//复位、通讯方式选择
void LCD_Initial()
{
// RST=1;//复位
// PSB = 1; //通讯方式为并口
//LCD_Write(LCD_COMMAND,0x34); //34H--扩充指令操作
LCD_Write(LCD_COMMAND,0x30); //功能设置,一次送8位数据,基本指令集
LCD_Write(LCD_COMMAND,0x0C); //0000,1100 整体显示,游标off,游标位置off
LCD_Write(LCD_COMMAND,0x01); //0000,0001 清DDRAM
LCD_Write(LCD_COMMAND,0x02); //0000,0010 DDRAM地址归位
LCD_Write(LCD_COMMAND,0x80); //1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC
}
//设置显示位置**********************************************************
//xpos(0~7),ypos(0~3)
void Set_xy(unsigned char xpos,unsigned char ypos)
{
switch(ypos)
{
case 0: xpos |= 0x80;break; //第一行
case 1: xpos |= 0x90;break; //第二行
case 2: xpos |= 0x88;break; //第三行
case 3: xpos |= 0x98;break; //第四行
default:break;
}
LCD_Write(LCD_COMMAND,xpos); //此处的Xpos已转换为LCM的显示寄存器实际地址
}
//在指定位置显示字符串***********************************************
void print(unsigned char x,unsigned char y,char* str)
{
Set_xy(x,y);
//while(*str!='\0')
while(*str!=0)
{
LCD_Write(LCD_DATA,*str);
str++;
}
}
//在指定位置显示字符串***********************************************
//K为显示字符的个数.
void printstr(unsigned char x,unsigned char y,unsigned char str[],unsigned char k)
{
unsigned char n;
Set_xy(x,y);
for(n=0;n < k;n++)
{
LCD_Write(LCD_DATA,str[n]); //显示汉字时注意码值,连续两个码表示一个汉字
}
}
//清屏******************************************************************
void ClearLCD(void)
{
LCD_Write(LCD_COMMAND,0x01);
//LCD_Write(LCD_COMMAND,0x34);
//LCD_Write(LCD_COMMAND,0x30);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -