




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#ifndef LCD1602_STM32_H #defi ne LCD1602_STM32_H #defi neLCD_RS_1GPIOE-BSRR=GPIO_Pin_0 /PE. 0-(LCD)RS #defi ne LCD_RS_0 GPIOE-BRR =GPIO_Pin_0 #defineLCD_RW_1GPIOE-BSRR=GPIO_Pin_1 /PE.1-(LCD)RW #define LCD_RW_0 GPIOE-BRR =GPIO_Pin_1 #defi neLCD_EN_1GPIOE-BSRR=GPIO_Pin_2 /PE.2-(LCD)E #define LCD_EN_0
2、GPIOE-BRR =GPIO_Pin_2 #defineDATAOUTGPIOD- ODR PD0.7-(LCD)DOD7 #if ndef uchar #defi ne uchar un sig ned char #en dif #if ndef uint #defi ne uint un sig ned int #en dif exter n void delay_ nms(un sig ned long n); exter n void delay_ nus(un sig ned long n); uint8_t LCD_busy(void); / 读 LCD 忙碌状态,直到 LCD1
3、602 不忙 为止 void Wait_Leisure(void); 一直等待到 LCD1602 空闲 void LCD_Writelnitcmd(ucharcmd); 写入 LCD 初始化时的命 令,不可以检测忙状态 void LCD_Writecmd(uchar cmd); 写指令到 LCD1602,指令数据 占一个字节 void LCD_Writedata(uchar dat); 写一字节数据到 LCD1602 void LCD_pos(uchar pos); 设定显示位置 00h27h,40h47h void LCD_Setpos(uchar row,uchar col);/ 根据习惯
4、设定显示位 置 void LCD_DispChar(char ch);/ 显示一个字符 void LCD_Setpos_DispChar(uchar row,uchar col,char ch);/ 在 指定位置显示一个字符 void LCD_DispString(char str); 使 LCD1602 显示一个字符串, 显示位置需提前设定 void LCD_Setpos_DispStri ng(uchar row,uchar col,char str); 使LCD1602从指定位置开始显示一个字符串 void LCD_Dispnum(uint32_tnum);/ 显示一个不超过 8位的整
5、数,显示位置需提前设置 voidLCD_Setpos_Disp nu m(ucharrow,ucharcol,u in t32_t num);/在指定位置显示一个不超过8位的整数 void LCD_DispDecimal(uint32_t num,uchar dot);/ 显示一个有 效位不超过8位的浮点数,显示位置需要提前设定 /在指定位置显示一个有效位不超过8位的浮点数 void LCD_Setpos_DispDecimal(uchar row,uchar col,uint32_t nu m,uchar dot); /显示日历,显示日期与时间 void LCD_DispDateTime(u
6、i nt32_t year,ucharmon th,uchar day,uchar hour,uchar min ,uchar sec); 显示秒表,显示时,分,秒,10毫秒,精确到10ms void LCD_DispStopWatch(uchar hour,ucharmin ,uchar sec,uchar tenm s); 显示频率计,动态自动调整频率显示 void LCD_DispFreq(ui nt32_t freq); void LCD_ShiftLeft(void);屏幕整体左移一格,用于滚动显示 void LCD_ShiftRight(void); 屏幕整体右移一格,用于滚动显示
7、 void LCD_Clear(void); 清屏,清除显示 void LCD_Return(void);使光标还回原点位置 void LCD_Close(void); 关显示 void LCD_Open(void);/ 开显示 void LCD_FlickerChar(uchar row,uchar col);/ 使指定位置字符 闪烁,不显示光标 void LCD_CloseFlicker(void); 关闭字符闪烁 void LCD_FlickerScree n(void);/ 屏幕秒闪烁一次 /* *名称:LCD_Init() *功能:初始化LCD1602 *入口参数:无 *出口参数:无
8、 *常用命令:0 x38:16*2显示,5* #en dif /* *文件名称:LCD1602.C *功能:为51单片机提供LCD1602驱动程序,解决LCD1602与 上层软件的隔离问题 * by :追梦 2011 -4-5 */ #i nclude stm32f10 x.h #i nclude LCD1602.h #ifndef LCD1602_STM32_C #defi ne LCD1602_STM32_C /* *名称:LCD_busy() *功能:读LCD忙碌状态,直到LCD1602不忙为止 *入口参数:无 *出口参数:无符号字节类型,返回0表示LCD已经操作完毕, *功能:一直等待
9、到 LCD1602空闲 空闲 *说明:一般在写入新命令或数据之前用while(LCD_busy() 语句等待LCD就绪 */ uint8_t LCD_busy(void) LCD_RS_O; delay_ nu s(1); LCD_RW_1; delay_ nu s(1); do LCD_EN_0; delay_nus(200); LCD_EN_1; delay_nus(200); while(GPIOD-IDR LCD_EN_0; return (ui nt8_t)0; */ void Wait_Leisure(void) LCD_busy(); /* *功 能:写入LCD初始化时的命令,不
10、可以检测忙状态 */ void LCD_Writel nitcmd(uchar cmd) LCD_RS_0; delay_ nu s(1); LCD_RW_0; delay_ nu s(1); DATAOUT = cmd; LCD_EN_0; delay_nus(300); LCD_EN_1; delay_nus(300); LCD_EN_0; delay_ nm s(2); /* *名称:LCD_Writecmd() *功能:写指令到LCD1602,指令数据占一个字节 *入口参数:cmd:待写入的指令 *出口参数:无 */ void LCD_Writecmd(uchar cmd) while
11、(LCD_busy(); LCD_RS_0;/对同一个寄存器的两次写入,中间延时一会 delay_ nu s(1); LCD_RW_0; delay_ nu s(1); LCD_EN_0; delay_nus(300); 产生脉冲 DATAOUT = cmd; LCD_EN_1; delay_nus(300); 必要的延时 LCD_EN_0;/下降沿,LCD1602开始工作 *名称:LCD_Writedata() *功能:写一字节数据到 LCD1602 *入口参数:dat :无符号字节类型,0255 包括各个ASCII码 字符 *出口参数:无 */ void LCD_Writedata(uch
12、ar dat) while(LCD_busy(); 等待 LCD1602 空闲 LCD_RS_1; delay_ nu s(1); LCD_RW_0; delay_ nu s(1); DATAOUT = dat; LCD_EN_1;/ 先拉高 delay_nus(300); 很重要的延时,经调试,延时 300us以上才 可以 LCD_EN_0;下降沿,开始写入有效数据 /* *名称:LCD_pos() *功能:设定显示位置 *入口参数:pos:显示位置,值的范围如下: * 0 x00OxOf 0 x100 x27 第一行(一次显示 16个字符) * 0 x400 x4f 0 x500 x67
13、第二行 *出口参数:无 */ void LCD_pos(uchar pos) LCD_Writecmd(pos | 0 x80); /* *名称:LCD_Setpos() *功能:根据习惯设定显示位置 *入口参数:row:行,row=1表示第一行,row=2表示第二行 * col:列,015,用于指定显示的列,范围可以是040 *出口参数:无 */ void LCD_Setpos(uchar row,uchar col) if(row=1) LCD_Writecmd(col | 0 x80); else LCD_Writecmd(col | 0 xC0); * *功能:显示一个字符 *入 口:
14、 ch :待显示的字符 */ void LCD_DispChar(char ch) LCD_Writedata(ch); /* *功 能:在指定位置显示一个字符 *入 口: row:行 1 或2col:列,015 *ch :待显示的字符 */ void LCD_Setpos_DispChar(uchar row,uchar col,char ch) LCD_Setpos(row,col); LCD_Writedata(ch); /* *名称:LCD_DispString() *功能:使LCD1602显示一个字符串,显示位置需提前设定 *入口参数:str:待显示的字符串 *出口参数:无 */ v
15、oid LCD_DispStri ng(char str) uchar i=0; while(stri != 0) LCD_Writedata(stri); +i; /* *名 称:LCD_Setpos_DispString() *功能:使LCD1602从指定位置开始显示一个字符串 *入口参数:row:显示行,1或2 col:显示列,015 (040 ) str:待显示的字符串 *出口参数:无 *说明:指定位置是显示的初始位置,第一个字符显示的位 */ void LCD_Setpos_DispStri ng(uchar row,uchar col,char str) LCD_Setpos(ro
16、w,col); LCD_DispStri ng(str); /* *名称:LCD_Dispnum() *功能:显示一个不超过8位的整数,显示位置需提前设置 *入口参数:num:待显示的整数,不超过8位 *出口参数:无 */ void LCD_Disp nu m(ui nt32_t num) ui nt i=0,j,k=0,wei,q; char str9; if(n um=10000000)wei=8; else if(n um=1000000)wei=7; else if(nu m=100000)wei=6; else if(n um=10000)wei=5; else if(num =10
17、00) wei=4; else if(num =100)wei=3; else if(num =10) wei=2; else wei=1; for(i=wei;i0;i-) q=i; j=1; i=1时,q=1,得到个位 for(;j=10000000)wei=8; else if(n um=1000000)wei=7; else if(nu m=100000)wei=6; else if(n um=10000)wei=5; else if(num =1000) wei=4; else if(num =100)wei=3; else if(num =10) wei=2; else wei=1
18、; for(i=wei;i0;i-) q=1; j=1; i=1时,q=1,得到个位 for(;j0;i-) if(stri=0) stri+2=0:/添加字符串结束符 for(j=0;j=1000000显示成6位小数的 MHz else freq=1000显示成3位小数的 KHz else freq=0默认显示单位是 Hz(三个区间互 斥) * void LCD_DispFreq(ui nt32_t freq) LCD_Setpos(1,0); LCD_DispStri ng(Curre nt Freq:); LCD_Setpos(2,1); / 显示位置 if(freq=1OOOOOO)
19、LCD_DispDecimal(freq,6); LCD_DispStri ng(MHz); else if(freq=1000) LCD_DispDecimal(freq,3); LCD_DispStri ng(KHz); else LCD_Disp nu m(freq); LCD_DispStri ng(Hz); LCD_Setpos(2,14); LCD_DispStri ng(OK); /屏幕整体左移一格,用于滚动显示 void LCD_ShiftLeft() LCD_Writecmd(0 x18); /屏幕整体右移一格,用于滚动显示 void LCD_ShiftRight(void)
20、 LCD_Writecmd(0 x1C); /清屏,清除显示 void LCD_Clear(void) LCD_Writecmd(0 x01); /使光标还回原点位置 void LCD_Return(void) LCD_Writecmd(0 x02); /关显示 void LCD_Close(void) LCD_Writecmd(0 x08); /开显示 void LCD_Ope n( void) LCD_Writecmd(OxOC); /* *名称:LCD_FlickerChar() *功能:使指定位置字符闪烁,不显示光标 *入口参数:row:行1,2 * col:列 015 *出口参数:无
21、 *说明:写命令0 x0D不显示光标的闪烁,写命令 0 x0F是显 示光标的闪烁 * 一旦设定闪烁后,会根据位置变化闪烁,关闪烁写 命令0 x0C */ void LCD_FlickerChar(uchar row,uchar col) LCD_Writecmd(OxOD); LCD_Setpos(row,col); /关闭字符闪烁 void LCD_CloseFlicker(void) LCD_Writecmd(OxOC); /屏幕秒闪烁一次 void LCD_FlickerScree n(void) LCD_Writecmd(0 x08); 关显示 delay_ nm s(500); LC
22、D_Writecmd(OxOC); 开显示 delay_ nm s(500); /* *名称:LCD_Init() *功能:初始化LCD1602 *入口参数:无 *出口参数:无 *常用命令:0 x38:16*2显示,5*延时 20ms LCD_Writelnitcmd(0 x38);16*2 显示,5*7 点阵,8位数据 delay_ nm s(10); LCD_Writel nitcmd(0 x38); delay_ nm s(5); LCD_Writel nitcmd(0 x38); delay_ nm s(5); LCD_WriteI nitcmd(0 x08); delay_ nm s
23、(5); LCD_WriteI nitcmd(0 x06); delay_ nm s(5); LCD_WriteI nitcmd(OxOI); delay_ nm s(6); LCD_Writel nitcmd(OxOc); delay_ nm s(5); 16*2显示,5*7点阵,8位数据 16*2显示,5*7点阵,8位数据 /先关显示,后开显示 自动右移光标,0 x04为左移光标 /清除LCD的显示内容 /显示开,关光标;0 x08为关显示 #e ndif/防止多次编译 /* *LCD1602驱动显示实验 *by 追梦 2011 -4-3、5 */ #include stm32f10 x.
24、h #i nclude LCD1602.h #defi ne PEOO (ui nt32_t *)0 x40230180 /时钟配置函数 8MHz*9=72MHz void RCC_Co nfigurati on () RCC_De In it(); RCC_HSEConfig(RCC_HSE_ON); 使能 HSE if(RCC_WaitForHSEStartUp()=SUCCESS) RCC_HCLKCo nfig(RCC_S YSCLK_Div1); HCLK=SYSCLK RCC_PCLK2Co nfig(RCC_HCLK_Div1); RCC_PCLK1Co nfig(RCC_HCL
25、K_Div2); RCC_PLLCo nfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul 9); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRD Y)=RESET); RCC_S YSCLKCo nfig(RCC_S YSCLKSource_PLLCLK); while(RCC_GetS YSCLKSource()!=0 x08); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPI0B | RCC_APB2Periph_GPI0C| RCC_APB2Periph_GPI0D| RCC_APB2Periph_GPI0E,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,EN ABLE); /延时n us void dela
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中信息技术课堂教学方法的创新研究
- 2025光电车衣发电系统
- 中小学心理健康教育课程设计与实践知到课后答案智慧树章节测试答案2025年春浙江师范大学
- 三级人力资源管理师-三级人力资源管理师考试《理论知识》押题密卷6
- 三级人力资源管理师-《企业人力资源管理师(理论知识)》考前强化模拟卷6
- 山东省菏泽市东明县第一中学2024-2025学年高二下学期开学地理试题
- 2018高考人教政治二轮巩固练题(六)及解析
- 2018年普通高校招生全国统一考试仿真模拟(一)语文试题
- 甘肃省张掖市高台县一中2024-2025学年高三下学期第二次检测语文试题(原卷版+解析版)
- 2025届福建省漳州市高三下学期第三次检测历史试题 (原卷版+解析版)
- GB/T 10067.1-2019电热和电磁处理装置基本技术条件第1部分:通用部分
- 女大学生健康讲座
- 11471劳动争议处理(第6章)
- 10以内带括号加减法口算练习
- 油库防火防爆设计
- 失语症的康复治疗课件
- 保护野生动物
- CSS基础知识学习(含实例)课件
- 2022-2023学年浙科版(2019)必修一 2.5 细胞在结构和功能上是一个统一整体 课件(16张)
- 湘雅五医院-建筑方案设计课件
- 《M公司员工忠诚度分析案例报告》
评论
0/150
提交评论