LCD1602的4、8线驱动_第1页
LCD1602的4、8线驱动_第2页
LCD1602的4、8线驱动_第3页
LCD1602的4、8线驱动_第4页
LCD1602的4、8线驱动_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于m128的LCD1602驱动(8线14线)/*/ 文件名: 1602.h/ 作用: AVR 的 LCD1602 4/8 线驱动/ 作者: fjcqv/ 最新修改: 2008 年 8 月 22 日/说明: 使用GCC编程,1602提供4/8线驱动/4 线暂时高 4 位/*/#ifndef _1602_H_#define _1602_H_ 1/* 头文件调用 */#include <avr/io.h>#include <util/delay.h>#include <avr/portpins.h>#include <compat/deprecated.h

2、>/* 定义 uchar*/#ifndef uchar#define uchar unsigned char#endif/* 本头文件增强功能设置 */#define _LCD_DEF 0 / 使自定义功能实现,如不需要将其定义为 0(#define _LCD_DEF 0 )#define _LCD_BIT_IS_8 1 / 定义 4 线或者 8 线/* 控制针脚设置 */#define LCD_CZ PORTB#define LCD_CZDDR DDRB#define LCD_E 2#define LCD_RW 1#define LCD_RS 0#define LCDDATA PORT

3、E#define LCDDDR DDRE#define LCDPIN PINE#define busy 7/*LCD 命令定义 */#define E0() cbi(LCD_CZ,LCD_E)#define E1() sbi(LCD_CZ,LCD_E)#define RW0() cbi(LCD_CZ,LCD_RW)#define RW1() sbi(LCD_CZ,LCD_RW)#define RS0() cbi(LCD_CZ,LCD_RS)#define RS1() sbi(LCD_CZ,LCD_RS)#define nop() asm("nop")/* 基本功能函数声明。

4、 */void lcd_busy(void);测试 LCD忙碌状态void lcd_wrcmd(uchar CMD,uchar wait);/LCD写入指令void lcd_wrdata(uchar);/LCD 写入数据void lcd_xy(uchar,uchar);/lcd显示定位void lcd_char(uchar,uchar,uchar);/lcd显示字符void lcd_string(uchar,uchar,uchar *);/lcd显示字符串void lcd_cls(void);/1602清显示void lcd_init(void); /LCD初始化设定程序void lcd_de

5、f(void);/ 自定义字符串/*/* 函数: void lcd_busy(void)*/*功能:检查LCD忙状态*/*busy 为 1 时,忙,等待。 busy 为 0 时, 闲,可写指令与数据 */* */*void lcd_busy(void)#if (_LCD_BIT_IS_8=1) /8 位数据线 uchar tmp;LCDDDR&=1<<7;/设置为输入E0();RS0();RW1();/* 循环读取忙位 */doE1();_delay_us(1);tmp=LCDPIN;E0();while(tmp&1<<busy);LCDDDR=0xff

6、;#else /4 位数据线uchar tmp;LCDDDR=0;E0();RS0();RW1();/* 循环读取忙位 */doE1();_delay_us(1);tmp=LCDPIN;E0();_delay_us(1);E1();_delay_us(1);E0();_delay_us(6);while(tmp&1<<busy);LCDDDR=0xff;#endif/*/* 函数: lcd_wrcmd(uchar CMD,uchar wait)*/* 功能:写入命令到 LCD*/*RS=O, RW=0 丘=高脉冲,D0-D7=指令码。*/*CMD为指令,wait指定是否要检

7、测 LCD忙信号*/* */*void lcd_wrcmd(uchar CMD,uchar wait)#if (_LCD_BIT_IS_8=1) /8 位数据线if (wait) / 是否读忙 lcd_busy();/else/_delay_us(40);RS0();RW0(); LCDDATA=CMD;E1();E0();#else /4 位数据线if (wait) lcd_busy();else _delay_us(40);RS0();RW0();E0();LCDDATA=CMD&0xf0;E1();_delay_us(1);E0();_delay_us(6);LCDDATA=(C

8、MD<<4)&0xf0;E1();_delay_us(1);E0();#endif*/* 函数: void lcd_wrdate(uchar);*/* 功能:写入数据到 LCD*/*RS=1 , RW=0 丘=高脉冲,D0-D7=令码。*/*dat 为要写入的数据 */* */*写数据/*void lcd_wrdata(uchar dat) /#if (_LCD_BIT_IS_8=1) /8 位数据线lcd_busy();RW0();RS1();LCDDATA=dat;E1();E0();#else /4 位数据线 lcd_busy();RW0();RS1();LCDDAT

9、A=dat&0xf0;E1();_delay_us(1);E0();_delay_us(6);LCDDATA=(dat<<4)&0xf0;E1();_delay_us(1);E0();#endif/*/* 函数: lcd_xy(uchar x,uchar y) */ /* 功能: lcd 显示定位 */*/* void lcd_xy(uchar x,uchar y)uchar add;if(y=0) add=0x80+0x00+x;elseadd=0x80+0x40+x;lcd_wrcmd(add,1);/*/* 函数: void lcd_char(uchar x,

10、uchar y,uchar dat) */* 功能: lcd 于( x, y )处显示字符 */* */*/ void lcd_char(uchar x,uchar y,uchar dat) lcd_xy(x,y); lcd_wrdata(dat); /*/* 函数: void lcd_string(uchar x,uchar y,uchar *s) /* 功能: lcd 于( x,y )处开始显示字符串 /* */ /*/ void lcd_string(uchar x,uchar y,uchar *s) lcd_xy(x,y);while(*s)lcd_wrdata(*s);s+; /*

11、/* /* /* /* /* void lcd_cls(void) lcd_wrcmd(0x01,1); _delay_ms(10); /*/* 函数: void LcdReset(void);*/* 功能:对 1602 进行复位 */ /* */*/ void lcd_init(void)#if (_LCD_BIT_IS_8=1) /8*/ */函数: void lcd_cls(void)功能:对 1602 显示屏清除,并进行延时 延时是为了使 1602 又时间进行清除*/*/位数据线LCD_CZDDR=1<<LCD_E|1<<LCD_RS|1<<LCD_

12、RW;LCDDDR=0xff;_delay_ms(15);lcd_wrcmd(0x38,0);_delay_ms(5);lcd_wrcmd(0x38,0);_delay_ms(5);lcd_wrcmd(0x38,0);_delay_us(1);lcd_wrcmd(0x38,1);lcd_wrcmd(0x08,1);lcd_cls();lcd_wrcmd(0x06,1);lcd_wrcmd(0x0e,1);#else /4 位数据线LCD_CZDDR=1<<LCD_E|1<<LCD_RS|1<<LCD_RW;LCDDDR=0xf0;*/*/*/*/_delay

13、_ms(15);lcd_wrcmd(0x38,0);_delay_ms(5);lcd_wrcmd(0x38,0);_delay_ms(5);lcd_wrcmd(0x38,0);_delay_us(1);lcd_wrcmd(0x38,1);lcd_wrcmd(0x02,1);lcd_wrcmd(0x28,1); lcd_cls();lcd_wrcmd(0x06,1);lcd_wrcmd(0x0e,1);#endif#if (_LCD_DEF=1)/定义CGRAM的值,在功能开启后再主文件加入如下面字符串数组定义 const uchar lcd_cgram64= 0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E, 0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00, 0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论