⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd1602_4h.h

📁 avr单片机的程序
💻 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 + -