📄 lcms.h
字号:
#ifndef _LCMSERIAL_H_
#define _LCMSERIAL_H_
//--------------- LCD 指令 -----------------------------
//基本指令集 RE = 0
#define CLEAR 0x0001 //清除显示
#define RESAC 0x0002 //位址歸位
#define SETPOINT 0x0006 //進入點設定,游標右移,DDRAM 位址計數器(AC)加1
#define CURSOR 0x000F //整體顯示,游標顯示,游標位置反白
#define MCURSOR 0x0014 //游標向右移動,AC=AC+1
#define FUCSET 0x0030 //功能設定,BIT MPU 控制界面,基本指令集,默认设置
#define CGRAMAC 0x0040 //設定CGRAM 位址
#define DDRAMAC 0x0080 //設定DDRAM 位址
//第一行AC 範圍為80H..8FH
//第二行AC 範圍為90H..9FH
//第三行AC 範圍為A0H..AFH
//第四行AC 範圍為B0H..BFH
//#define READBF RS=0,RW=1,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0
// BF AC6 AC5 AC4 AC3 AC2 AC1 AC0
// 讀取忙碌旗標(BF)和位址
// 就是读取指令寄存器,PORT8006,BF=1,表示LCD忙碌
//#define WRITERAM RS=1,RW=0,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0
// D7 D6 D5 D4 D3 D2 D1 D0
// 寫入資料到RAM
// 就是写数据寄存器: PORT8005
//#define READRAM RS=1,RW=1,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0
// D7 D6 D5 D4 D3 D2 D1 D0
// 讀取RAM 的值
// 就是从数据寄存器讀取資料, PORT8007
//擴充指令集 RE=1
#define IDLE 0x01 //待命模式
#define CGRAMSET 0x02 //捲動位址或RAM 位址選擇
#define REVERSE 0x04 //反白選擇
#define SLEEP 0x0c //脫離睡眠模式
#define EFUCSET 0x66 //擴充功能設定,8 BIT MPU 控制界面,為擴充指令集動作,繪圖顯示ON
#define SISA 0x40 //設定IRAM 位址或捲動位址
#define SETGDRAM 0x80 //設定繪圖RAM 位址
//---------------------------------------------------------
/* 端口定义 */
//---------------------------------------------------------
ioport unsigned int port8006; //串行时钟地址
ioport unsigned int port8007; //串行数据地址
//--------------------------------------------------------------------
// 函数名称 : void SendByte(unsigned char dat) 串行发送一字节数据
// 函数说明 : 串行发送一字节数据,在时钟的上升沿发送数据,在时钟为低电平时,数据变化
// 输入参数 : 发送的数据
// 输出参数 : 无
//--------------------------------------------------------------------
void SendByte(unsigned char dat)
{
unsigned char i;
unsigned int temp;
for(i=0;i<8;i++)
{
temp = port8007; //读IO 8007 SCLK="0";
if(dat & 0x0080)
port8006 = 0; //写IO 8006 SID="1",发送数据"1" MSB先发送
else
temp = port8006; //读IO 8006 SID="0",发送数据"0" MSB先发送
port8007 = 0; //写IO 8007 SCLK="1";
dat = dat<<1; //数据左移,移位到dat.7
}
temp = port8007 ; //读IO 8007 SCLK="0";
}
//--------------------------------------------------------------------
// 函数名称 : void SendCMD(unsigned char dat) 写指令寄存器
// 函数说明 : 写指令寄存器
// 输入参数 : 输入的命令字
// 输出参数 : 无
//--------------------------------------------------------------------
void SendCMD(unsigned char dat)
{
SendByte(0x00F8); //11111,00,0 RW=0,RS=0 同步标志
SendByte(dat & 0x00F0); //高四位
SendByte((dat & 0x000F)<<4); //低四位
}
//--------------------------------------------------------------------
// 函数名称 : void SendDat(unsigned char dat) 写显示数据或单字节字符
// 函数说明 : 写数据寄存器
// 输入参数 : 输入的数据
// 输出参数 : 无
//--------------------------------------------------------------------
void SendDat(unsigned char dat)
{
SendByte(0x00FA); //11111,01,0 RW=0,RS=1
SendByte(dat & 0x00F0); //高四位
SendByte((dat & 0x000F)<<4); //低四位
}
//--------------------------------------------------------------------
// 函数名称 : void display(unsigned char x_add,unsigned char dat1,unsigned char dat2)写汉字到LCD 指定的位置
// 函数说明 : x_add显示RAM的地址,dat1/dat2显示汉字编码
// 输入参数 : x_add,dat1/dat2
// 输出参数 : 无
//--------------------------------------------------------------------
void Display(unsigned char x_add,unsigned char dat1,unsigned char dat2)
{
SendCMD(x_add);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
SendDat(dat1);
SendDat(dat2);
}
//--------------------------------------------------------------------
// 函数名称 : void Initlcm(void)
// 函数说明 : 初始化 LCM
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void Initlcm()
{
asm(" nop ");
delay_50ms();
SendCMD(FUCSET); //功能設定,8BIT 并口,基本指令集
delay_100us();
SendCMD(FUCSET); //功能設定,8BIT 并口,基本指令集
delay_100us();
SendCMD(CURSOR); //整體顯示,游標顯示,游標位置反白
delay_100us();
SendCMD(CLEAR); //清除显示
delay_20ms();
SendCMD(SETPOINT); //進入點設定,游標右移,DDRAM 位址計數器(AC)加1
delay_100us();
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -