| #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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
| AG32VH407下光照强度传感器BH1750及其检测被打赏¥22元 | |
| AT32VH407下使用温湿度传感器DHT22进行检测被打赏¥20元 | |
| DIY一个婴儿澡盆温度计被打赏¥34元 | |
| 【FreeRtos】FreeRtos+MPU region 配置规则被打赏¥23元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)被打赏¥28元 | |
我要赚赏金
