找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 31036|回复: 84
收起左侧

proteus仿真stm32f103驱动lcd1602显示adc采集的电压(仿真图+程序)

  [复制链接]
ID:495674 发表于 2019-5-4 11:29 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

proteus仿真原理图

proteus仿真原理图


lcd1602代码:
  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|
  12.                                                                                                                                         DB6 |  DB7 ;     //设置为开漏输出
  13.         GPIO_Init(LCD1602_GPIO_PORT,&LCD1602_GPIOStruct);
  14. }

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

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

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

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

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

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

  69. //??1???
  70. //x,y :????         
  71. //num:??(0~99)         
  72. //-----------------------------*/         
  73. void LCD_ShowNum(uint8_t x, uint8_t y,uint8_t num)
  74. {     

  75.             LCD1602_SetCursor(x, y);        //设置起始地址
  76.     LCD_ShowChar(x,y,num+'0');
  77.         
  78. }

  79. void LCD_ShowChar(uint8_t x, uint8_t y,uint8_t dat)
  80. {

  81.             LCD1602_SetCursor(x, y);        //设置起始地址
  82.         LCD1602_WriteDat(dat);
  83. }



  84. void LCD1602_Init(void)
  85. {
  86.           LCD1602_GPIO_Config();   //开启GPIO口
  87.     LCD1602_WriteCmd(0X38);  //16*2显示,5*7点阵,8位数据接口
  88.     LCD1602_WriteCmd(0x0C);  //显示器开,光标关闭
  89.     LCD1602_WriteCmd(0x06);  //文字不动,地址自动+1
  90.     LCD1602_WriteCmd(0x01);  //清屏
  91. }
  92.         
  93.         



复制代码
adc采集源代码:
  1. #include "adc.h"

  2. void ADC1_GPIO_Config(void){
  3.     GPIO_InitTypeDef GPIO_InitStructure;
  4.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1, ENABLE);        //使能ADC1,GPIOC时钟
  5.            
  6.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //
  7.     //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//为什么没有配置这个????
  8.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;        //模拟输入
  9.     GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA1
  10. }


  11. void ADC_Config(void)
  12. {
  13.         

  14.   ADC_InitTypeDef ADC_InitStructure;//ADC结构体变量//注意在一个语句快内变量的声明要放在可执行语句的前面,否则出错,因此要放在ADC1_GPIO_Config();前面
  15.   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在独立模式
  16.   ADC_InitStructure.ADC_ScanConvMode =        DISABLE; //使能扫描
  17.   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC转换工作在连续模式
  18.   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//由软件控制转换,不使用外部触发
  19.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//转换数据右对齐
  20.   ADC_InitStructure.ADC_NbrOfChannel = 1;//转换通道为1
  21.   ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
  22.         
  23.   ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
  24.   //ADC1选择信道14,音序等级1,采样时间55.5个周期
  25. //  ADC_DMACmd(ADC1, ENABLE);//使能ADC1模块DMA
  26.   ADC_Cmd(ADC1, ENABLE);//使能ADC1
  27.         ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
  28.   ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  29. //  ADC_ResetCalibration(ADC1); //重置.(复位).ADC1校准寄存器
  30. //  while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校准重置完成
  31. //  ADC_StartCalibration(ADC1);//开始ADC1校准
  32. //  while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成
  33. //  ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1软件开始转换
  34. }

复制代码
全部资料:
0.png

注意这个仿真只能在Proteus8.8运行,经过测试高版本和低版本都不行,数据直接显示0:
ADC+LCD1602.7z (237.27 KB, 下载次数: 2490)

评分

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

查看全部评分

回复

使用道具 举报

ID:262 发表于 2021-11-5 04:58 | 显示全部楼层
jeffrey.liu 发表于 2021-11-4 14:26
楼主,我的不显示啊

你得用Proteus8.8版本来打开,打开以后要双击单片机,选择hex文件:..\STM32程序\Project\Objects\LWl-F103.hex,这样就可以了 你看我打开后的效果
51hei.gif
回复

使用道具 举报

ID:71282 发表于 2019-5-6 15:06 | 显示全部楼层
好东西,谢谢高手分享,谢谢。 貌似只能用Proteus 8.8才能成功
回复

使用道具 举报

ID:530800 发表于 2019-5-8 17:34 | 显示全部楼层
很好的东西 好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:526735 发表于 2019-5-25 01:28 | 显示全部楼层
正好要做一个ADC转换,看下能不能借用
回复

使用道具 举报

ID:526735 发表于 2019-5-25 09:14 | 显示全部楼层
楼主是大大的好人,如果自己折腾挺费劲,站在楼主的肩膀上,就轻松多了。
回复

使用道具 举报

ID:241434 发表于 2019-7-30 21:26 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:514218 发表于 2019-7-31 12:30 | 显示全部楼层
太好了,谢谢
回复

使用道具 举报

