📄 lcd_12864.h
字号:
/******************************************************************************************************************
程序名: LCD头文件
功能概述:
LCD头文件 适用于ST7920主控芯片的128*64LCD
引脚连接: DB0---DB7=PORTB
RS-------=PD4
RW-------=PD5
EN-------=PD6
PSB------=VCC
VO-------=GND
MCU类型: ATmega16
晶振频率: 7.3728MHZ
版本: V0.1
编程: 于军峰
编译日期: 2007-05-01
******************************************************************************************************************/
#ifndef _LCD_H
#define _LCD_H
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//*****************************************************************************************************************
#define RS_0 PORTD&=~(1<<PD4)
#define RS_1 PORTD|= (1<<PD4)
#define RW_0 PORTD&=~(1<<PD5)
#define RW_1 PORTD|= (1<<PD5)
#define EN_0 PORTD&=~(1<<PD6)
#define EN_1 PORTD|= (1<<PD6)
#define DATA_OUT PORTB
#define BUSY_CHECK PINB7
//*****************************************************************************************************************
//*****************************************************************************************************************
void check_busy(void);
void write_com(uchar cmdcode);
void write_data(uchar Dispdata);
void lcd_reset(void);
void han_zi_display(uchar *s);
void delay_ms(uint m);
void delay_3_us(uint n); //N us延时函数
//***********************************************显示字符串********************************************************
void han_zi_display(uchar *s)
{
while(*s>0)
{
write_data(*s);
s++;
}
}
//***********************************************检查忙位**********************************************************
void check_busy(void)
{
RS_0;
delay_3_us(100);
RW_1;
delay_3_us(170);
DATA_OUT=0xff;
EN_1;
while((BUSY_CHECK&0x80)!=0);
EN_0;
}
//****************************************************写命令到LCD**************************************************
void write_com(uchar cmdcode)
{
check_busy();
RS_0;
RW_0;
EN_1;
DATA_OUT=cmdcode;
delay_3_us(1);
EN_0;
delay_3_us(1);
}
//****************************************************写数据到LCD**************************************************
void write_data(uchar Dispdata)
{
check_busy();
RS_1;
RW_0;
EN_1;
DATA_OUT=Dispdata;
delay_3_us(1);
EN_0;
delay_3_us(1);
}
//****************************************************初始化LCD屏**************************************************
void lcd_reset(void)
{
delay_ms(60);
write_com(0x30);
delay_3_us(200); //选择基本指令集
write_com(0x30); //选择8bit数据流
delay_3_us(200);
write_com(0x0c); //开显示(无游标、不反白)
delay_3_us(200);
write_com(0x01); //清除显示,并且设定地址指针为00H
delay_3_us(200);
write_com(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
delay_3_us(200);
}
//*****************************************************************************************************************
//***********************************************延时子程序********************************************************
//************************************** N-us延时,最小3us,最大65.6MS ********************************************
//适用机型 :用于AVR系列单片机延时处理,7.3728MHZ晶振下
//变量定义类型:unsigned int
//最小延时时间:即N=0时为3us;
//增量: 1us
//最大延时时间:3us+(65535*1us)=65538us
//例如: i=0为3us;i=1为4us;i=2为5us..........................
//延时间间=3us+N
void delay_3_us(uint n) //N us延时函数
{
for(;n>0;n--) //延时基数为3us加上 n
{
asm("nop");
asm("nop");
}
}
//注意:N为UINT
//*****************************************************************************************************************
//****************************************** N-ms延时,最小1ms,最大65.5s *****************************************
//适用机型 :用于AVR系列单片机延时处理,7.3728MHZ晶振下
//变量定义类型:unsigned int
//最小延时时间:即m=1时为1ms; m不能为0,否则延时时间增长不成比例(注意:m=0时,延时=6.24us的区别)
//增量: 1ms
//最大延时时间:65535*1ms=65.535s
//例如: m=1/1ms;m=2/2ms..........................
//延时间间=m*1ms
void delay_ms (unsigned int m) //Nms延时
{
uint n;
extern uchar kk;
for(;m>0;m--)
for(n=1229;n>0;n--)
{
WDR(); //喂狗
}
}
//unsigned int m不能为空,如1ms就写delay_ms(1);依次类推
//*****************************************************************************************************************
#endif
//**************************************************Program End****************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -