📄 1602._h
字号:
#include <iom16v.h>
#include <macros.h>
#include <delay.h>
/********************************************
液晶 LCD1602 4条数据线(D4~D7)
编译器:ICC-AVR v6.31A 日期: 2007-4-7 下午
目标芯片 : ATmega16
时钟: 8.0000Mhz
下面是AVR与LCD连接信息
PA2 ->RS
PA3 ->EN
地 ->RW
PA4 ->D4
PA5 ->D5
PA6 ->D6
PA7 ->D7
*********************************************/
#define uchar unsigned char
#define C_On_B_On 0x0F //光标开,闪烁
#define C_On_B_Off 0x0E //光标开,不闪烁
#define C_Off_B_On 0x0D //光标关,闪烁
#define C_Off_B_Off 0x0C //光标关,不闪烁
#define EN_PORT PORTA
#define EN_DDR DDRA
#define RS_PORT PORTA
#define RS_DDR DDRA
#define DATA_OUT PORTA
#define DATA_DDR DDRA
#define DATA_IN PINA
#define LCD_EN (1<<PA3)
#define LCD_RS (1<<PA2)
#define LCD_DATA ((1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7))
#define Set_RS_0 RS_PORT&=~LCD_RS
#define Set_RS_1 RS_PORT|=LCD_RS
#define Set_EN_0 EN_PORT&=~LCD_EN
#define Set_EN_1 EN_PORT|=LCD_EN
/*****************************
功能:EN下降沿写指令及数据
*****************************/
void LCD_Write(void)
{Set_EN_1;
delay_1us();
Set_EN_0;
}
/*****************************
功能:写指令
*****************************/
void LCD_WriteC(uchar cmd)
{delay_nus(20);
Set_RS_0;
DATA_OUT&=0x0F; // 清高四位
DATA_OUT|=cmd&0xF0; //写高四位
LCD_Write();
cmd=cmd<<4;
DATA_OUT&=0x0F; // 清高四位
DATA_OUT|=cmd&0xF0; //写低四位
LCD_Write();
}
/****************************
功能:写数据
****************************/
void LCD_WriteD(uchar data)
{delay_nus(20);
Set_RS_1;
DATA_OUT&=0x0F; // 清高四位
DATA_OUT|=data&0xF0; //写高四位
LCD_Write();
data=data<<4;
DATA_OUT&=0x0F; // 清高四位
DATA_OUT|=data&0xF0; //写低四位
LCD_Write();
}
/*************************************
功能:设置位置坐标
LCD第一行显示寄存器地址:0x80-0x8F
LCD第一行显示寄存器地址:0xC0-0xCF
输入:X:0-15,y:1-2
**************************************/
void LCD_SetXY(uchar x,uchar y)
{uchar add;
y++;
x=x%16;y=y%2;
if(y==0) add=0x80+x;
else add=0xC0+x;
LCD_WriteC(add);
}
/************************************
功能:在(x,y)处显示字符
*************************************/
void LCD_Write_Char(uchar x,uchar y,uchar i)
{LCD_SetXY(x,y);
LCD_WriteD(i);
}
/***********************************
功能:在(x,y)处开始显示字符串
************************************/
void LCD_Write_String(uchar x,uchar y, uchar *s)
{LCD_SetXY(x,y);
while(*s){
LCD_WriteD(*s);
s++;}
}
/************************************
功能:LCD初始化
*************************************/
void LCD_Init(void)
{DATA_DDR|=LCD_DATA; //数据口方向:输出
RS_DDR|=LCD_RS; //RS口方向:输出
EN_DDR|=LCD_EN; //EN口方向:输出
LCD_WriteC(0x28); //4位总线接口,两行显示
LCD_Write(); // !! 此处需要一个下降沿!!!!!!
LCD_WriteC(0x28); //!!! 此处需要两个0x28!!!!!!!!
LCD_WriteC(C_Off_B_Off); //开显示,设置光标与闪烁开关
LCD_WriteC(0x01); //清屏
delay_nms(2); //指令执行时间:1.64ms
LCD_SetXY(0,1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -