📄 lcd.h
字号:
#include <p18f87j10.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
# define SYS_SET_COM 0x40
# define SCROLL_COM 0x44
# define HDOT_SCR_COM 0x5a
# define OVLAY_COM 0x5b
# define DIS_COM 0x59
# define CSRDIR_COM_ADD 0x4c
# define CSRDIR_COM_SUB 0x4d
# define CSRDIR_COM_UP 0x4e
# define CSRDIR_COM_DOWN 0x4f
# define CSRW_COM 0x46
# define CSRFORM_COM 0x5d
# define MWRITE_COM 0x42
# define CGRAM_ADD_COM 0x5c
#define Led1 PORTAbits.RA0
#define Led2 PORTAbits.RA1
#define Led3 PORTAbits.RA2
#define Led4 PORTAbits.RA3
#define RD PORTEbits.RE0 //RD
#define WR PORTEbits.RE1 //WR
#define CS PORTBbits.RB3 //CS
#define A PORTEbits.RE3 //C/D
#define BackLight PORTEbits.RE4
#define BackLight_On() {BackLight=1;}
#define BackLight_Off() {BackLight=0;}
#define Led1_On() {Led1=0;}
#define Led1_Off() {Led1=1;}
#define Led2_On() {Led2=0;}
#define Led2_Off() {Led2=1;}
#define Led3_On() {Led3=0;}
#define Led3_Off() {Led3=1;}
#define Led4_On() {Led4=0;}
#define Led4_Off() {Led4=1;}
uchar systab[8]={0x30,0x87,0x07,0x27,0x32,0xef,0x28,0x00};
uchar scrolltab1[10]={0x00,0x00,0xf0,0x00,0x10,0xf0,0x00,0x80,0x00,0x00};
uchar scrolltab2[10]={0x00,0x00,0xf0,0x80,0x25,0xf0,0x00,0x00,0x00,0x00};
union u {uint word;
struct{uchar hi;uchar lo;}bytes;};
/*===============================================================================
接口情况表述:
1...A0 ..... RE3 寄存器选择信号,命令数据方式选择
2.../WR..... WR--RE1 写有效
3.../RD..... RD--RE0 读有效
4...PD.......RD 数据总线
5../CS . CS--RB3 片选通信号,低电平有效.实际使用应编入地址
==============================================================================*/
void delay(uint rx)
{
unsigned int i=0;
while(i<rx){i++;}
}
//A0 RD WR Function
//0 0 1 Status flag read
//1 0 1 Display data and cursor address read
//0 1 0 Display data and parameter write
//1 1 0 Command write
void WriteCmd(unsigned char cmd)
{
TRISD=0x00;
PORTD=0x00;
CS=0;
A=1;
Nop();
RD=1;
PORTD=cmd;
delay(10);
WR=0;
Nop();
WR=1;
CS=1;
}
void WriteData(unsigned char data)
{
TRISD=0x00;
PORTD=0x00;
CS=0;
A=0;
RD=1;
PORTD=data;
delay(10);
WR=0;
Nop();
WR=1;
CS=1;
}
uchar ReadData(void)
{
uchar rdata;
TRISD=0xff;
CS=0;
A=1;
WR=1;
PORTD=0xff;
RD=0;
delay(100);
rdata=PORTD;
RD=1;
CS=1;
return(rdata);
}
void clear_lcd(void)
{
uint i;
WriteCmd(CSRDIR_COM_ADD); //光标右移
WriteCmd(CSRW_COM); //光标定位
WriteData(0); //光标低8位
WriteData(0); //光标高8位
WriteCmd(MWRITE_COM); //数据写入指令
for(i=0x8000;i>0;i--) //32k内存空间全部清零
{
WriteData(0x00);
}
}
void ini_lcd(void)
{
uchar i;
WriteCmd(SYS_SET_COM); //系统设置命令
for(i=0;i!=8;i++)
{
WriteData(systab[i]);
}
WriteCmd(SCROLL_COM); //显示域设置
for(i=0;i!=10;i++)
{
WriteData(scrolltab2[i]);
}
WriteCmd(HDOT_SCR_COM); //写入点位移指令代码
WriteData(0);
WriteCmd(OVLAY_COM); //显示合成方式
WriteData(0x01);
// WriteData(0x0c);
WriteCmd(CSRFORM_COM);
WriteData(0x07);
WriteCmd(CSRW_COM);
WriteData(0x01);
WriteData(0x00);
clear_lcd();
WriteCmd(DIS_COM); //显示开
WriteData(0x06);
// WriteCmd(CSRFORM_COM);
// WriteData(0x00);
// WriteData(0x00);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -