?? 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 + -