版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
千里之行,始于足下让知识带有温度。第第2页/共2页精品文档推荐基于STM32--LCD12864驱动程序基于STM32--LCD12864驱动程序
STM32LCD12864驱动程序(头文件)(2022-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->BSRRLCD_CONTROL->BSRR
|=LCD_RS_Pin//RS置高电平
#defineLCD_RS_0LCD_CONTROL->BRRLCD_CONTROL->BRR
|=LCD_RS_Pin//RS置低电平
#defineLCD_RW_1LCD_CONTROL->BSRRLCD_CONTROL->BSRR
|=LCD_RW_Pin//RW置高电平
#defineLCD_RW_0LCD_CONTROL->BRRLCD_CONTROL->BRR
|=LCD_RW_Pin//RW置低电平
#defineLCD_EN_1LCD_CONTROL->BSRRLCD_CONTROL->BSRR
|=LCD_EN_Pin//EN置高电平
#defineLCD_EN_0LCD_CONTROL->BRRLCD_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
LCD_DATAPORT->ODR//数据输出寄
存器
#defineDATAINLCD_DATAPORT->IDR//数据输入寄存器
#defineLCD_BF((DATAIN)//延时
n(us)
voidLCD_delayms(unsignedlongn);//延时
n(ms)
voidLCD_WriteInitcmd(uint8_tinitcmd);//
写初始化命令
voidLCD_WaitLaisure(void);//向来等
待到LCD内部操作完成,变为空闲状态
voidLCD_Writecmd(uint8_tcmd);//写命
令到LCD12864
voidLCD_WriteByte(uint8_tbyte);//写一字节数据到LCD12864
voidLCD_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_t
dot);//显示一个有效位不超过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"
#include"stm32f10x_gpio.h"
#include"LCD12864.h"
#include"picture.h"
//延时n(us)
voidLCD_delayus(unsignedlongn){
unsignedlongj;
while(n--)
{j=8;
while(j--);
}
}
//延时n(ms)
voidLCD_delayms(unsignedlongn){
while(n--)
LCD_delayus(1100);
//写初始化命令
voidLCD_WriteInitcmd(uint8_tinitcmd){
LCD_RS_0;
LCD_RW_0;
LCD_EN_1;
DATAOUT|=initcmd;
LCD_delayus(600);
LCD_EN_0;
LCD_RW_1;
}
//向来等待到LCD内部操作完成,变为空闲状态voidLCD_WaitLaisure(void)
{
uint16_tflag=0x00;
LCD_RS_0;
LCD_RW_1;
do
{
LCD_EN_0;
LCD_delayus(5);
LCD_delayus(5);
flag=(uint16_t)LCD_BF;
}while(flag);
}
//写命令到LCD12864
voidLCD_Writecmd(uint8_tcmd)
{
LCD_WaitLaisure();
LCD_RS_0;
LCD_RW_0;
LCD_EN_1;
DATAOUT|=cmd;
LCD_delayus(600);//经过测试,取600。550都不行以
LCD_EN_0;
LCD_RW_1;
}
//写一字节数据到LCD12864
voidLCD_WriteByte(uint8_tbyte)
{
LCD_WaitLaisure();
LCD_RW_0;
LCD_EN_1;
DATAOUT|=byte;
LCD_delayus(600);
LCD_EN_0;
LCD_RW_1;
}
voidLCD_pos(uint16_tpos)
{
LCD_Writecmd(pos);
}
voidLCD_Setpos(uint16_trow,uint16_tcol){
uint16_tpos=0x00;
if(row+1>3)pos=0x08;
if(row
elsepos|=0x90;
pos+=col-1;
LCD_Writecmd(pos);
voidLCD_DispChar(charch)
{
LCD_WriteByte(ch);
}
voidLCD_Setpos_DispChar(uint16_trow,uint16_tcol,charch)
{
LCD_Setpos(row,col);
LCD_WriteByte(ch);
}
voidLCD_DispString(charstr[])
{
uint16_ti;
for(i=0;str[i]!='\0';i++)
{
LCD_WriteByte(str[i]);
}
}
voidLCD_Setpos_DispString(uint16_trow,uint16_tcol,charstr[])
{
LCD_Setpos(row,col);
LCD_DispString(str);
}
voidLCD_Dispnum(uint32_tnum)
{
charstr[12];
uint32_tq;
uint16_twei,i,j,k;
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;
k=0;
for(i=wei;i>0;i--)
{q=1;
j=1;//i=1时,q=1,得到个位
for(;j=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(;j0;i--)
{if((str[i]>='0')
}
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)
LCD_DispChar('');
}
else
if(((month<10)
LCD_Setpos(1,15);
//if(enableclock)//假如开启闹铃,显示闹铃标志
//LCD_DispChar('@');
//else
LCD_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)//用于消隐
LCD_Setpos(2,15);
//if(enableclock)
//LCD_DispChar('@');
//else
LCD_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=36MHz
RCC_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开路输出,外接上拉电阻到5V
GPIO_Init(LCD_DATAPORT,
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,
}
voidLCD_Init(void)
{
LCD_RESET_0;
LCD_delayms(300);//复位LCD12864
LCD_RESET_1;
LCD_delayms(300);
LCD_Writecmd(0x34);//写数据时,关闭图形显示
LCD_delayus(400);
LCD_WriteInitcmd(0x38);//并行,8位,基本指令操作
LCD_delayus(200);//150
LCD_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);
//延时nus
voiddelay_nus(unsignedlongn)
{
unsignedlongj;
while(n--)
{j=8;
while(j--);
}
}
//延时nms
voiddelay_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|\
//
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030全球温湿度气候试验箱行业调研及趋势分析报告
- 2025年全球及中国光学有机硅胶行业头部企业市场占有率及排名调研报告
- 2025-2030全球电子母猪喂料器行业调研及趋势分析报告
- 2025年全球及中国熟食冷藏展示柜行业头部企业市场占有率及排名调研报告
- 房屋地基买卖合同
- 2025合同模板出国劳务合同范本
- 2025房屋借款合同范本
- 2025北京市前期物业服务合同模板
- 剪辑师聘用合同资讯
- 提升残疾人的信息获取与沟通能力
- 物流营销(第四版) 课件 第六章 物流营销策略制定
- 关于市推动高新技术企业发展的调研报告
- 13J103-7《人造板材幕墙》
- 上海高考英语词汇手册列表
- PDCA提高患者自备口服药物正确坚持服用落实率
- 上海石油化工股份有限公司6181乙二醇装置爆炸事故调查报告
- 家谱人物简介(优选12篇)
- 品管部岗位职责20篇
- 2023年中智集团下属中智股份公司招聘笔试题库及答案解析
- GA 1409-2017警用服饰硬式肩章
- 小儿垂钓 (课件)(14张)
评论
0/150
提交评论