标题: Protues仿真stm32F103R6驱动LCD1602(仿真图+程序) [打印本页]

作者: 爱月    时间: 2018-7-30 14:12
标题: Protues仿真stm32F103R6驱动LCD1602(仿真图+程序)
stm32F103R6仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


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, 下载次数: 1400)



作者: gao376369127    时间: 2018-8-11 15:10
经典感谢楼主大神
作者: gao376369127    时间: 2018-8-12 10:25
很珍贵的资料,值得学习,谢谢楼主

作者: fzrwlx    时间: 2018-8-27 17:59
非常有借鉴作用,正在用Cube生成试试
作者: edf5643    时间: 2018-10-27 20:34
怎么下不了???
作者: gaoyanzeng    时间: 2018-11-3 16:28
这个资源很好,谢谢楼主分享.
作者: plainsailing    时间: 2018-11-8 17:19
谢谢楼主分享.
作者: mzg960807ab    时间: 2018-11-29 14:09
挺好的
作者: fek00621    时间: 2018-12-17 14:21
很好的资源,学习一下


作者: 下一秒    时间: 2018-12-17 16:52
LZ,请问如何打开?
作者: 下一秒    时间: 2018-12-17 16:54
LZ,你是怎么用Protues打开的?完全没有DSN的后缀文件。
作者: 下一秒    时间: 2018-12-17 16:57
Protues打不开啊
作者: 下一秒    时间: 2018-12-18 13:32
Protues8.6打开了
作者: 13622983180    时间: 2018-12-26 20:36
如果该引脚的话怎么改那些地址呢,求求楼主举例教教小白

作者: xiajiuxing    时间: 2019-3-22 10:43

stm32 都可以仿真啦,学习一下
作者: xqtop    时间: 2019-3-22 17:21
感谢分享
作者: jakie1983    时间: 2019-3-28 13:54
非常不错,谢谢分享
作者: riio    时间: 2019-3-31 14:52
学习一下
作者: itokoyt    时间: 2019-4-17 15:30
请问楼主,为什么数据端设置为开漏输出而不是推挽输出呢
同时,在仿真时我无论是用推挽输出还是开漏都会存在Controller received command whilst busy. [LCD1]这个提示,可是明明已经设置了读忙程序,不知是怎么回事

作者: liugyde51hei    时间: 2019-4-21 08:47
楼主大大 为什么我用proteus8.7 打不开下载下来的仿真电路呢  谢谢
作者: liugyde51hei    时间: 2019-4-21 08:57
已经可以打开了 把下载下来的文件的名字的字符改为常用的汉字、字母、数字或其组合就可以了
作者: itokoyt    时间: 2019-4-24 11:18
itokoyt 发表于 2019-4-17 15:30
请问楼主,为什么数据端设置为开漏输出而不是推挽输出呢?
同时,在仿真时我无论是用推挽输出还是开 ...

已解决,是systick.h的问题,改成了软件延时while(x--)就好了,感觉可能是时钟的问题。。。(具体没有去研究)
作者: 18838116993    时间: 2019-5-2 18:17
谢谢楼主分享
作者: dragonman    时间: 2019-6-16 09:58
谢谢分享,学习中
作者: 喝水过夏天    时间: 2019-6-25 18:47
值得借鉴
作者: witp    时间: 2019-7-25 19:29
谢谢分享,学习中
作者: feihu1201    时间: 2019-11-25 15:33
好人平安!
作者: 466305213    时间: 2019-11-25 23:51
雪中送炭
作者: zhijie327    时间: 2020-2-18 13:11
谢谢楼主,学习中!
作者: wdther    时间: 2020-2-20 14:00
经典感谢楼主
作者: nuanshanfy    时间: 2020-3-23 18:15
感谢分享呀。。
作者: 51好好学    时间: 2020-3-29 11:25
感谢楼主的分享,对小白很有参考意义
作者: chenntu    时间: 2020-4-16 09:47
请问能否象51那样,protues和keil联调?
作者: wei_zg    时间: 2020-4-22 10:39
我正在学习STM32,下载下来学习学习,谢谢楼主!
作者: Blackmashiro    时间: 2020-4-27 10:05
chenntu 发表于 2020-4-16 09:47
请问能否象51那样,protues和keil联调?

可以的 生成hex文件即可
作者: zf7312    时间: 2020-4-27 14:55
感谢楼主
作者: 西瓜太郎222    时间: 2020-4-29 00:24
感谢楼主
作者: 李锦辉    时间: 2020-5-14 00:44
谢谢楼主
作者: xxxxxx2131232    时间: 2020-5-17 08:22
很好的学习资料

作者: blkhumor    时间: 2020-5-25 13:32
很好用的程序和仿真,谢谢楼主

作者: 123456578900    时间: 2020-5-25 22:54
谢谢楼主分享
作者: sky_sc    时间: 2020-5-26 17:02
感谢大佬
作者: 谭露95    时间: 2020-6-22 10:13
楼主知道加其他的,例如adc怎么做吗
作者: 159.5819059    时间: 2020-6-22 15:24
我想问一下这个是实现什么功能的,单纯是实现lcd显示?

作者: 爱学习的小周    时间: 2020-6-26 07:39
上拉电阻是多大的呢
作者: wangjiaw    时间: 2020-6-26 22:13
很珍贵的资料,值得学习,谢谢楼主
作者: wangjiaw    时间: 2020-6-26 22:14
感谢楼主
作者: ChanderQ    时间: 2021-3-8 14:49
这个资源很好,谢谢楼主分享!
作者: lffxlx    时间: 2021-3-28 22:23
珍贵资料!!!!
作者: 星夜light    时间: 2021-12-12 21:37
感谢楼主,正在学stm32,不知以此为基础加pwm或中断可做什么东西呢
作者: xuefei    时间: 2022-11-27 17:56
正在学习PROTUES的仿真,非常有用,感谢楼主分享
作者: bfcluo    时间: 2023-5-27 17:46
不错的文章,正在做一些Protues仿真stm32工作,谢谢了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1