基于某STM32LCD12864驱动程序_第1页
基于某STM32LCD12864驱动程序_第2页
基于某STM32LCD12864驱动程序_第3页
基于某STM32LCD12864驱动程序_第4页
基于某STM32LCD12864驱动程序_第5页
已阅读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 的数据口在 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 的数据 口时钟#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 / 数据输入寄存器#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(uint

6、8_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_Di

7、spString(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); / 显示

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内部操作完成,变为空闲状态 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;/写一字节数据到 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-)小数点后各位依次右移,准备插入stri+1=stri;stri+1=.;/插入小数点LCD_DispString(str); 显示浮点小数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); 写数据时,关闭图形显示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 个字节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 个字节LCD_WriteByte(picturej);LCD_delayus(150);LCD_delayus(150);LCD_Writecmd(0x36); 写完数据开图形显示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);写数据时,关闭图形显示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);时钟配置函数 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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论