2019物联网开发者大会 12.06 北京北辰洲际酒店→ 报名参会 ←
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » [经验] STM32驱动1602源程序

共9条 1/1 1 跳转至

[经验] STM32驱动1602源程序

助工
2019-10-13 15:36:39    评分
#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);
}





关键词: STM32     驱动     LCD1602     源程序    

助工
2019-10-13 15:45:53    评分
2楼

收藏了   以防备用


助工
2019-10-13 16:06:18    评分
3楼

果断收藏


助工
2019-10-13 16:36:49    评分
4楼

感谢楼主分享


助工
2019-10-13 17:00:57    评分
5楼

谢谢楼主分享    很实用


助工
2019-10-13 22:52:32    评分
6楼

谢谢分享


菜鸟
2019-10-19 22:24:56    评分
7楼

代码很干练!


菜鸟
2019-10-31 22:12:16    评分
8楼

这是8位并行读写LCD。但我IO不够用,LZ有4位驱动的写法可以参考一下吗?


菜鸟
2019-11-04 22:27:48    评分
9楼

1602是啥函数能稍微解释一下吗


共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]