找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5758|回复: 7
收起左侧

分享基于STM32F103实现驱动LCD1602的代码

  [复制链接]
ID:695711 发表于 2020-2-20 16:37 | 显示全部楼层 |阅读模式
注:
     此贴仅供提供项目(以正点原子的框架撰写)(已测试),不提供LCD1602的资料(资料可以网上搜索,很容易就找到),如有对代码有任何问题可以评论,我会不定期回复!


此贴所提供文件仅供学习,谢谢。

单片机源程序如下:
  1. #include "lcd1602.h"

  2. void GPIO_Configuration(void)
  3. {   
  4.         GPIO_InitTypeDef  GPIO_InitStructure;
  5.        
  6.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOF, ENABLE);         //时钟使能       
  7.        
  8.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4;  
  9.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  10.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  11.   GPIO_Init(GPIOC, &GPIO_InitStructure);
  12.        
  13.         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;  
  14.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  15.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  16.   GPIO_Init(GPIOF, &GPIO_InitStructure);
  17. }
  18.        
  19. void LCD1602_Wait_Ready(void) //判忙
  20. {
  21.         u8 sta;       
  22.         //DATAOUT(0xff);       
  23.   LCD_RS_Clr();
  24.         LCD_RW_Set();
  25.         do
  26.         {               
  27.     LCD_EN_Set();       
  28.           delay_ms(5);
  29.           sta = GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_7);       
  30.           LCD_EN_Clr();       
  31.         }while(sta & 0x80);
  32. }

  33. void LCD1602_Write_Cmd(uint8_t cmd) //写入指令
  34. {
  35.         LCD1602_Wait_Ready();
  36.         LCD_RS_Clr();       
  37.         LCD_RW_Clr();
  38.         DATAOUT(cmd);       
  39.         LCD_EN_Set();
  40.         LCD_EN_Clr();
  41. }
  42.        
  43. void LCD1602_Write_Dat(uint8_t dat) //写入数据
  44. {       
  45.   LCD1602_Wait_Ready();       
  46.   LCD_RS_Set();
  47.         LCD_RW_Clr();       
  48.   DATAOUT(dat);
  49.         LCD_EN_Set();
  50.         LCD_EN_Clr();
  51. }

  52. void LCD1602_ClearScreen(void) //清屏
  53. {       
  54.   LCD1602_Write_Cmd(Cmd_Clear);
  55. }

  56. void LCD1602_Set_Cursor(uint8_t x, uint8_t y) //设置光标,字符显示的地址(x是列,y是行)
  57. {       
  58.   u8 addr; //地址变量       
  59.         if (y == 0)       
  60.         {
  61.           addr = 0x00 + x;
  62.         }
  63.         else
  64.         {
  65.                 addr = 0x40 + x;
  66.         }
  67.         LCD1602_Write_Cmd(addr | 0x80); //这里|上0x80是因为在写入显示地址时LCD的D7位必须恒定为1
  68. }

  69. void LCD1602_Show_Str(uint8_t x, uint8_t y, uint8_t *str)
  70. {       
  71.   LCD1602_Set_Cursor(x, y);
  72.         while(*str != '\0')
  73.         {               
  74.     LCD1602_Write_Dat(*str++);
  75.         }
  76. }

  77. void LCD1602_Init(void)
  78. {
  79.                 GPIO_Configuration();
  80.                 LCD1602_Write_Cmd(0x38);                //LCD初始化设置(下同)
  81.                 LCD1602_Write_Cmd(0x0c);               
  82.                 LCD1602_Write_Cmd(0x06);   
  83.                 LCD1602_Write_Cmd(0x01);   
  84. }
复制代码

代码见附件 Roy_STM32F103_LCD1602.7z (177.22 KB, 下载次数: 211)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:705222 发表于 2020-3-30 17:31 来自手机 | 显示全部楼层
我的为什么乱码了,和v0脚接地有关吗
15855606355140.7816145611369157.jpg
回复

使用道具 举报

ID:707140 发表于 2020-3-31 18:23 | 显示全部楼层
小新呀 发表于 2020-3-30 17:31
我的为什么乱码了,和v0脚接地有关吗

你是f103c8t6的嘛????
回复

使用道具 举报

ID:251662 发表于 2020-8-7 14:03 | 显示全部楼层
你好楼主,这个 D0-D7为什么没有宏定义,不能更改IO吗??
回复

使用道具 举报

ID:251662 发表于 2020-8-7 14:05 | 显示全部楼层
?????D0-D7宏定义呢?????
回复

使用道具 举报

ID:251662 发表于 2020-8-7 14:08 | 显示全部楼层
huzheng11 发表于 2020-3-31 18:23
你是f103c8t6的嘛????

你试过了吗。我看了一下程序D0-D7没有定义,要疯了
回复

使用道具 举报

ID:695711 发表于 2020-11-2 17:48 | 显示全部楼层
海子的孩子333 发表于 2020-8-7 14:08
你试过了吗。我看了一下程序D0-D7没有定义,要疯了

抱歉,学业繁忙,一直没有时间来论坛,D0-D7确实没有宏定义,但也确实有,只是因为我接的是GPIOF的0-7脚,所以并没有用宏定义单个进行定义,而是用了GPIO_Write()这个库函数直接对GPIOF0-7脚进行操作,你可以看一下LCD1602.h 的头文件里有一个宏定义:#define        DATAOUT(x)          GPIO_Write(GPIOF, x) //对D0-D7进行操作

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:831898 发表于 2020-11-2 21:32 | 显示全部楼层
报错,C程序里面怎么有汇编语言

er2.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表