標(biāo)題: proteus仿真stm32f103驅(qū)動(dòng)lcd1602顯示adc采集的電壓(仿真圖+程序) [打印本頁(yè)]

作者: qq7530315    時(shí)間: 2019-5-4 11:29
標(biāo)題: proteus仿真stm32f103驅(qū)動(dòng)lcd1602顯示adc采集的電壓(仿真圖+程序)
仿真原理圖如下(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 ;     //設(shè)置為開漏輸出
  13.         GPIO_Init(LCD1602_GPIO_PORT,&LCD1602_GPIOStruct);
  14. }

  15. void LCD1602_WaitReady(void) //檢測(cè)忙狀態(tài)
  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) //寫數(shù)據(jù)
  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)  //由輸入的屏幕坐標(biāo)計(jì)算顯示RAM的地址
  56.         addr = 0x00 + x;  //第一行字符地址從0x00起始
  57.     else
  58.         addr = 0x40 + x;  //第二行字符地址從0x40起始
  59.     LCD1602_WriteCmd(addr|0x80);  //設(shè)置RAM地址
  60. }

  61. void LCD1602_ShowStr(uint8_t x, uint8_t y, uint8_t *str, uint8_t len)
  62. {
  63.     LCD1602_SetCursor(x, y);        //設(shè)置起始地址
  64.     while (len--)         //連續(xù)寫入len個(gè)字符數(shù)據(jù)
  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);        //設(shè)置起始地址
  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);        //設(shè)置起始地址
  82.         LCD1602_WriteDat(dat);
  83. }



  84. void LCD1602_Init(void)
  85. {
  86.           LCD1602_GPIO_Config();   //開啟GPIO口
  87.     LCD1602_WriteCmd(0X38);  //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
  88.     LCD1602_WriteCmd(0x0C);  //顯示器開,光標(biāo)關(guān)閉
  89.     LCD1602_WriteCmd(0x06);  //文字不動(dòng),地址自動(dòng)+1
  90.     LCD1602_WriteCmd(0x01);  //清屏
  91. }
  92.         
  93.         



復(fù)制代碼
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時(shí)鐘
  5.            
  6.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //
  7.     //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//為什么沒有配置這個(gè)????
  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結(jié)構(gòu)體變量//注意在一個(gè)語句快內(nèi)變量的聲明要放在可執(zhí)行語句的前面,否則出錯(cuò),因此要放在ADC1_GPIO_Config();前面
  15.   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在獨(dú)立模式
  16.   ADC_InitStructure.ADC_ScanConvMode =        DISABLE; //使能掃描
  17.   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC轉(zhuǎn)換工作在連續(xù)模式
  18.   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//由軟件控制轉(zhuǎn)換,不使用外部觸發(fā)
  19.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//轉(zhuǎn)換數(shù)據(jù)右對(duì)齊
  20.   ADC_InitStructure.ADC_NbrOfChannel = 1;//轉(zhuǎn)換通道為1
  21.   ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
  22.         
  23.   ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
  24.   //ADC1選擇信道14,音序等級(jí)1,采樣時(shí)間55.5個(gè)周期
  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); //重置.(復(fù)位).ADC1校準(zhǔn)寄存器
  30. //  while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校準(zhǔn)重置完成
  31. //  ADC_StartCalibration(ADC1);//開始ADC1校準(zhǔn)
  32. //  while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校準(zhǔn)完成
  33. //  ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1軟件開始轉(zhuǎn)換
  34. }

復(fù)制代碼
全部資料:


注意這個(gè)仿真只能在Proteus8.8運(yùn)行,經(jīng)過測(cè)試高版本和低版本都不行,數(shù)據(jù)直接顯示0:
ADC+LCD1602.7z (237.27 KB, 下載次數(shù): 2532)

作者: youqq    時(shí)間: 2019-5-6 15:06
好東西,謝謝高手分享,謝謝。 貌似只能用Proteus 8.8才能成功

作者: 64649    時(shí)間: 2019-5-8 17:34
很好的東西 好資料,51黑有你更精彩!!!

作者: zcllom    時(shí)間: 2019-5-25 01:28
正好要做一個(gè)ADC轉(zhuǎn)換,看下能不能借用
作者: zcllom    時(shí)間: 2019-5-25 09:14
樓主是大大的好人,如果自己折騰挺費(fèi)勁,站在樓主的肩膀上,就輕松多了。
作者: lcxyz183    時(shí)間: 2019-7-30 21:26
謝謝樓主分享
作者: 11621118243    時(shí)間: 2019-7-31 12:30
太好了,謝謝

作者: yun123117    時(shí)間: 2019-7-31 19:27
謝謝高手分享,謝謝
作者: liuchsxian    時(shí)間: 2019-8-25 17:22
我正在做一個(gè)ADC轉(zhuǎn)換,折騰一天了,看下能不能借用
作者: jwjjwj123    時(shí)間: 2019-8-26 09:29
好貼,正需要的
作者: 會(huì)飛的魚520    時(shí)間: 2019-8-26 10:37
很好的東西
作者: xgwxy    時(shí)間: 2019-8-26 21:02
謝謝分享
作者: ksljxxq    時(shí)間: 2019-10-6 11:31
我來看看
作者: yancey    時(shí)間: 2019-10-13 11:39
感謝分享
作者: tianma    時(shí)間: 2019-11-30 10:50
多謝分享,很好的例子。lcd和ad采集一塊練習(xí)
作者: 2289477193    時(shí)間: 2019-12-15 19:50
只顯示兩行方塊  
作者: 2289477193    時(shí)間: 2019-12-15 19:50
可以給我舉列一下嗎
作者: yjht    時(shí)間: 2020-1-2 13:16
高手!例子很好!但是遇到一個(gè)問題,運(yùn)行一小段時(shí)間就停在那里不運(yùn)行了,不知是何原因?
作者: yjht    時(shí)間: 2020-1-2 13:17
好東西謝謝分享!但是為什么運(yùn)行一小段時(shí)間程序就不運(yùn)行了?
作者: LSKX    時(shí)間: 2020-1-3 23:19
學(xué)習(xí)一下,感謝樓主的分享
作者: maozheng110    時(shí)間: 2020-1-5 15:59
可以試試ADC和proteus
作者: liuqing_tjut    時(shí)間: 2020-2-15 09:25
樓主太棒了,真誠(chéng)感謝分享!
作者: VickyVickyYee    時(shí)間: 2020-2-22 17:27
感謝分享哈哈哈哈!
作者: 888888888888899    時(shí)間: 2020-3-6 12:00
非常有用!剛好急用!調(diào)試了兩天沒結(jié)果,今天發(fā)現(xiàn)這個(gè)帖子,感謝分享
作者: 888888888888899    時(shí)間: 2020-3-6 12:03
請(qǐng)問為什么ADC校準(zhǔn)不了呢?在Proteus仿真中,為什么去掉校準(zhǔn)程序就可以仿真呢???
作者: qinsir88    時(shí)間: 2020-3-8 00:49
謝謝,對(duì)小白很有用
作者: qinsir88    時(shí)間: 2020-3-8 11:38
謝謝共享,也想proteus仿真一下stm32的ADC,老出問題,參考一下。
作者: XSummer    時(shí)間: 2020-3-31 01:30
學(xué)習(xí)一下
作者: XSummer    時(shí)間: 2020-3-31 10:46
找了半天,終于找到了
作者: Conner    時(shí)間: 2020-4-7 16:35
666,大兄弟是天使嗎,布置的作業(yè)是在離譜,啥也不知道就讓仿真ADC并用中斷以及用LCD顯示出來,哎
作者: 羅程峰8200    時(shí)間: 2020-4-7 23:31
感謝樓主的無私奉獻(xiàn),學(xué)習(xí)了

作者: shu_007    時(shí)間: 2020-4-9 21:01
請(qǐng)問proteus是什么版本?居然有stm32f103R6 !
作者: peterliuh    時(shí)間: 2020-4-10 16:27
好東西,謝謝高手分享,謝謝。
作者: peterliuh    時(shí)間: 2020-4-10 16:33

感謝樓主的無私奉獻(xiàn),學(xué)習(xí)了
作者: 1756391852    時(shí)間: 2020-4-13 10:51
很好謝謝
作者: luchenzhijia    時(shí)間: 2020-4-13 13:31
程序好像有問題
作者: amidew3278    時(shí)間: 2020-4-13 15:30
非常需要這些資料,目前正在學(xué)習(xí)proteus仿真
作者: 123456789lrs    時(shí)間: 2020-4-16 13:18
這兩個(gè)都是寫在main.c的么

作者: 123456789lrs    時(shí)間: 2020-4-18 21:29
r6的程序可以套用到c8上么
作者: BatJack96    時(shí)間: 2020-4-22 19:58
好東西,謝謝分享。
作者: wlllllll    時(shí)間: 2020-4-23 09:43
好東西,謝謝分享。
作者: 葳蕤    時(shí)間: 2020-4-28 10:14
樓主的電壓采集,每次都要重新載入才可以顯示當(dāng)前電壓。建議在主函數(shù)的最后,加一個(gè)delay_ms(500);親測(cè)有效
作者: OiMCU    時(shí)間: 2020-4-28 20:19
程序 顯示不了咋回事
作者: 2940872900    時(shí)間: 2020-5-9 09:02
感謝分享!。。。。!
作者: heitudi    時(shí)間: 2020-5-9 11:59
這個(gè)可以用,電壓值隨著電位器的變動(dòng)而改變。真是太好了!
作者: liuxianghong8    時(shí)間: 2020-5-12 12:29
好東西,謝謝分享!
作者: 愛騫騫    時(shí)間: 2020-5-23 08:53
為啥我現(xiàn)在在51黑上下載的都打不開啊,仿真和程序都打不開
作者: 步步森羅    時(shí)間: 2020-5-27 17:07
謝謝分享
作者: nucebaby    時(shí)間: 2020-5-29 09:37
太好了,感謝
作者: cxz55    時(shí)間: 2020-5-29 14:03
請(qǐng)問一下有沒有顯示DAC值的仿真
作者: peterliuh    時(shí)間: 2020-5-29 20:46

正好要做一個(gè)ADC轉(zhuǎn)換,看下能不能借用
作者: 噗噗噗p    時(shí)間: 2020-6-2 13:51
感謝分享,最近在用proteus做stm32仿真
作者: liuxianghong8    時(shí)間: 2020-6-11 16:39
謝謝!非常好,正想用F103做的交流電壓表,參考一下。
作者: shiprain    時(shí)間: 2020-6-14 13:20
shu_007 發(fā)表于 2020-4-9 21:01
請(qǐng)問proteus是什么版本?居然有stm32f103R6 !

8.9吧。我用的8.9里面有
作者: 譚露95    時(shí)間: 2020-6-30 08:58
樓主可以分享一下stm32的各個(gè)設(shè)置步驟嗎 加個(gè)聯(lián)系方式也行
作者: zxdehao    時(shí)間: 2020-7-8 18:16
贊,小白的我仿真一直出問題

作者: 2291572906    時(shí)間: 2020-7-25 16:26
為什么采集到的電壓不準(zhǔn)?
作者: Mars_    時(shí)間: 2020-7-30 00:21
下載跑了一下,仿真可以運(yùn)行。正好最近要用到,感謝!
作者: gemxie    時(shí)間: 2020-8-12 17:22
可以正常顯示嗎
作者: lightday    時(shí)間: 2020-10-13 15:56
proteus 仿真ADC是不是還有點(diǎn)問題,調(diào)節(jié)電位器有時(shí)只能電壓往下調(diào)才能正確顯示,有時(shí)又沒有反應(yīng)。