ID:464231 发表于 2019-7-31 19:27 | 显示全部楼层
谢谢高手分享,谢谢
回复

使用道具 举报

ID:569027 发表于 2019-8-25 17:22 | 显示全部楼层
我正在做一个ADC转换,折腾一天了,看下能不能借用
回复

使用道具 举报

ID:61390 发表于 2019-8-26 09:29 | 显示全部楼层
好贴,正需要的
回复

使用道具 举报

ID:603784 发表于 2019-8-26 10:37 | 显示全部楼层
很好的东西
回复

使用道具 举报

ID:604043 发表于 2019-8-26 21:02 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:282074 发表于 2019-10-6 11:31 | 显示全部楼层
我来看看
回复

使用道具 举报

ID:320028 发表于 2019-10-13 11:39 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:366897 发表于 2019-11-30 10:50 | 显示全部楼层
多谢分享,很好的例子。lcd和ad采集一块练习
回复

使用道具 举报

ID:643525 发表于 2019-12-15 19:50 | 显示全部楼层
只显示两行方块  
回复

使用道具 举报

ID:643525 发表于 2019-12-15 19:50 | 显示全部楼层
可以给我举列一下吗
回复

使用道具 举报

ID:470196 发表于 2020-1-2 13:16 | 显示全部楼层
高手!例子很好啊!但是遇到一个问题,运行一小段时间就停在那里不运行了,不知是何原因?
回复

使用道具 举报

ID:470196 发表于 2020-1-2 13:17 | 显示全部楼层
好东西谢谢分享!但是为什么运行一小段时间程序就不运行了?
回复

使用道具 举报

ID:116066 发表于 2020-1-3 23:19 | 显示全部楼层
学习一下,感谢楼主的分享
回复

使用道具 举报

ID:233711 发表于 2020-1-5 15:59 | 显示全部楼层
可以试试ADC和proteus
回复

使用道具 举报

ID:394553 发表于 2020-2-15 09:25 | 显示全部楼层
楼主太棒了,真诚感谢分享!
回复

使用道具 举报

ID:693219 发表于 2020-2-22 17:27 | 显示全部楼层
感谢分享哈哈哈哈!
回复

使用道具 举报

ID:693722 发表于 2020-3-6 12:00 | 显示全部楼层
非常有用!!刚好急用!调试了两天没结果,今天发现这个帖子,感谢分享
回复

使用道具 举报

ID:693722 发表于 2020-3-6 12:03 | 显示全部楼层
请问为什么ADC校准不了呢?在Proteus仿真中,为什么去掉校准程序就可以仿真呢???
回复

使用道具 举报

ID:648760 发表于 2020-3-8 00:49 | 显示全部楼层
谢谢,对小白很有用
回复

使用道具 举报

ID:648760 发表于 2020-3-8 11:38 | 显示全部楼层
谢谢共享,也想proteus仿真一下stm32的ADC,老出问题,参考一下。
回复

使用道具 举报

ID:719221 发表于 2020-3-31 01:30 来自手机 | 显示全部楼层
学习一下
回复

使用道具 举报

ID:719221 发表于 2020-3-31 10:46 | 显示全部楼层
找了半天,终于找到了
回复

使用道具 举报

ID:606102 发表于 2020-4-7 16:35 | 显示全部楼层
666,大兄弟是天使吗,布置的作业是在离谱,啥也不知道就让仿真ADC并用中断以及用LCD显示出来,哎
回复

使用道具 举报

ID:89217 发表于 2020-4-7 23:31 | 显示全部楼层
感谢楼主的无私奉献,学习了
回复

使用道具 举报

ID:658039 发表于 2020-4-9 21:01 | 显示全部楼层
请问proteus是什么版本?居然有stm32f103R6 !
回复

使用道具 举报

ID:384904 发表于 2020-4-10 16:27 | 显示全部楼层
好东西,谢谢高手分享,谢谢。
回复

使用道具 举报

ID:384904 发表于 2020-4-10 16:33 | 显示全部楼层

感谢楼主的无私奉献,学习了
回复

使用道具 举报

ID:294134 发表于 2020-4-13 10:51 | 显示全部楼层
很好谢谢
回复

使用道具 举报

ID:719608 发表于 2020-4-13 13:31 | 显示全部楼层
程序好像有问题
回复

使用道具 举报

ID:728265 发表于 2020-4-13 15:30 | 显示全部楼层
非常需要这些资料,目前正在学习proteus仿真
回复

使用道具 举报

ID:446064 发表于 2020-4-16 13:18 | 显示全部楼层
这两个都是写在main.c的么
回复

使用道具 举报

ID:446064 发表于 2020-4-18 21:29 | 显示全部楼层
r6的程序可以套用到c8上么
回复

使用道具 举报

ID:685780 发表于 2020-4-22 19:58 | 显示全部楼层
好东西,谢谢分享。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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