《基于stm32--lcd12864驱动程序》由会员分享,可在线阅读,更多相关《基于stm32--lcd12864驱动程序(12页珍藏版)》请在金锄头文库上搜索。
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的数据口在PD口#define LCD_RESET_Pin GPIO_Pin_12 /默认LCD12864的复位引脚连接到PD.12 也可不用#define LCD_RS_Pin GPIO_Pin_13 /默认LCD12864 RS - PD.13#de
2、fine 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_GPIOD /默认LCD12864的数据口时钟#define LCD_RS_1 LCD_CONTROL-BSRR &=LCD_RS_Pin;LCD_CONTROL-BSRR |=LCD
3、_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_CONTROL-BSRR &=L
4、CD_EN_Pin;LCD_CONTROL-BSRR |=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_Pin / 复位脚拉高#define DATAOUT LCD_DATAPORT-ODR &=0xff00;LCD_DATAPORT-
5、ODR / 数据输出寄存器#define DATAIN LCD_DATAPORT-IDR / 数据输入寄存器#define LCD_BF (DATAIN)& 0x0080) / 忙状态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内部操作完成,变为空闲状态void LCD_Writecmd(uint8
6、_t cmd); /写命令到LCD12864void LCD_WriteByte(uint8_t byte); /写一字节数据到LCD12864void LCD_pos(uint16_t pos); /LCD显示位置设置void LCD_Setpos(uint16_t row,uint16_t col);/设定LCD12864的显示地址,根据习惯void LCD_DispChar(char ch); /显示一个字符void LCD_Setpos_DispChar(uint16_t row,uint16_t col,char ch);/在指定位置显示一个字符void LCD_DispString
7、(char str); /显示一个字符串,显示位置需提前设定/在指定位置显示一个字符串void LCD_Setpos_DispString(uint16_t row,uint16_t col,char str);void LCD_Dispnum(uint32_t num); /显示一个不超过8位的整数,显示位置需提前设置/在指定位置显示一个不超过8位的整数void LCD_Setpos_Dispnum(uint16_t row,uint16_t col,uint32_t num);void LCD_DispDecimal(uint32_t num,uint16_t dot);/显示一个有效位不
8、超过8位的浮点数,显示位置需要提前设定/在指定位置显示一个有效位不超过8位的浮点数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); /显示一幅图像 1
9、28*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
11、n) 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内部操作完成,变为空闲状态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_dela
12、yus(5); flag=(uint16_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;/写一字节数据到LCD12864void LCD_WriteByte(uint8_t byte) LCD_WaitLaisure(); LCD_RS_1; LCD_RW_0; LCD_
13、EN_1; DATAOUT |= byte; LCD_delayus(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_Wri
14、teByte(ch);void LCD_Setpos_DispChar(uint16_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; uint16_t wei,i,j,k; if(num=)wei=8; else if(num=)wei=7; else if(num=)wei=6;