作者: 2466279655    時(shí)間: 2020-11-6 19:45
bsp tick是什么東西
作者: hhdsdy    時(shí)間: 2020-11-6 20:39
順帶下載一個(gè)看看
作者: bsdpgsql@126.co    時(shí)間: 2020-11-20 22:35
我仿出來不行,借鑒一下!
作者: 周小樹-lv    時(shí)間: 2021-2-13 14:04
樓主,有寄存器版本嗎?我現(xiàn)在有個(gè)寄存器版的輸出SPWM,這個(gè)庫(kù)函數(shù)版本可以和寄存器版本混著用嗎?在一個(gè)主函數(shù)里。
作者: aktuan007    時(shí)間: 2021-2-13 21:36
stm32自帶AD嗎
作者: zhaobolove    時(shí)間: 2021-2-13 22:10
請(qǐng)問軟件版本是哪個(gè)?  ,我這邊 打開不了
作者: amidew3278    時(shí)間: 2021-5-17 11:25
謝謝,以前好用,為什么又好用呢
作者: klmysjy    時(shí)間: 2021-6-3 17:34
為什么我復(fù)制過來,是0.0V
作者: ganhui1300    時(shí)間: 2021-8-5 11:02
自己仿真的采集回來一直是0v 不知道哪里出來問題。準(zhǔn)備下樓主的試試,謝謝分享。
作者: frog108    時(shí)間: 2021-10-7 12:38
為啥我直接下載下來仿真不顯示呢
作者: jeffrey.liu    時(shí)間: 2021-11-4 14:26
樓主,我的不顯示啊
作者: heicad    時(shí)間: 2021-11-5 04:58
jeffrey.liu 發(fā)表于 2021-11-4 14:26
樓主,我的不顯示啊

你得用Proteus8.8版本來打開,打開以后要雙擊單片機(jī),選擇hex文件:..\STM32程序\Project\Objects\LWl-F103.hex,這樣就可以了 你看我打開后的效果

51hei.gif (54.77 KB, 下載次數(shù): 668)

51hei.gif

作者: klmysjy    時(shí)間: 2021-11-18 15:33
我下載后,運(yùn)行LCD上無任何顯示,這是哪里設(shè)置不對(duì)?
作者: klmysjy    時(shí)間: 2021-11-18 15:49
我用的是PROTEUS8.10
作者: xjj850205    時(shí)間: 2021-11-22 18:19
klmysjy 發(fā)表于 2021-11-18 15:33
我下載后,運(yùn)行LCD上無任何顯示,這是哪里設(shè)置不對(duì)?

我也是,這個(gè)程序我發(fā)現(xiàn)有問題。
作者: amzz123    時(shí)間: 2022-3-9 22:06
好東西,謝謝高手分享,謝謝
作者: 899    時(shí)間: 2022-4-1 21:45
博主,請(qǐng)問為什么不校準(zhǔn)呢?校準(zhǔn)為啥一直會(huì)卡在while(ADC_GetResetCalibrationStatus(ADC1));這里呢?
作者: sxprolist    時(shí)間: 2022-5-11 21:01
proteus8.9能打開嗎
作者: sxprolist    時(shí)間: 2022-5-11 21:02
ADC在proteus仿真不能校準(zhǔn),去掉校準(zhǔn)就可以
作者: wenzhong77    時(shí)間: 2022-5-20 19:42
好資料,這幾天正好在學(xué)習(xí)adc
作者: aktuan007    時(shí)間: 2022-9-22 16:06
葳蕤 發(fā)表于 2020-4-28 10:14
樓主的電壓采集,每次都要重新載入才可以顯示當(dāng)前電壓。建議在主函數(shù)的最后,加一個(gè)delay_ms(500);親測(cè)有效

請(qǐng)教一下,為什么我下載了LCD啥也不顯示。。。
作者: aktuan007    時(shí)間: 2022-9-23 09:54
請(qǐng)教一下,為什么我下載了LCD啥也不顯示。。。
作者: 51jjt    時(shí)間: 2022-10-4 16:19
8.13proteus仿真還是0
作者: heicad    時(shí)間: 2022-10-4 16:44
51jjt 發(fā)表于 2022-10-4 16:19
8.13proteus仿真還是0

他這個(gè)是老版本做的 ,你要用8.8版本 看我發(fā)的圖 2樓
作者: dhkahdka    時(shí)間: 2023-5-9 20:46
為什么我的一直顯示電壓為0





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1