基于某STM32LCD12864驅動程序_第1頁
基于某STM32LCD12864驅動程序_第2頁
基于某STM32LCD12864驅動程序_第3頁
基于某STM32LCD12864驅動程序_第4頁
基于某STM32LCD12864驅動程序_第5頁
免費預覽已結束,剩余6頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實用文檔STM32 LCD12864驅動程序(頭文件)(2012-05-29 21:25:08)轉載標簽:雜談#ifndef LCD12864_H#define LCD12864_H#define LCD_CONTROL GPIOD 默認 LCD12864 的控制口在 PD 口#define LCD_DATAPORT GPIOD / 默認 LCD12864 的數(shù)據(jù)口在 PD 口#define LCD_RESET_Pin GPIO_Pin_12 默認 LCD12864 的復位引腳連接到 PD.12 也可不用#define LCD_RS_Pin GPIO_Pin_13 / 默認 LCD12864

2、RS - PD.13#define LCD_RW_Pin GPIO_Pin_14 / 默認 LCD12864 RW - PD.14#define LCD_EN_Pin GPIO_Pin_15 默認 LCD12864 E - PD.15#define LCD_CONTROL_CLOCK RCC_APB2Periph_GPIOD 默認 LCD12864 的控制 口時鐘#define LCD_DATAPORT_CLOCK RCC_APB2Periph_GPIO/ 默認 LCD12864 的數(shù)據(jù) 口時鐘#define LCD_RS_1 LCD_CONTROL-BSR&=LCD_RS_Pin;LCD_C

3、ONTROL-BSRRLCD_RS_Pin/RS置高電平#define LCD_RS_0 LCD_CONTROL-BRR &=LCD_RS_Pin;LCD_CONTROL-BRR=LCD_RS_Pin/RS置低電平#define LCD_RW_1 LCD_CONTROL-BSRR &=LCD_RW_Pin;LCD_CONTROL-BSRR |=LCD_RW_Pin /RW 置高電平#define LCD_RW_0 LCD_CONTROL-BRR &=LCD_RW_Pin;LCD_CONTROL-BRR |=LCD_RW_Pin /RW 置低電平#define LCD_EN_1 LCD_CONT

4、ROL-BSR&=LCD_EN_Pin;LCD_CONTROL-BSR=LCD_EN_Pin/EN置高電平#define LCD_EN_0 LCD_CONTROL-BRR &=LCD_EN_Pin;LCD_CONTROL-BRR|=LCD_EN_Pin/EN置低電平#define LCD_RESET_0 LCD_CONTROL-BRR = LCD_RESET_Pin / 復位#define LCD_RESET_1 LCD_CONTROL-BSRR = LCD_RESET_F/h 復位腳拉高#define DATAOUT LCD_DATAPORT-ODR &=0xff00;LCD_DATAPOR

5、T-ODR/g 輸出寄存器#define DATAIN LCD_DATAPORT-IDR / 數(shù)據(jù)輸入寄存器#define LCD_BF (DATAIN)& 0x0080)/ 忙狀態(tài)void LCD_delayus(unsigned long n); / 延時 n(us)void LCD_delayms(unsigned long n); / 延時 n(ms)void LCD_WriteInitcmd(uint8_t initcmd); / 寫初始化命令void LCD_WaitLaisure(void);一直等待到 LCD內部操作完成,變?yōu)榭臻e狀態(tài)void LCD_Writecmd(uint

6、8_t cmd); / 寫命令到 LCD12864void LCD_WriteByte(uint8_t byte);/ 寫一字節(jié)數(shù)據(jù)到 LCD12864void LCD_pos(uint16_t pos);/LCD 顯示位置設置void LCD_Setpos(uint16_t row,uint16_t col);/ 設定 LCD12864 的顯示地址,根據(jù)習慣void LCD_DispChar(char ch);/ 顯示一個字符void LCD_Setpos_DispChar(uint16_t row,uint16_t col,char ch);/ 在指定位置顯示一個字符void LCD_Di

7、spString(char str);顯示一個字符串,顯示位置需提前設定/在指定位置顯示一個字符串void LCD_Setpos_DispString(uint16_t row,uint16_t col,char str);void LCD_Dispnum(uint32_t num);顯示一個不超過 8位的整數(shù),顯示位置需提前設置/在指定位置顯示一個不超過8位的整數(shù)void LCD_Setpos_Dispnum(uint16_t row,uint16_t col,uint32_t num);void LCD_DispDecimal(uint32_t num,uint16_t dot);/ 顯示

8、一個有效位不超過8位的浮點數(shù) 顯示位置需要提前設定/在指定位置顯示一個有效位不超過8位的浮點數(shù)void LCD_Setpos_DispDecimal(uint16_t row,uint16_t col,uint32_t num,uint16_t dot);顯示日歷,顯示日期與時間void LCD_DispDateTime(uint32_t year,uint16_t month,uint16_t day,uint16_t hour,uint16_t min,uint16_t sec);void LCD_DispPicture(const unsigned char picture); / 顯示

9、一幅圖像 128*64屏幕整體左移一格,用于滾動顯示void LCD_ShiftLeft(void);屏幕整體右移一格,用于滾動顯示void LCD_ShiftRight(void);清屏,清除顯示void LCD_Clear(void);使光標還回原點位置void LCD_Return(void);關顯示void LCD_Close(void);/開顯示void LCD_Open(void);void LCD_FlickerChar(uint16_t row,uint16_t col);關閉字符閃爍void LCD_CloseFlicker(void);/屏幕秒閃爍一次void LCD_Fl

10、ickerScreen(void);void LCD_PORT_Init(void); /LCD 連接端口初始化void LCD_Init(void);/LCD 配置初始化#endif#include stm32f10x.h#include stm32f10x_gpio.h#include LCD12864.h”#include picture.h/ 延時 n(us)void LCD_delayus(unsigned long n)unsigned long j;while(n-) j=8;while(j-);/ 延時 n(ms)void LCD_delayms(unsigned long n

11、)while(n-)LCD_delayus(1100);/寫初始化命令void LCD_WriteInitcmd(uint8_t initcmd)LCD_RS_0;LCD_RW_0;LCD_EN_1;DATAOUT 尸 initcmd;LCD_delayus(600);LCD_EN_0;LCD_RW_1;一直等待到LCD內部操作完成,變?yōu)榭臻e狀態(tài) void LCD_WaitLaisure(void) uint16_t flag=0x00;LCD_RS_0;LCD_RW_1; do LCD_EN_0;LCD_delayus(5);LCD_EN_1;LCD_delayus(5);flag=(uin

12、t16_t)LCD_BF;while(flag);寫命令到LCD12864void LCD_Writecmd(uint8_t cmd)LCD_WaitLaisure();LCD_RS_0;LCD_RW_0;LCD_EN_1;DATAOUT 尸 cmd;LCD_delayus(600);/經過測試,取 600。550都不可以LCD_EN_0;LCD_RW_1;/寫一字節(jié)數(shù)據(jù)到 LCD12864void LCD_WriteByte(uint8_t byte)LCD_WaitLaisure();LCD_RS_1;LCD_RW_0;LCD_EN_1;DATAOUT |= byte;LCD_delayu

13、s(600);LCD_EN_0;LCD_RW_1;void LCD_pos(uint16_t pos)LCD_Writecmd(pos);void LCD_Setpos(uint16_t row,uint16_t col)uint16_t pos=0x00;if(row+13) pos=0x08;if(row & 0x01) pos |= 0x80;else pos |= 0x90;pos += col-1;LCD_Writecmd(pos);void LCD_DispChar(char ch)LCD_WriteByte(ch);void LCD_Setpos_DispChar(uint16_

14、t row,uint16_t col,char ch)LCD_Setpos(row,col);LCD_WriteByte(ch);void LCD_DispString(char str)uint16_t i;for(i=0;stri!=0;i+)LCD_WriteByte(stri);void LCD_Setpos_DispString(uint16_t row,uint16_t col,char str)LCD_Setpos(row,col);LCD_DispString(str);void LCD_Dispnum(uint32_t num)char str12;uint32_t q;ui

15、nt16_t wei,i,j,k;if(num=10000000)wei=8;else if(num=1000000)wei=7;else if(num=100000)wei=6;else if(num=10000)wei=5;else if(num=1000) wei=4;else if(num=100)wei=3;else if(num=10) wei=2;else wei=1;k=0;for(i=wei;i0;i-)q=1;j=1;/i=1時,q=1,得到個位for(;j=10000000)wei=8;else if(num=1000000)wei=7;else if(num=10000

16、0)wei=6;else if(num=10000)wei=5;else if(num=1000) wei=4;else if(num=100)wei=3;else if(num=10) wei=2;else wei=1;for(i=wei;i0;i-)q=1;j=1;/i=1時,q=1,得到個位for(;j0;i-)if(stri=0)&(stri=9) break;stri+2=0;/添加字符串結束符for(j=0;jdot;j+,i-)小數(shù)點后各位依次右移,準備插入stri+1=stri;stri+1=.;/插入小數(shù)點LCD_DispString(str); 顯示浮點小數(shù)void LCD

17、_Setpos_DispDecimal(uint16_t row,uint16_t col,uint32_t num,uint16_t dot) LCD_Setpos(row,col); LCD_DispDecimal(num,dot);void LCD_DispDateTime(uint32_t year,uint16_t month,uint16_t day,uint16_t hour,uint16_t min,uint16_t sec) /extern uint16_t enableclock;LCD_Setpos(1,0);LCD_DispString(Date:);LCD_Dispn

18、um(uint32_t)year);LCD_DispChar(-);LCD_Dispnum(uint32_t)month);LCD_DispChar(-);LCD_Dispnum(uint32_t)day);if(month10)&(day10)/清除無效位置可能殘留的顯示 LCD_DispChar(); LCD_DispChar(); else if(month9)|(month9)&(day10) LCD_DispChar();LCD_Setpos(1,15);/if(enableclock) 如果開啟鬧鈴,顯示鬧鈴標志 / LCD_DispChar(); /else LCD_DispCh

