📄 lcd1602_4h.h
字号:
/*******************************************
* LCD1602联接函数 *
* LCD1602操作函数,4位数据联接关系: *
* LCD1602:DB4-DB7 __ M16:PA4-PA7 *
* LCD1602:RS _______ M16:PA2 *
* LCD1602:E ________ M16:PA3 *
* LCD1602:R/W ______ GND *
* 时钟频率:外部7.3728M晶体 *
* 作 者:铜河 *
* 日 期:2007年3月31日 *
*******************************************/
#include <iom16v.h>
#include <macros.h>
//LCD相关端口定义
#define RS1602 PA2 //RS接在PORTA.2上
#define E1602 PA3 //E接在PORTA.3上
#define LCD_CON PORTA //控制接在PA口
#define CLR_RS LCD_CON&=~(1<<RS1602)//RS清0
#define SET_RS LCD_CON|=1<<RS1602 //RS置1
#define CLR_E LCD_CON&=~(1<<E1602) //E清0
#define SET_E LCD_CON|=1<<E1602 //E置1
#define LCD_DATA PORTA //数据接在PA口
//简化宏定义
#define uchar unsigned char
#define uint unsigned int
/*************************************
* LCD1602操作函数组 *
*************************************/
//写数据到LCD的函数:入口data,需写入的显示数据
void lcd_da(uchar data)
{
uchar a;
SET_RS; //RS置高,写数据
SET_E;
a=data|0x0F; //将低四位置1,保留高4位
LCD_DATA=((LCD_DATA|0xF0)&a); //数据高4位送端口
delay_us(50);
CLR_E; //E下降沿写入数据
delay_ms(1); //延时50uS
SET_E;
a=((data<<4)|0x0F); //将低四位移到高四位并保留
LCD_DATA=((LCD_DATA|0xF0)&a); //数据低4位送端口
delay_us(50);
CLR_E; //E下降沿写入数据
delay_ms(1); //延时50uS
}
//写指令到LCD的函数:入口data,需写入的控制指令
void lcd_comm(uchar data)
{
uchar a;
CLR_RS; //RS清0,写指令
SET_E;
a=data|0x0F; //将低四位置1,保留高4位
LCD_DATA=((LCD_DATA|0xF0)&a); //指令高4位送端口
delay_us(50);
CLR_E; //E下降沿写入指令
delay_ms(1); //延时50uS
SET_E;
a=((data<<4)|0x0F); //将低四位移到高四位并保留
LCD_DATA=((LCD_DATA|0xF0)&a); //指令低4位送端口
delay_us(50);
CLR_E; //E下降沿写入指令
delay_ms(1); //延时50uS
}
//写半指令到LCD的函数:入口data,需写入的控制指令
void lcd_comm_b(uchar data)
{
uchar a;
CLR_RS; //RS清0,写指令
SET_E;
a=data|0x0F; //将低四位置1,保留高4位
LCD_DATA=((LCD_DATA|0xF0)&a); //指令高4位送端口
delay_us(50);
CLR_E; //E下降沿写入指令
delay_ms(1); //延时50uS
}
//LCD1602初始化函数
void lcd_init(void)
{
delay_ms(2);
lcd_comm_b(0x20); //写半指令:4位数据
delay_us(400);
lcd_comm(0x28); //写指令:4位数据、2行显示、5*8点阵
delay_us(200);
lcd_comm(0x0C); //写指令:显示开
delay_us(200);
lcd_comm(0x06); //写指令:自左向右显示
delay_us(100);
lcd_comm(0x01); //写指令:CLS
delay_ms(10);
}
//清屏指令函数
void cls(void)
{
lcd_comm(0x01);
delay_ms(5);
}
//定位指令函数
void locate(uchar a,uchar b)
{
uchar x;
if(a==1)
x=0x80+b-1;
if(a==2)
x=0xC0+b-1;
lcd_comm(x);
delay_ms(5);
}
//显示函数
void lcd(uchar i)
{
lcd_da(i);
}
/***********************************
* 在第一行显示ID头函数 *
* 入 口:1显示ID1,2显示ID2 *
***********************************/
void xs_lcd(char *s)
{
while(*s)
{
lcd(*s);
s++;
}
}
/***********************************
* 显示广告语函数 *
* tonghe *
* Tel:028-82834946 *
***********************************/
void tonghe(void)
{
cls();
locate(1,5); //写指令:第1行地址
xs_lcd("TONGHE");
locate(2,1); //写指令:第2行地址
xs_lcd("Tel:028-82834946");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -