找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4252|回復(fù): 18
打印 上一主題 下一主題
收起左側(cè)

LM35+ADC0809使用51單片機制作溫度顯示(問題解決)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:89072 發(fā)表于 2021-9-13 19:09 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 hslcac 于 2021-9-16 21:20 編輯

學(xué)習(xí)調(diào)試過程中,單獨顯示輸入沒問題,關(guān)鍵的ADC0809的數(shù)據(jù)不顯示,請幫忙看一下哪里除了問題,謝謝。問題已經(jīng)解決,謝謝各位老師指點,謝謝,后面附完成后的程序。
  1. //以下為程序
  2. //#include <STC89C5xRC.H>
  3. #include <reg52.h>
  4. #include"LM35LCD1602.h"

  5. //ADC0809相關(guān)引腳定義
  6. //===========================
  7. #define ADC_DATA P1
  8. sbit ADC_EOC = P3^3;              
  9. sbit ADC_CLK = P3^4;               
  10. sbit ADC_START = P3^6;            
  11. sbit ADC_OE = P3^7;  

  12. //===========================
  13. //警報:LED與蜂鳴器引腳
  14. //===========================
  15. //sbit BEEP = P3^5; //高電平響
  16. //===========================
  17. //粗略延時函數(shù)  AT89C51 & 12MHz
  18. //===========================
  19. void delayms(unsigned int ms)
  20. {                    
  21.          unsigned char a,b,c;
  22.          while(ms--)
  23.          {
  24.             for(c=1;c>0;c--)
  25.                for(b=142;b>0;b--)
  26.                   for(a=2;a>0;a--);
  27.          }
  28. }

  29. //===========================
  30. //定時器初始化,配置ADC0809時鐘
  31. //===========================
  32. void timer_init(void)
  33. {
  34.          //配置定時器0
  35.         ET0 = 1;
  36.         TMOD &= 0xF0;
  37.         TMOD |= 0x02;                //定時器0,模式2,自動重裝定時器
  38.         TH0 = 200;                        //自動重裝值
  39.         TL0 = 200;
  40.         TR0 = 1;                        //配置定時器1
  41.         ET1 = 1;
  42.         TMOD &= 0x0F;                //清除定時器1配置,不改動定時器0的配置
  43.         TMOD |= 0x10;                        //定時器1模式一,不改動定時器0的模式
  44.         TH1 = (65536 - 2000)/256;
  45.         TL1 = (65536 - 2000)%256;
  46.         TR1 = 1;
  47.         EA = 1;
  48. }
  49. //===========================
  50. //定時器0中斷,為ADC0809提供時鐘信號
  51. //===========================

  52. void timer0() interrupt 1
  53. {
  54.          ADC_CLK = ~ADC_CLK;
  55. }

  56. //============================
  57. //ADC0809 轉(zhuǎn)換函數(shù)
  58. //============================

  59. uchar ADC0809_GET(void)
  60. {
  61.          ADC_START = 0;
  62.          ADC_OE = 0;
  63.          ADC_START = 1;
  64.          ADC_START = 0;
  65.          while(ADC_EOC == 0);
  66.          ADC_OE = 1;
  67.          return ADC_DATA;
  68. }

  69. uchar t1_flag = 0;                //用于標記顯示第幾位數(shù)碼管
  70. uchar seg0 = 0;                //第0位數(shù)碼管的值        
  71. uchar seg1 = 1;                //第1位數(shù)碼管的值        
  72. uchar seg2 = 2;                //第2位數(shù)碼管的值        
  73. uchar seg3 = 3;                //第3位數(shù)碼管的值        

  74. //============================
  75. //顯示電壓值,輸入0~255,顯示0.000~5.000
  76. //============================
  77. uint print_volt(uchar num)
  78. {
  79.          uint volt = 0;
  80.          volt = num/255.0 * 5000 + 0.5;        //除255.0和除255有很大區(qū)別,除255.0會自動轉(zhuǎn)換為float型,小數(shù)才能保持,而volt/255=0,+0.5四舍五入。
  81.          seg0 = volt/1000%10;
  82.          seg1 = volt/100%10;
  83.          seg2 = volt/10%10;
  84.          seg3 = volt%10;
  85.          return volt;
  86. }

  87. //============================
  88. //主函數(shù)
  89. //============================
  90. void main(void)
  91. {
  92.             uchar adc_num = 0;                //ADC采集到的值
  93.         uint volt = 0;                                        //電壓值 0~5000,代表(0~5)V
  94.          lcd_init();
  95.                 lcd_wcom(0x80+0x0f);
  96.                 lcd_wdat(0xc3);//*"1",0*/
  97.                 lcd_wcom(0x80+0x0d);
  98.                 lcd_wdat(0xdf);//*"1",0*/
  99.                 lcd_wcom(0x80+0x0e);
  100.                 lcd_wdat(0x43);//*"1",0*/
  101.         timer_init();                                        //定時器0、定時器1初始化。

  102.          while(1)
  103.          {
  104.                  adc_num = ADC0809_GET();
  105.                  volt = print_volt(adc_num);                        //在數(shù)碼管上顯示電壓值,并返回一個0~5000的值,用于判斷是否要報警。
  106.             lcd_wcom(0x80+0x09);lcd_wdat(volt);
  107.                         lcd_wcom(0x80+0x0A);lcd_wdat(seg1);
  108.                         lcd_wcom(0x80+0x4A);lcd_wdat(seg2);
  109.                         lcd_wcom(0x80+0x4B);lcd_wdat(seg3);

  110.                  delayms(100);
  111.          }
  112. }

  113. //LCD1602顯示程序


  114. /*------------------------------------*/
  115. #ifndef __LCD1602_H__
  116. #define __LCD1602_H__

  117. //#include"delay.h"
  118. #define uint unsigned int                //預(yù)定義
  119. #define uchar unsigned char

  120. sbit rs=P2^5;        //1602的數(shù)據(jù)/指令選擇控制線?
  121. sbit rw=P2^6;         //1602的讀寫控制線?
  122. sbit en=P2^7;        //1602的使能控制線?
  123. /*P0口接1602的D0~D7*/

  124. //uchar h1,h2,h3,h4;//LCD顯示變量
  125. //uchar table[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};                 //要顯示的內(nèi)容放入數(shù)組table
  126. //uchar table1[43]="0123456789abcdefABCDEFGHIJKLMNOPQRSTUVWXYZ";
  127. //uchar table2[]={0x15,0x0A,0x15,0x0A,0x15,0x0A,0x15,0x0A};
  128. //uchar table3[]=".VAWa";
  129. //uchar table3[]="8888888888";
  130. //uchar code table[]="I LIKE MCU!";
  131. void delayZ(uint n)                 //延時函數(shù)
  132. {        
  133.         uint x,y;        
  134.         for(x=n;x>0;x--)        
  135.                 for(y=110;y>0;y--);        
  136. }
  137. //void tablex(uint tab1);        

  138.         
  139. void lcd_wcom(uchar com)        //1602寫命令函數(shù)
  140. {        
  141.         rs=0;        //選擇指令寄存器?
  142.         rw=0;        //選擇寫?
  143.         P0=com;        //把命令字送入P0?
  144.         delayZ(5);        //延時一小會兒,讓1602準備接收數(shù)據(jù)?
  145.         en=1;         //使能線電平變化,命令送入1602的8位數(shù)據(jù)口?
  146.         en=0;//        
  147. }        
  148. void lcd_wdat(uchar dat)        //1602寫數(shù)據(jù)函數(shù)
  149. {        
  150.         rs=1;        //選擇數(shù)據(jù)寄存器?
  151.         rw=0;        //選擇寫
  152.         P0=dat;        //把要顯示的數(shù)據(jù)送入P2
  153.         delayZ(5);        //延時一小會兒,讓1602準備接收數(shù)據(jù)
  154.         en=1;        //使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口
  155.         en=0;        
  156. }        
  157. void lcd_init()                //1602初始化函數(shù)
  158. {        
  159.         lcd_wcom(0x38);                //8位數(shù)據(jù),雙列,5*7字形
  160.         lcd_wcom(0x0c);         //開啟顯示屏,關(guān)光標,光標不閃爍?
  161.         lcd_wcom(0x06);                //顯示地址遞增,即寫一個數(shù)據(jù)后,顯示位置右移一位
  162.         lcd_wcom(0x01);         //清屏?
  163. }
  164. /************
  165. void tablex(uint tab1)//數(shù)據(jù)分解
  166. {
  167.         uchar num;
  168.         h1=tab1/1000;//1023//1
  169.         h2=tab1%1000/100;//023//0
  170.         h3=tab1%100/10;//23//2
  171.         h4=tab1%10;//3
  172. }

  173. for(num=0;num<11;num++)
  174.                                 {
  175.                                         write_date(table[num]);           //a//寫數(shù)據(jù)write_date(0x31); write_date('1');
  176.                                         delay(200);
  177.                         //                write_date('B');
  178.                                 }
  179. ****************/


  180. /*------------------------------------*/
  181. /*--------------------------------------------------------------*/
  182. #endif

  183.         

復(fù)制代碼

lALPDh0cQirwNNLNAdvNAog_648_475.png (37.75 KB, 下載次數(shù): 158)

有需要制版的我發(fā)給你

有需要制版的我發(fā)給你

lADPDhmOw4Yj78zNA8DNBQA_1280_960.jpg (45.58 KB, 下載次數(shù): 153)

打樣后制作顯示ADC沒有數(shù)據(jù)

打樣后制作顯示ADC沒有數(shù)據(jù)

LM35溫度測試程序.rar

42.9 KB, 下載次數(shù): 30

程序與電路圖

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:89072 發(fā)表于 2021-9-13 19:16 | 只看該作者
本帖最后由 hslcac 于 2021-9-13 19:58 編輯

有需要圖紙打樣的告訴我發(fā)給你,現(xiàn)在經(jīng)過調(diào)試顯示亂碼,郁悶,請幫我看看,謝謝

lADPDgQ9y6mz5p3NA8DNBQA_1280_960.jpg (70.78 KB, 下載次數(shù): 163)

lADPDgQ9y6mz5p3NA8DNBQA_1280_960.jpg

lALPDgfLSk5e1CfNAfzNAg8_527_508.png (35.49 KB, 下載次數(shù): 171)

lALPDgfLSk5e1CfNAfzNAg8_527_508.png
回復(fù)

使用道具 舉報

板凳
ID:752974 發(fā)表于 2021-9-14 08:28 | 只看該作者
顯示不顯示和0809無關(guān),問題可能出現(xiàn)在數(shù)據(jù)處理上,仔細檢查0809后的數(shù)據(jù)處理過程。
回復(fù)

使用道具 舉報

地板
ID:89072 發(fā)表于 2021-9-14 09:36 | 只看該作者
munuc_w 發(fā)表于 2021-9-14 08:28
顯示不顯示和0809無關(guān),問題可能出現(xiàn)在數(shù)據(jù)處理上,仔細檢查0809后的數(shù)據(jù)處理過程。

出現(xiàn)亂碼是不是0809數(shù)據(jù)錯誤啊
回復(fù)

使用道具 舉報

5#
ID:161164 發(fā)表于 2021-9-14 11:20 | 只看該作者
經(jīng)過半天排查
發(fā)現(xiàn)是你初始化了定時器1但又沒有相應(yīng)的中斷函數(shù)
結(jié)果在定時器1第一次溢出后單片機就當(dāng)機了
應(yīng)加上
void timer1() interrupt 3
{
}

另外,LCD1602要顯示字符,lcd_wdat();的形參要以ASCII值輸入
lcd_wdat(volt);//自己想一下怎樣改
lcd_wdat(seg1);>>>>>>>>>>>>lcd_wdat('0'+seg1);
lcd_wdat(seg2);>>>>>>>>>>>>lcd_wdat('0'+seg2);
lcd_wdat(seg3);>>>>>>>>>>>>lcd_wdat('0'+seg3);
回復(fù)

使用道具 舉報

6#
ID:123289 發(fā)表于 2021-9-14 15:04 | 只看該作者
1、顯示程序:應(yīng)能顯示某個變量于LED上,如A3。
2、采樣程序:應(yīng)能將采樣的數(shù)值,轉(zhuǎn)換成溫度,再放入A3中。
做到以上兩點不就OK了嗎?有什么難度呢?
回復(fù)

使用道具 舉報

7#
ID:89072 發(fā)表于 2021-9-15 09:13 | 只看該作者
lkc8210 發(fā)表于 2021-9-14 11:20
經(jīng)過半天排查
發(fā)現(xiàn)是你初始化了定時器1但又沒有相應(yīng)的中斷函數(shù)
結(jié)果在定時器1第一次溢出后單片機就當(dāng)機了 ...

非常感謝,開始測試使用的中斷刷新顯示,調(diào)試后放在主函數(shù)內(nèi)做顯示,我再改一下試試。
回復(fù)

使用道具 舉報

8#
ID:89072 發(fā)表于 2021-9-15 09:14 | 只看該作者
yzwzfyz 發(fā)表于 2021-9-14 15:04
1、顯示程序:應(yīng)能顯示某個變量于LED上,如A3。
2、采樣程序:應(yīng)能將采樣的數(shù)值,轉(zhuǎn)換成溫度,再放入A3中 ...

謝謝指導(dǎo),我按您的辦法試試。
回復(fù)

使用道具 舉報

9#
ID:89072 發(fā)表于 2021-9-15 19:56 | 只看該作者
  1. //主程序
  2. //#include <STC89C5xRC.H>
  3. #include <reg52.h>
  4. #include"LM35LCD1602.h"

  5. #define ADC_DATA P1
  6. uchar Temp;
  7. uchar ggao[]="0123456789";
  8. uchar volt_data[]="volt:000.00v";

  9. uchar t1_flag = 0;                //用于標記顯示第幾位數(shù)碼管
  10. uchar seg0 = 0;                //第0位數(shù)碼管的值        
  11. uchar seg1 = 1;                //第1位數(shù)碼管的值        
  12. uchar seg2 = 2;                //第2位數(shù)碼管的值        
  13. uchar seg3 = 3;                //第3位數(shù)碼管的值        
  14.                                                   //處理后的數(shù)據(jù)
  15. sbit  ADC_EOC = P3^3;              
  16. sbit  ADC_CLK = P3^4;               
  17. sbit  ADC_START = P3^6;            
  18. sbit  ADC_OE  = P3^7;  

  19. //*********************************************************************************
  20. //函數(shù)名:Delay
  21. //函數(shù)功能:軟件延時函數(shù)
  22. //形式參數(shù):uint i
  23. //*********************************************************************************
  24. void delayms(unsigned int ms)
  25. {                    
  26.          unsigned char a,b,c;
  27.          while(ms--)
  28.          {
  29.             for(c=1;c>0;c--)
  30.                for(b=142;b>0;b--)
  31.                   for(a=2;a>0;a--);
  32.          }
  33. }
  34. //===========================
  35. //定時器初始化,配置ADC0809時鐘
  36. //===========================
  37. void timer_init(void)
  38. {
  39.          //配置定時器0
  40.         ET0 = 1;
  41.         TMOD &= 0xF0;
  42.         TMOD |= 0x02;                //定時器0,模式2,自動重裝定時器
  43.         TH0 = 200;                        //自動重裝值
  44.         TL0 = 200;
  45.         TR0 = 1;                        //配置定時器1
  46.         ET1 = 1;
  47.         TMOD &= 0x0F;                //清除定時器1配置,不改動定時器0的配置
  48.         TMOD |= 0x10;                        //定時器1模式一,不改動定時器0的模式
  49.         TH1 = (65536 - 2000)/256;
  50.         TL1 = (65536 - 2000)%256;
  51.         TR1 = 1;
  52.         EA = 1;
  53. }
  54. //============================
  55. //ADC0809 轉(zhuǎn)換函數(shù)
  56. //============================

  57. uchar ADC0809_GET(void)
  58. {
  59.          ADC_START = 0;
  60.          ADC_OE = 0;
  61.          ADC_START = 1;
  62.          ADC_START = 0;
  63.          while(ADC_EOC == 0);
  64.          ADC_OE = 1;
  65.          return ADC_DATA;
  66. }
  67. /********************

  68. **********************/
  69. void timer0() interrupt 1
  70. {
  71.          ADC_CLK = ~ADC_CLK;
  72. }

  73. /********************************************  
  74. void timer1() interrupt 3
  75. {
  76.         TH1 = (65536 - 2000)/256;
  77.         TL1 = (65536 - 2000)%256;  
  78.      
  79.         if(t1_flag == 0)
  80.                 {
  81.                         lcd_wcom(0x80+0x01);lcd_wdat(ggao[seg0]);               ////選通第0位
  82.         }
  83.                 else if(t1_flag == 1)
  84.                 {
  85.                         lcd_wcom(0x80+0x02);lcd_wdat(volt_data[seg1]);
  86.          }
  87.          else if(t1_flag == 2)
  88.          {
  89.                         lcd_wcom(0x80+0x03);lcd_wdat(ggao[seg2]);
  90.          }
  91.          else if(t1_flag == 3)
  92.          {
  93.                         lcd_wcom(0x80+0x04);lcd_wdat(ggao[seg3]);               //選通第3位數(shù)碼管
  94.         }

  95.          t1_flag++;                                //自加1
  96.          t1_flag =  t1_flag%4;                //讓t1_flag 在0和3之間循環(huán)
  97. }
  98. *********************************************************/
  99. //============================
  100. //顯示電壓值,輸入0~255,顯示0.000~5.000
  101. //============================
  102. uint Display_volt()
  103. {
  104.         uchar num,Temp;// = 0;                //ADC采集到的值
  105.         Temp= ADC0809_GET;
  106.         num=(Temp*1.0/255*5)*100; //數(shù)據(jù)處理:輸出值=輸入值*5/255  參數(shù)5是基準電壓5V
  107.         volt_data[10]=num%10+48;                  //取處理后的數(shù)據(jù)個位,對應(yīng)顯示溫度值的小數(shù)2位
  108.         volt_data[9]=num/10%10+48;         //取處理后的數(shù)據(jù)十位,對應(yīng)顯示溫度值的小數(shù)1位
  109.         volt_data[7]=num/100%10+48;        //取處理后的數(shù)據(jù)百位,對應(yīng)顯示溫度值的個位
  110.         volt_data[6]=num/1000;          //取處理后的數(shù)據(jù)千位,對應(yīng)顯示溫度值的十位
  111.         wsrt(0xc0,volt_data);
  112.         return num;

  113. }
  114. /*************
  115. uint print_volt(uchar num)
  116. {
  117.                 uchar volt = 0;
  118.                 volt = num/255.0 * 5000 + 0.5;        //除255.0和除255有很大區(qū)別,除255.0會自動轉(zhuǎn)換為float型,小數(shù)才能保持,而volt/255=0,+0.5四舍五入。
  119.          seg0 = volt/1000%10;
  120.          seg1 = volt/100%10;
  121.          seg2 = volt/10%10;
  122.          seg3 = volt%10;
  123.          return volt;
  124. }
  125. *****************/
  126. //============================
  127. //主函數(shù)
  128. //============================
  129. void main()
  130. {
  131.         uint volt = 0;                                        //電壓值 0~5000,代表(0~5)V
  132.          lcd_init();
  133.                  wsrt(0x80,ggao);
  134.                 lcd_wcom(0x80+0x0f);lcd_wdat(0xc3);//*"1",0*/
  135.                 lcd_wcom(0x80+0x0d);
  136.                 lcd_wdat(0xdf);//*"1",0*/
  137.                 lcd_wcom(0x80+0x0e);
  138.                 lcd_wdat(0x43);//*"1",0*/
  139.         timer_init();                                        //定時器0、定時器1初始化。

  140. /**********************
  141.         uchar adc_num = 0;                //ADC采集到的值
  142.     uint volt = 0;
  143.         timer_init();
  144.         lcd_init();
  145.         lcd_wcom(0x38);
  146.         lcd_wcom(0x0c);
  147.         lcd_wcom(0x06);
  148. **************************/
  149. while(1)
  150.         {
  151.                                  

  152.                 Display_volt();
  153.             delayms(5);
  154.         }
  155. }


  156. //LCD程序


  157. /*------------------------------------*/
  158. #ifndef __LCD1602_H__
  159. #define __LCD1602_H__

  160. //#include"delay.h"
  161. #define uint unsigned int                //預(yù)定義
  162. #define uchar unsigned char

  163. sbit rs=P2^5;        //1602/定義數(shù)據(jù)/命令選擇端
  164. sbit rw=P2^6;         //定義讀/寫選擇端
  165. sbit en=P2^7;        //定義使能端
  166. /*P0口接1602的D0~D7*/

  167. //uchar h1,h2,h3,h4;//LCD顯示變量
  168. //uchar table[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};                 //要顯示的內(nèi)容放入數(shù)組table
  169. //uchar table1[43]="0123456789abcdefABCDEFGHIJKLMNOPQRSTUVWXYZ";
  170. //uchar table2[]={0x15,0x0A,0x15,0x0A,0x15,0x0A,0x15,0x0A};
  171. //uchar table3[]=".VAWa";
  172. //uchar table3[]="888888888888";
  173. //uchar code table[]="I LIKE MCU!";
  174. void delayZ(uint n)                 //延時函數(shù)
  175. {        
  176.         uint x,y;        
  177.         for(x=n;x>0;x--)        
  178.                 for(y=110;y>0;y--);        
  179. }
  180. //void tablex(uint tab1);        

  181.         
  182. void lcd_wcom(uchar com)        //1602寫命令函數(shù)
  183. {        
  184.         rs=0;             //RS置0
  185.         rw=0;             //RW置0     RS、RW置零,指令寄存器寫入
  186.         en=1;             //使能端置為高電平
  187.         P0=com;          //對液晶屏位置控制的命令
  188.         en=0;            //使能端置為低電平。使能端從高電平跳變低電平,液晶模塊執(zhí)行寫操作
  189.           delayZ(5);       //延時一定時間
  190. }        
  191. void lcd_wdat(uchar dat)        //1602寫數(shù)據(jù)函數(shù)
  192. {        
  193.         rs=1;            //RS置1  
  194.         rw=0;             //RW置0     RS置1,RW置零,數(shù)據(jù)寄存器寫入
  195.         en=1;            //讀取液晶模塊信息
  196.         P0=dat;          //液晶屏顯示的命令
  197.         en=0;             //使能端置為低電平。使能端從高電平跳變低電平,液晶模塊執(zhí)行寫操作
  198.           delayZ(5);       //延時一定時間        
  199. }        
  200. void lcd_init()                //1602初始化函數(shù)
  201. {        
  202.         lcd_wcom(0x38);                //8位數(shù)據(jù),雙列,5*7字形
  203.         lcd_wcom(0x0c);         //開啟顯示屏,關(guān)光標,光標不閃爍?
  204.         lcd_wcom(0x06);                //顯示地址遞增,即寫一個數(shù)據(jù)后,顯示位置右移一位
  205.         lcd_wcom(0x01);         //清屏?
  206. }
  207. /************
  208. void tablex(uint tab1)//數(shù)據(jù)分解
  209. {
  210.         uchar num;
  211.         h1=tab1/1000;//1023//1
  212.         h2=tab1%1000/100;//023//0
  213.         h3=tab1%100/10;//23//2
  214.         h4=tab1%10;//3
  215. }

  216. for(num=0;num<11;num++)
  217.                                 {
  218.                                         write_date(table[num]);           //a//寫數(shù)據(jù)write_date(0x31); write_date('1');
  219.                                         delay(200);
  220.                         //                write_date('B');
  221.                                 }
  222. ****************/


  223. /*-----------------        -------------------*/

  224. void  wsrt(unsigned char adr,unsigned char *p)    //顯示位置及顯示內(nèi)容的函數(shù)
  225. {
  226.         lcd_wcom(adr);     //顯示位置
  227.         while(*p!='\0')      //指針指向?qū)ο笫欠駷樽址Y(jié)束符
  228.   {
  229.         lcd_wdat(*p);      //顯示指針所指向?qū)ο?br />
  230.         p++;       //指針指向數(shù)組的下一個元素
  231.         }
  232. }

  233. /*--------------------------------------------------------------*/
  234. #endif

  235.         
復(fù)制代碼

顯示正常了,為什么只顯示0-9呢?哪里出錯了

lADPDiCpwOp8n8fNA8DNBQA_1280_960.jpg (68.89 KB, 下載次數(shù): 162)

lADPDiCpwOp8n8fNA8DNBQA_1280_960.jpg
回復(fù)

使用道具 舉報

10#
ID:89072 發(fā)表于 2021-9-15 23:33 來自手機 | 只看該作者
請路過的大師幫我看一下
回復(fù)

使用道具 舉報

11#
ID:161164 發(fā)表于 2021-9-16 00:40 | 只看該作者
定時器1的中斷是2ms一次吧?
對LCD1602來說太頻密了
再加上注釋
你好像抄錯了數(shù)碼管的動態(tài)掃描代碼了吧
回復(fù)

使用道具 舉報

12#
ID:89072 發(fā)表于 2021-9-16 12:44 | 只看該作者
lkc8210 發(fā)表于 2021-9-16 00:40
定時器1的中斷是2ms一次吧?
對LCD1602來說太頻密了
再加上注釋

是使用的1602,原來的數(shù)碼管顯示沒問題,修改的,定時器是1ms的啊
回復(fù)

使用道具 舉報

13#
ID:624769 發(fā)表于 2021-9-16 12:55 | 只看該作者
hslcac 發(fā)表于 2021-9-16 12:44
是使用的1602,原來的數(shù)碼管顯示沒問題,修改的,定時器是1ms的啊

液晶屏刷新是電壓翻轉(zhuǎn)一次就定格了,一般,沒有內(nèi)容變化就不必反復(fù)刷新,和數(shù)碼管需要不斷的供電點亮是不同的,所以,8210才提醒你一下。
回復(fù)

使用道具 舉報

14#
ID:89072 發(fā)表于 2021-9-16 13:18 | 只看該作者
188610329 發(fā)表于 2021-9-16 12:55
液晶屏刷新是電壓翻轉(zhuǎn)一次就定格了,一般,沒有內(nèi)容變化就不必反復(fù)刷新,和數(shù)碼管需要不斷的供電點亮是不 ...

嗯嗯明白了,謝謝,
回復(fù)

使用道具 舉報

15#
ID:161164 發(fā)表于 2021-9-16 15:03 | 只看該作者
hslcac 發(fā)表于 2021-9-16 12:44
是使用的1602,原來的數(shù)碼管顯示沒問題,修改的,定時器是1ms的啊

在網(wǎng)頁看,沒留意到那一段注釋掉了
正因為注釋掉了
又重覆了5樓的問題1
沒有定時器1的中斷函數(shù),又當(dāng)機了

第117行
volt_data[6]=num/1000;          //取處理后的數(shù)據(jù)千位,對應(yīng)顯示溫度值的十位
缺了個"+48"
又重覆了5樓的問題2
回復(fù)

使用道具 舉報

16#
ID:89072 發(fā)表于 2021-9-16 21:09 | 只看該作者
lkc8210 發(fā)表于 2021-9-16 15:03
在網(wǎng)頁看,沒留意到那一段注釋掉了
正因為注釋掉了
又重覆了5樓的問題1

為什么要加個‘’+48‘’,非常感謝,已經(jīng)找到問題了,第一、沒有加48,第二,num定義錯誤應(yīng)該是uint型。再次非常感謝各位老師指點,謝謝,上傳完成程序。
回復(fù)

使用道具 舉報

17#
ID:89072 發(fā)表于 2021-9-16 21:16 | 只看該作者

問題已經(jīng)解決,上傳完成主程序,顯示程序及電路沒變。

LM35溫度程序01(完成).rar

28.68 KB, 下載次數(shù): 29

程序

回復(fù)

使用道具 舉報

18#
ID:89072 發(fā)表于 2021-9-16 21:48 | 只看該作者
溫度和AD0809輸入電壓名稱標錯位置了,電壓顯示的是LM358輸出至0809IN0的電壓,制作板子的時候沒有計算好,358的最大輸出電壓測量3.74V,實際與顯示的電壓準確(沒有具體檢測),有借鑒制作溫度及數(shù)控電源的程序比較接近(針對新手)。
回復(fù)

使用道具 舉報

19#
ID:92810 發(fā)表于 2023-1-9 16:32 | 只看該作者
hslcac 發(fā)表于 2021-9-16 21:16
問題已經(jīng)解決,上傳完成主程序,顯示程序及電路沒變。

謝謝樓主分享啦
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表