找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 22260|回复: 51
收起左侧

Protues仿真stm32F103R6驱动LCD1602(仿真图+程序)

  [复制链接]
ID:165394 发表于 2018-7-30 14:12 | 显示全部楼层 |阅读模式
stm32F103R6仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

Protues仿真图

Protues仿真图


LCD1602的stm32驱动程序:
  1. #include "bsp-lcd1602.h"

  2. void LCD1602_GPIO_Config(void)
  3. {
  4.         RCC_APB2PeriphClockCmd(LCD1602_CLK, ENABLE);
  5.         GPIO_InitTypeDef LCD1602_GPIOStruct;
  6.         LCD1602_GPIOStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  7.         LCD1602_GPIOStruct.GPIO_Speed = GPIO_Speed_10MHz;
  8.         LCD1602_GPIOStruct.GPIO_Pin =  LCD1602_E | LCD1602_RS | LCD1602_RW ;
  9.         GPIO_Init(LCD1602_GPIO_PORT,&LCD1602_GPIOStruct);
  10.         LCD1602_GPIOStruct.GPIO_Mode = GPIO_Mode_Out_OD;
  11.         LCD1602_GPIOStruct.GPIO_Pin =   DB0 |  DB1 | DB2 |DB3 |  DB4 | DB5|DB6 |  DB7 ;     //设置为开漏输出
  12.         GPIO_Init(LCD1602_GPIO_PORT,&LCD1602_GPIOStruct);
  13. }

  14. void LCD1602_WaitReady(void) //检测忙状态
  15. {
  16.         uint8_t sta;

  17.         GPIOB->ODR =0x00FF;
  18.         RSO(0);
  19.         RWO(1);
  20.         EO(1);
  21.         SysTick_Delay_Us(1);
  22.         do{
  23.                 sta=GPIO_ReadInputDataBit(LCD1602_GPIO_PORT,GPIO_Pin_7);
  24.                 EO(0);
  25.         }while(sta);
  26. }

  27. void LCD1602_WriteCmd(uint8_t cmd) //写指令
  28. {
  29.         LCD1602_WaitReady();
  30.         RSO(0);
  31.         RWO(0);
  32.         EO(0);
  33.         SysTick_Delay_Us(1);
  34.         EO(1);
  35.         LCD1602_GPIO_PORT->ODR &= (cmd|0xFF00);
  36.         EO(0);
  37.         SysTick_Delay_Us(400);
  38. }

  39. void LCD1602_WriteDat(uint8_t dat) //写数据
  40. {
  41.         LCD1602_WaitReady();
  42.         RSO(1);
  43.         RWO(0);
  44.         SysTick_Delay_Us(30);
  45.         EO(1);
  46.         LCD1602_GPIO_PORT->ODR &=(dat|0xFF00);
  47.         EO(0);
  48.         SysTick_Delay_Us(400);
  49. }

  50. void LCD1602_SetCursor(uint8_t x, uint8_t y)
  51. {
  52.     uint8_t addr;

  53.     if (y == 0)  //由输入的屏幕坐标计算显示RAM的地址
  54.         addr = 0x00 + x;  //第一行字符地址从0x00起始
  55.     else
  56.         addr = 0x40 + x;  //第二行字符地址从0x40起始
  57.     LCD1602_WriteCmd(addr|0x80);  //设置RAM地址
  58. }

  59. void LCD1602_ShowStr(uint8_t x, uint8_t y, uint8_t *str, uint8_t len)
  60. {
  61.     LCD1602_SetCursor(x, y);        //设置起始地址
  62.     while (len--)         //连续写入len个字符数据
  63.     {
  64.         LCD1602_WriteDat(*str++);
  65.     }
  66. }



  67. void LCD1602_Init(void)
  68. {
  69.           LCD1602_GPIO_Config();   //开启GPIO口
  70.     LCD1602_WriteCmd(0X38);  //16*2显示,5*7点阵,8位数据接口
  71.     LCD1602_WriteCmd(0x0C);  //显示器开,光标关闭
  72.     LCD1602_WriteCmd(0x06);  //文字不动,地址自动+1
  73.     LCD1602_WriteCmd(0x01);  //清屏
  74. }
复制代码

全部资料51hei下载地址:
STM32-LCD1602.7z (228.69 KB, 下载次数: 1383)

评分

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

查看全部评分

回复

使用道具 举报

ID:262075 发表于 2018-8-11 15:10 | 显示全部楼层
经典感谢楼主大神
回复

使用道具 举报

ID:262075 发表于 2018-8-12 10:25 | 显示全部楼层
很珍贵的资料,值得学习,谢谢楼主
回复

使用道具 举报

ID:385072 发表于 2018-8-27 17:59 | 显示全部楼层
非常有借鉴作用,正在用Cube生成试试
回复

使用道具 举报

ID:193869 发表于 2018-10-27 20:34 | 显示全部楼层
怎么下不了???
回复

使用道具 举报

ID:402264 发表于 2018-11-3 16:28 | 显示全部楼层
这个资源很好,谢谢楼主分享.
回复

使用道具 举报

ID:389751 发表于 2018-11-8 17:19 | 显示全部楼层
谢谢楼主分享.
回复

使用道具 举报

ID:435701 发表于 2018-11-29 14:09 | 显示全部楼层
挺好的
回复

使用道具 举报

ID:109393 发表于 2018-12-17 14:21 | 显示全部楼层
很好的资源,学习一下

回复

使用道具 举报

ID:384172 发表于 2018-12-17 16:52 | 显示全部楼层
LZ,请问如何打开?
回复

使用道具 举报

ID:384172 发表于 2018-12-17 16:54 | 显示全部楼层
LZ,你是怎么用Protues打开的?完全没有DSN的后缀文件。
回复

使用道具 举报

ID:384172 发表于 2018-12-17 16:57 | 显示全部楼层
Protues打不开啊
回复

使用道具 举报

ID:384172 发表于 2018-12-18 13:32 | 显示全部楼层
Protues8.6打开了
回复

使用道具 举报

ID:306028 发表于 2018-12-26 20:36 | 显示全部楼层
如果该引脚的话怎么改那些地址呢,求求楼主举例教教小白
回复

使用道具 举报

ID:116584 发表于 2019-3-22 10:43 | 显示全部楼层

stm32 都可以仿真啦,学习一下
回复

使用道具 举报

ID:481306 发表于 2019-3-22 17:21 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:220489 发表于 2019-3-28 13:54 | 显示全部楼层
非常不错,谢谢分享
回复

使用道具 举报

ID:501336 发表于 2019-3-31 14:52 | 显示全部楼层
学习一下
回复

使用道具 举报

ID:508842 发表于 2019-4-17 15:30 | 显示全部楼层
请问楼主,为什么数据端设置为开漏输出而不是推挽输出呢
同时,在仿真时我无论是用推挽输出还是开漏都会存在Controller received command whilst busy. [LCD1]这个提示,可是明明已经设置了读忙程序,不知是怎么回事
回复

使用道具 举报

ID:513784 发表于 2019-4-21 08:47 | 显示全部楼层
楼主大大 为什么我用proteus8.7 打不开下载下来的仿真电路呢  谢谢
回复

使用道具 举报

ID:513784 发表于 2019-4-21 08:57 | 显示全部楼层
已经可以打开了 把下载下来的文件的名字的字符改为常用的汉字、字母、数字或其组合就可以了
回复

使用道具 举报

ID:508842 发表于 2019-4-24 11:18 | 显示全部楼层
itokoyt 发表于 2019-4-17 15:30
请问楼主,为什么数据端设置为开漏输出而不是推挽输出呢?
同时,在仿真时我无论是用推挽输出还是开 ...

已解决,是systick.h的问题,改成了软件延时while(x--)就好了,感觉可能是时钟的问题。。。(具体没有去研究)
回复

使用道具 举报

ID:526067 发表于 2019-5-2 18:17 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:302712 发表于 2019-6-16 09:58 | 显示全部楼层
谢谢分享,学习中
回复

使用道具 举报

ID:457981 发表于 2019-6-25 18:47 | 显示全部楼层
值得借鉴
回复

使用道具 举报

ID:160995 发表于 2019-7-25 19:29 | 显示全部楼层
谢谢分享,学习中
回复

使用道具 举报

ID:329516 发表于 2019-11-25 15:33 | 显示全部楼层
好人平安!
回复

使用道具 举报

ID:641608 发表于 2019-11-25 23:51 来自手机 | 显示全部楼层
雪中送炭
回复

使用道具 举报

ID:686311 发表于 2020-2-18 13:11 | 显示全部楼层
谢谢楼主,学习中!
回复

使用道具 举报

ID:695561 发表于 2020-2-20 14:00 | 显示全部楼层
经典感谢楼主
回复

使用道具 举报

ID:714255 发表于 2020-3-23 18:15 | 显示全部楼层
感谢分享呀。。
回复

使用道具 举报

ID:566588 发表于 2020-3-29 11:25 | 显示全部楼层
感谢楼主的分享,对小白很有参考意义
回复

使用道具 举报

ID:730321 发表于 2020-4-16 09:47 | 显示全部楼层
请问能否象51那样,protues和keil联调?
回复

使用道具 举报

ID:685868 发表于 2020-4-22 10:39 | 显示全部楼层
我正在学习STM32,下载下来学习学习,谢谢楼主!
回复

使用道具 举报

ID:734107 发表于 2020-4-27 10:05 | 显示全部楼层
chenntu 发表于 2020-4-16 09:47
请问能否象51那样,protues和keil联调?

可以的 生成hex文件即可
回复

使用道具 举报

ID:716092 发表于 2020-4-27 14:55 | 显示全部楼层
感谢楼主
回复

使用道具 举报

ID:507124 发表于 2020-4-29 00:24 | 显示全部楼层
感谢楼主
回复

使用道具 举报

ID:427575 发表于 2020-5-14 00:44 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:746203 发表于 2020-5-17 08:22 | 显示全部楼层
很好的学习资料
回复

使用道具 举报

ID:293247 发表于 2020-5-25 13:32 | 显示全部楼层
很好用的程序和仿真,谢谢楼主
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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