#include"1602.h" #include"sys.h" #include "delay.h" /*******************LCD1602初始化************************/ void LCD1602_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOA, ENABLE); //使能PA,PE端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; //LCD1602的三根控制线rs,rw,en GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_Init(GPIOE, &GPIO_InitStructure);//根据设定参数初始化GPIOE GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//LCD1602的8跟数据线 //LED1-->PE.5 端口配置, 推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure);//根据设定参数初始化GPIOE LCD_Write_Command(0x01);//清除屏幕显示 delay_ms(2); LCD_Write_Command(0x38);//设置LCD两行显示,一个数据由5*7点阵表示,数据由8跟线传输 delay_ms(2); LCD_Write_Command(0x06);//设定输入方式,增量不移位 delay_ms(2); LCD_Write_Command(0x0c);//开整体显示,关光标,不闪烁 delay_ms(2); } /*******************写指令函数************************/ void LCD_Write_Command(u8 com) { GPIO_Write(GPIOA, 0X00FF&com);//该函数一般用来往一次性一个GPIO的多个端口设置 rs=0; //写指令函数和写数据函数其实可以并一起价格 BOOL变量判断是写指令就rs=0写数据就rs=1。 rw=0; en=0; //写指令 输入:RS=L,RW=L,E=下降沿脉冲 delay_ms(2); en=1; delay_ms(2); en=0; } /*******************写数据函数************************/ void LCD_Write_Date(u8 date) { GPIO_Write(GPIOA,0X00FF&date);//GPIOA的第八位用来作为8位数据口 rs=1; rw=0; en=0; //写指令 输入:RS=L,RW=L,E=下降沿脉冲 delay_ms(2); en=1; delay_ms(2); en=0; } /****************************************************************************** 函数名称:LCD1602_MoveToPosition 函数功能:将液晶的光标移动到指定的位置 入口参数:x-液晶显示的行数,范围0-1 x = 0:在液晶的第一行 x = 1:在液晶的第二行 y-液晶显示的列数,范围0-15 y = 0:在液晶的第一列 y = 1:在液晶的第二列 ...... y = 15:在液晶的第十六列 返回值:无 备注:通过指定x,y的值可以将液晶的光标移动到指定的位置 *******************************************************************************/ void LCD1602_MoveToPosition(u8 x,u8 y) { IF(0 == x) LCD_Write_Command(0x80 | y); //光标定位到第一行的y列 if(1 == x) LCD_Write_Command(0xC0 | y); //光标定义到第二行的y列 } /****************************************************************************** 函数名称:LCD1602_DisplayOneCharOnAddr 函数功能:在指定的位置上显示指定的字符 入口参数:x-液晶显示的行数,范围0-1 x = 0:在液晶的第一行 x = 1:在液晶的第二行 y-液晶显示的列数,范围0-15 y = 0:在液晶的第一列 y = 1:在液晶的第二列 ...... y = 15:在液晶的第十六列 ucData-要显示的字符数据 返回值:无 备注:确保x,y的取值要在指定的范围内 *******************************************************************************/ void LCD1602_DisplayOneCharOnAddr(u8 x,u8 y,u8 ucData) { LCD1602_MoveToPosition(x,y); //光标位置 LCD_Write_Date(ucData); //写入数据 } /****************************************************************************** 函数名称:LCD1602_DisplayString 函数功能:显示字符串 入口参数:ucStr-字符串的首地址 返回值:无 备注:无 *******************************************************************************/ void LCD1602_DisplayString(u8 *ucStr) { while(*ucStr != '\0') //字符串结束之前,循环显示 { LCD_Write_Date(*ucStr); //依次写入每一个字符 ucStr++; //指针增加 } } void display(u8 temp) { u8 ge,shi,bai; bai = temp/100; shi= temp%100/10; ge=temp%10; LCD1602_DisplayOneCharOnAddr(1,6,bai+0x30); LCD1602_DisplayOneCharOnAddr(1,7,shi+0x30); LCD1602_DisplayOneCharOnAddr(1,8,ge+0x30); } |
共8条
1/1 1 跳转至页
[经验] STM32驱动1602源程序
关键词: STM32 驱动 LCD1602 源程序
共8条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |