基于STM32-LCD12864驱动程序_第1页
基于STM32-LCD12864驱动程序_第2页
基于STM32-LCD12864驱动程序_第3页
基于STM32-LCD12864驱动程序_第4页
基于STM32-LCD12864驱动程序_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

STM32LCD12864驱动程序(头文件)(2012-05-2921:25:08)转载▼标签:杂谈 #ifndefLCD12864_H#defineLCD12864_H#defineLCD_CONTROLGPIOD//默认LCD12864的控制口在PD口#defineLCD_DATAPORTGPIOD//默认LCD12864的数据口在PD口#defineLCD_RESET_PinGPIO_Pin_12//默认LCD12864的复位引脚连接到PD.12也可不用#defineLCD_RS_PinGPIO_Pin_13//默认LCD12864RS--PD.13#defineLCD_RW_PinGPIO_Pin_14//默认LCD12864RW--PD.14#defineLCD_EN_PinGPIO_Pin_15//默认LCD12864E--PD.15#defineLCD_CONTROL_CLOCKRCC_APB2Periph_GPIOD//默认LCD12864的控制口时钟#defineLCD_DATAPORT_CLOCKRCC_APB2Periph_GPIOD//默认LCD12864的数据口时钟#defineLCD_RS_1LCD_CONTROL->BSRR&=~LCD_RS_Pin;LCD_CONTROL->BSRR|=LCD_RS_Pin//RS置高电平#defineLCD_RS_0LCD_CONTROL->BRR&=~LCD_RS_Pin;LCD_CONTROL->BRR|=LCD_RS_Pin//RS置低电平#defineLCD_RW_1LCD_CONTROL->BSRR&=~LCD_RW_Pin;LCD_CONTROL->BSRR|=LCD_RW_Pin//RW置高电平#defineLCD_RW_0LCD_CONTROL->BRR&=~LCD_RW_Pin;LCD_CONTROL->BRR|=LCD_RW_Pin//RW置低电平#defineLCD_EN_1LCD_CONTROL->BSRR&=~LCD_EN_Pin;LCD_CONTROL->BSRR|=LCD_EN_Pin//EN置高电平#defineLCD_EN_0LCD_CONTROL->BRR&=~LCD_EN_Pin;LCD_CONTROL->BRR|=LCD_EN_Pin//EN置低电平#defineLCD_RESET_0LCD_CONTROL->BRR=LCD_RESET_Pin//复位#defineLCD_RESET_1LCD_CONTROL->BSRR=LCD_RESET_Pin//复位脚拉高#defineDATAOUTLCD_DATAPORT->ODR&=0xff00;LCD_DATAPORT->ODR//数据输出寄存器#defineDATAINLCD_DATAPORT->IDR//数据输入寄存器#defineLCD_BF((DATAIN)&0x0080)//忙状态voidLCD_delayus(unsignedlongn);//延时n(us)voidLCD_delayms(unsignedlongn);//延时n(ms)voidLCD_WriteInitcmd(uint8_tinitcmd);//写初始化命令voidLCD_WaitLaisure(void);//一直等待到LCD内部操作完成,变为空闲状态voidLCD_Writecmd(uint8_tcmd);//写命令到LCD12864voidLCD_WriteByte(uint8_tbyte);//写一字节数据到LCD12864voidLCD_pos(uint16_tpos);//LCD显示位置设置voidLCD_Setpos(uint16_trow,uint16_tcol);//设定LCD12864的显示地址,根据习惯voidLCD_DispChar(charch);//显示一个字符voidLCD_Setpos_DispChar(uint16_trow,uint16_tcol,charch);//在指定位置显示一个字符voidLCD_DispString(charstr[]);//显示一个字符串,显示位置需提前设定//在指定位置显示一个字符串voidLCD_Setpos_DispString(uint16_trow,uint16_tcol,charstr[]);voidLCD_Dispnum(uint32_tnum);//显示一个不超过8位的整数,显示位置需提前设置//在指定位置显示一个不超过8位的整数voidLCD_Setpos_Dispnum(uint16_trow,uint16_tcol,uint32_tnum);voidLCD_DispDecimal(uint32_tnum,uint16_tdot);//显示一个有效位不超过8位的浮点数,显示位置需要提前设定//在指定位置显示一个有效位不超过8位的浮点数voidLCD_Setpos_DispDecimal(uint16_trow,uint16_tcol,uint32_tnum,uint16_tdot);//显示日历,显示日期与时间voidLCD_DispDateTime(uint32_tyear,uint16_tmonth,uint16_tday,uint16_thour,uint16_tmin,uint16_tsec);voidLCD_DispPicture(constunsignedcharpicture[]);//显示一幅图像128*64//屏幕整体左移一格,用于滚动显示voidLCD_ShiftLeft(void);//屏幕整体右移一格,用于滚动显示voidLCD_ShiftRight(void);//清屏,清除显示voidLCD_Clear(void);//使光标还回原点位置voidLCD_Return(void);//关显示voidLCD_Close(void);//开显示voidLCD_Open(void);voidLCD_FlickerChar(uint16_trow,uint16_tcol);//关闭字符闪烁voidLCD_CloseFlicker(void);//屏幕秒闪烁一次voidLCD_FlickerScreen(void);voidLCD_PORT_Init(void);//LCD连接端口初始化voidLCD_Init(void);//LCD配置初始化#endif#include"stm32f10x.h"}str[k]='\0';//添加字符串结束标志LCD_DispString(str);//显示字符串}voidLCD_Setpos_Dispnum(uint16_trow,uint16_tcol,uint32_tnum){LCD_Setpos(row,col);LCD_Dispnum(num);}voidLCD_DispDecimal(uint32_tnum,uint16_tdot){uint32_ti=0,j,k=0,wei;uint32_tq;charstr[10];if(num>=10000000)wei=8;elseif(num>=1000000)wei=7;elseif(num>=100000)wei=6;elseif(num>=10000)wei=5;elseif(num>=1000)wei=4;elseif(num>=100)wei=3;elseif(num>=10)wei=2;elsewei=1;for(i=wei;i>0;i--){q=1;j=1;//i=1时,q=1,得到个位for(;j<i;j++)q*=10;str[k++]=num/q+'0';num%=q;}str[k]='\0';//添加字符串结束标志for(i=8;i>0;i--){if((str[i]>='0')&&(str[i]<='9'))break;}str[i+2]='\0';//添加字符串结束符for(j=0;j<dot;j++,i--)//小数点后各位依次右移,准备插入{str[i+1]=str[i];}str[i+1]='.';//插入小数点LCD_DispString(str);//显示浮点小数}voidLCD_Setpos_DispDecimal(uint16_trow,uint16_tcol,uint32_tnum,uint16_tdot){LCD_Setpos(row,col);LCD_DispDecimal(num,dot);}voidLCD_DispDateTime(uint32_tyear,uint16_tmonth,uint16_tday,uint16_thour,uint16_tmin,uint16_tsec){//externuint16_tenableclock;LCD_Setpos(1,0);LCD_DispString("Date:");LCD_Dispnum((uint32_t)year);LCD_DispChar('-');LCD_Dispnum((uint32_t)month);LCD_DispChar('-');LCD_Dispnum((uint32_t)day);if((month<10)&&(day<10))//清除无效位置可能残留的显示{LCD_DispChar('');LCD_DispChar('');}elseif(((month<10)&&(day>9))||((month>9)&&(day<10)))LCD_DispChar('');LCD_Setpos(1,15);//if(enableclock)//如果开启闹铃,显示闹铃标志//LCD_DispChar('@');//elseLCD_DispChar('*');//第一行结束符显示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((hour<10)&&(min<10)&&(sec>0)&&(sec<10))LCD_DispChar('');//用于消隐LCD_Setpos(2,15);//if(enableclock)//LCD_DispChar('@');//elseLCD_DispChar('*');//第二行结束符显示}voidLCD_DispPicture(constunsignedcharpicture[]){uint16_ti,j;LCD_Writecmd(0x34);//写数据时,关闭图形显示LCD_delayms(20);for(i=0;i<32;i++)//32行{LCD_Writecmd(0x80+i);LCD_delayus(150);LCD_Writecmd(0x80);LCD_delayus(150);for(j=0;j<16;j++)//一行,16个字节{LCD_WriteByte(picture[j]);LCD_delayus(150);}LCD_delayus(150);}for(i=0;i<32;i++)//32行{LCD_Writecmd(0x80+i);LCD_delayus(150);LCD_Writecmd(0x80);LCD_delayus(150);for(j=0;j<16;j++)//一行,16个字节{LCD_WriteByte(picture[j]);LCD_delayus(150);}LCD_delayus(150);}LCD_Writecmd(0x36);//写完数据,开图形显示LCD_delayms(50);}//屏幕整体左移一格,用于滚动显示voidLCD_ShiftLeft(){LCD_Writecmd(0x18);}//屏幕整体右移一格,用于滚动显示voidLCD_ShiftRight(void){LCD_Writecmd(0x1C);}//清屏,清除显示voidLCD_Clear(void){LCD_Writecmd(0x01);}//使光标还回原点位置voidLCD_Return(void){LCD_Writecmd(0x02);}//关显示voidLCD_Close(void){LCD_Writecmd(0x08);}//开显示voidLCD_Open(void){LCD_Writecmd(0x0C);}voidLCD_FlickerChar(uint16_trow,uint16_tcol){LCD_Writecmd(0x0D);LCD_Setpos(row,col);}//关闭字符闪烁voidLCD_CloseFlicker(void){LCD_Writecmd(0x0C);}//屏幕秒闪烁一次voidLCD_FlickerScreen(void){LCD_Writecmd(0x08);//关显示LCD_delayms(500);LCD_Writecmd(0x0C);//开显示LCD_delayms(500);}//LCD连接端口初始化voidLCD_PORT_Init(void){GPIO_InitTypeDefLCD_port;RCC_PCLK2Config(RCC_HCLK_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(LCD_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);}voidLCD_Init(void){LCD_RESET_0;LCD_delayms(300);//复位LCD12864LCD_RESET_1;LCD_delayms(300);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"stm32f10x.h"#include"LCD12864.h"externconstunsignedcharpicture1[];externconstunsignedcharpicture2[];voidGPIO_Configuration(void);//延时nusvoiddelay_nus(unsignedlongn){unsignedlongj;while(n--){j=8;while(j--);}}//延时nmsvoiddelay_nms(unsignedlongn){while(n--)delay_nus(1100);}//时钟配置函数72MHz端口配置voidRCC_Configuration(){RCC_PCLK2Config(RCC_HCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);//fPCLK1=36MHz//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|\//RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE,ENABLE);}intmain(void){//uint16_ti;//charstr1[]={"Happyev

温馨提示

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

评论

0/150

提交评论