LCD1602的4、8線驅(qū)動_第1頁
LCD1602的4、8線驅(qū)動_第2頁
LCD1602的4、8線驅(qū)動_第3頁
LCD1602的4、8線驅(qū)動_第4頁
LCD1602的4、8線驅(qū)動_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于m128的LCD1602驅(qū)動(8線14線)/*/ 文件名: 1602.h/ 作用: AVR 的 LCD1602 4/8 線驅(qū)動/ 作者: fjcqv/ 最新修改: 2008 年 8 月 22 日/說明: 使用GCC編程,1602提供4/8線驅(qū)動/4 線暫時高 4 位/*/#ifndef _1602_H_#define _1602_H_ 1/* 頭文件調(diào)用 */#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/* 本頭文件增強(qiáng)功能設(shè)置 */#define _LCD_DEF 0 / 使自定義功能實(shí)現(xiàn),如不需要將其定義為 0(#define _LCD_DEF 0 )#define _LCD_BIT_IS_8 1 / 定義 4 線或者 8 線/* 控制針腳設(shè)置 */#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")/* 基本功能函數(shù)聲明。

4、 */void lcd_busy(void);測試 LCD忙碌狀態(tài)void lcd_wrcmd(uchar CMD,uchar wait);/LCD寫入指令void lcd_wrdata(uchar);/LCD 寫入數(shù)據(jù)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初始化設(shè)定程序void lcd_de

5、f(void);/ 自定義字符串/*/* 函數(shù): void lcd_busy(void)*/*功能:檢查LCD忙狀態(tài)*/*busy 為 1 時,忙,等待。 busy 為 0 時, 閑,可寫指令與數(shù)據(jù) */* */*void lcd_busy(void)#if (_LCD_BIT_IS_8=1) /8 位數(shù)據(jù)線 uchar tmp;LCDDDR&=1<<7;/設(shè)置為輸入E0();RS0();RW1();/* 循環(huán)讀取忙位 */doE1();_delay_us(1);tmp=LCDPIN;E0();while(tmp&1<<busy);LCDDDR=0xff

6、;#else /4 位數(shù)據(jù)線uchar tmp;LCDDDR=0;E0();RS0();RW1();/* 循環(huán)讀取忙位 */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/*/* 函數(shù): 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 位數(shù)據(jù)線if (wait) / 是否讀忙 lcd_busy();/else/_delay_us(40);RS0();RW0(); LCDDATA=CMD;E1();E0();#else /4 位數(shù)據(jù)線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*/* 函數(shù): void lcd_wrdate(uchar);*/* 功能:寫入數(shù)據(jù)到 LCD*/*RS=1 , RW=0 丘=高脈沖,D0-D7=令碼。*/*dat 為要寫入的數(shù)據(jù) */* */*寫數(shù)據(jù)/*void lcd_wrdata(uchar dat) /#if (_LCD_BIT_IS_8=1) /8 位數(shù)據(jù)線lcd_busy();RW0();RS1();LCDDATA=dat;E1();E0();#else /4 位數(shù)據(jù)線 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/*/* 函數(shù): 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);/*/* 函數(shù): 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); /*/* 函數(shù): 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); /*/* 函數(shù): void LcdReset(void);*/* 功能:對 1602 進(jìn)行復(fù)位 */ /* */*/ void lcd_init(void)#if (_LCD_BIT_IS_8=1) /8*/ */函數(shù): void lcd_cls(void)功能:對 1602 顯示屏清除,并進(jìn)行延時 延時是為了使 1602 又時間進(jìn)行清除*/*/位數(shù)據(jù)線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 位數(shù)據(jù)線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的值,在功能開啟后再主文件加入如下面字符串?dāng)?shù)組定義 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論