19、ar(*); /第一行結束符顯示 LCD_Setpos(2,0); LCD_DispString(Time:); LCD_Dispnum(uint32_t)hour); LCD_DispChar(:); LCD_Dispnum(uint32_t)min); LCD_DispChar(:); LCD_Dispnum(uint32_t)sec);if(sec=0) LCD_DispChar(0);LCD_DispChar();LCD_DispChar();if(hour10)&(min0)&(sec10) LCD_DispChar(); 用于消隱 LCD_Setpos(2,15); /if(ena

20、bleclock) / LCD_DispChar();/elseLCD_DispChar(*);/第二行結束符顯示void LCD_DispPicture(const unsigned char picture)uint16_t i,j;LCD_Writecmd(0x34); 寫數(shù)據(jù)時,關閉圖形顯示LCD_delayms(20);for(i=0;i32;i+)/ 32 行LCD_Writecmd(0x80+i);LCD_delayus(150);LCD_Writecmd(0x80);LCD_delayus(150);for(j=0;j16;j+) 一行,16 個字節(jié)LCD_WriteByte(

21、picturej);LCD_delayus(150);LCD_delayus(150);for(i=0;i32;i+)/ 32 行LCD_Writecmd(0x80+i);LCD_delayus(150);LCD_Writecmd(0x80);LCD_delayus(150);for(j=0;j16;j+) / 一行,16 個字節(jié)LCD_WriteByte(picturej);LCD_delayus(150);LCD_delayus(150);LCD_Writecmd(0x36); 寫完數(shù)據(jù)開圖形顯示LCD_delayms(50);屏幕整體左移一格,用于滾動顯示void LCD_ShiftLe

22、ft()LCD_Writecmd(0x18);屏幕整體右移一格,用于滾動顯示void LCD_ShiftRight(void)LCD_Writecmd(0x1C);清屏,清除顯示void LCD_Clear(void)LCD_Writecmd(0x01);使光標還回原點位置void LCD_Return(void)LCD_Writecmd(0x02);關顯示void LCD_Close(void)LCD_Writecmd(0x08);/開顯示void LCD_Open(void)LCD_Writecmd(0x0C);void LCD_FlickerChar(uint16_t row,uint1

23、6_t col)LCD_Writecmd(0x0D);LCD_Setpos(row,col);關閉字符閃爍void LCD_CloseFlicker(void)LCD_Writecmd(0x0C);/屏幕秒閃爍一次void LCD_FlickerScreen(void)LCD_Writecmd(0x08);/ 關顯示LCD_delayms(500);LCD_Writecmd(0x0C);/ 開顯示 LCD_delayms(500);/LCD連接端口初始化void LCD_PORT_Init(void)GPIO_InitTypeDef LCD_port;RCC_PCLK2Config(RCC_H

24、CLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2); /fPCLK1=36MHzRCC_APB2PeriphClockCmd(LCD_CONTROL_CLOCK ENABLE 鐘使能RCC_APB2PeriphClockCmd(LCD_DATAPORT_CLOCK ,ENABLE);LCD_port.GPIO_Pin = (uint16_t)0x00ff;LCD_port.GPIO_Speed= GPIO_Speed_50MHz;LCD_port.GPIO_Mode = GPIO_Mode_Out_OD;/OD 開路輸出,外接上拉電阻到5VGPIO_Init(LC

25、D_DATAPORT,&LCD_port);LCD_port.GPIO_Pin = LCD_RESET_Pin | LCD_RS_Pin | LCD_RW_Pin | LCD_EN_Pin;LCD_port.GPIO_Speed= GPIO_Speed_50MHz;LCD_port.GPIO_Mode = GPIO_Mode_Out_OD;/OD 開路輸出 GPIO_Init(LCD_CONTROL,&LCD_port);void LCD_Init(void)LCD_RESET_0;LCD_delayms(300); 復位 LCD12864LCD_RESET_1;LCD_delayms(300

26、);LCD_Writecmd(0x34);寫數(shù)據(jù)時,關閉圖形顯示LCD_delayus(400);LCD_WriteInitcmd(0x38); 并行,8位,基本指令操作LCD_delayus(200); /150LCD_WriteInitcmd(0x38);LCD_delayus(100);LCD_WriteInitcmd(0x0C); 開顯示,顯示光標,用于測試LCD_delayus(150);LCD_WriteInitcmd(0x01); / 清屏LCD_delayms(12);LCD_Writecmd(0x06); / 地址自動增加LCD_delayus(150);#include s

27、tm32f10x.h#include LCD12864.h”extern const unsigned char picturel口;extern const unsigned char picture2口;void GPIO_Configuration(void);/延時n usvoid delay_nus(unsigned long n)unsigned long j;while(n-) j=8;while(j-);/延時n msvoid delay_nms(unsigned long n)while(n-)delay_nus(1100);時鐘配置函數(shù) 72MHz端口配置void RCC_Configuration()RCC_PCLK2Config(RCC_HCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2); /fPCLK1=36MHz/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_AP

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論