久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機測電阻阻值程序出現的問題 [打印本頁]

作者: jony1122    時間: 2024-6-2 12:42
標題: 單片機測電阻阻值程序出現的問題
本程序使用STC8H8K64U單片機
測量0-100K的阻值時,讀數沒什么問題,但是測100K以上阻值時,顯示結果不正常。
把電路中51K的阻值換成300K阻值,測試結果還是不行。

出現這種情況是那方面的問題呢。
以下是與測試阻值有關的程序。
  1. #include "STC8H.H"
  2. #include "intrins.h"
  3. /*宏定義*/
  4. #define uint  unsigned int
  5. #define uchar unsigned char
  6. #define ulong unsigned long
  7. #define TOL   900         //公差
  8. #define VCC   5000        //電壓常量(毫伏)
  9. #define VCR   5100        //阻值常量
  10. #define LIM   4000        //開路電壓閾值常量(毫伏)


  11. /*端口定義*/
  12. sbit ADKA=P1^0;           //測阻1
  13. sbit ADKB=P1^1;           //測阻2
  14. sbit ADCA=P1^4;           //ADC1
  15. sbit ADCB=P1^5;           //ADC2
  16. sbit ADCO=P1^6;           //ADC4
  17. sbit LEDG=P5^0;           //綠燈
  18. sbit LEDR=P5^1;           //紅燈
  19. sbit HC595_SER   = P0^0;  //數據
  20. sbit HC595_SRCLK = P0^1;  //移位時鐘
  21. sbit HC595_RCLK  = P0^2;  //鎖存

  22. uchar code table[]={      //共陰數碼管段碼標準字庫
  23. //       0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
  24.         0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
  25. //      black  -   H    J    K    L    N    o    P    U    t    G    Q    r    M    y
  26.         0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
  27. //       0.   1.   2.   3.   4.   5.   6.   7.   8.   9.   -1
  28.         0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};
  29. uchar data dis_buf[4]={~0x3F,~0x3F,~0x3F,~0x3F};//顯示緩存
  30. /*全局變量*/
  31. uint  VinA;                  //測電壓A
  32. uint  VinB;                  //測電壓B
  33. uint  RinD;                  //測電阻
  34. uint  VADC;                  //ADC轉換結果
  35. uint  vector;                //向量
  36. bit   flag=0;                //標志
  37. bit   flag1=0;               //
  38. bit   allow;                 //允許
  39. uint  count;                 //計數
  40. uint  count1;
  41. uint  count2;
  42. uint  VR;


  43. /*本地子函數*/
  44. void  Delay500us(void);       //延時函數
  45. void  Delay_ms(uint t);       //延時函數
  46. void  Timer0_Init(void);      //初始化定時器0
  47. void  ADC_Init(void);         //初始化ADC
  48. uint  ADC_Read(uchar ch);     //讀取ADC結果
  49. uint  ADC_R(uchar dat);       //換算ADC電阻
  50. uint  ADC_V(uchar dat);       //換算ADC電壓
  51. uint  exist_VR(uchar dat);    //測量VR存在
  52. void  symmetry_VR(void);     //測量VR電阻程序
  53. void  Send_595(uchar dat);    //595發送一個字節
  54. void  DisplayScan();          //595多字節驅動數碼管靜態顯示
  55. void  Renewal();              //數碼管緩存更新
  56. //主函數
  57. void main()
  58. {
  59.         uchar RH,RL;
  60.         //初始化端口模式配置
  61.         P0M0 = 0x00;P0M1 = 0x00; //全部為準雙向口
  62.         P1M0 = 0x00;P1M1 = 0xfb; //除P1.2NC外全部高阻
  63.         P2M0 = 0x00;P2M1 = 0x00; //全部為準雙向口
  64.         P3M0 = 0x00;P3M1 = 0x00; //全部為準雙向口
  65.         P4M0 = 0x00;P4M1 = 0x00; //全部為準雙向口
  66.         P5M0 = 0x00;P5M1 = 0x00; //全部為準雙向口
  67.         P6M0 = 0x00;P6M1 = 0x00; //全部為準雙向口
  68.         P7M0 = 0x00;P7M1 = 0x00; //全部為準雙向口
  69.         Delay_ms(100);
  70.         ADC_Init();              //初始化ADC
  71.         
  72.         while(1)
  73.         {
  74.                         symmetry_VR();          //測量VR電阻
  75.                         dis_buf[0]=~(table[20]); //卜表示K
  76.                         dis_buf[1]=~(table[RinD/10%10]);
  77.                         dis_buf[2]=~(table[RinD/100%10]|0x80);//加小數點
  78.                         dis_buf[3]=~(table[RinD/1000%10]);
  79.                         DisplayScan();           //顯示阻值
  80.       if(RinD<(1250-225) || RinD>(1250+225))//12.5K+/-18% 阻值超過誤差或沒有裝VR
  81.                         {
  82.                                 LEDG=1;               //綠燈熄
  83.                                 //LEDR=0;               //紅燈亮 有缺陷
  84.                                 flag=0;               //繼續
  85.                         }
  86.                         else                     //阻值正常
  87.                         {
  88.                                 LEDG=0;               //綠燈亮 正常
  89.                                 LEDR=1;               //紅燈熄         
  90.                                 flag=1;
  91.                         }
  92. }        
  93. }

  94. //延時函數
  95. void Delay500us(void)             //500us@11.0592MHz
  96. {
  97.         unsigned char data i, j;
  98.         _nop_();
  99.         _nop_();
  100.         i = 8;
  101.         j = 43;
  102.         do
  103.         {
  104.                 while (--j);
  105.         } while (--i);
  106. }
  107. //延時函數
  108. void Delay_ms(unsigned int t)        //@11.0592MHz
  109. {
  110.         unsigned char data i, j;
  111.         while (t--)
  112.         {
  113.                 i = 15;
  114.                 j = 90;
  115.                 do
  116.                 {
  117.                         while (--j);
  118.                 } while (--i);
  119.         }
  120. }


  121. //初始化ADC
  122. void ADC_Init(void)
  123. {
  124.         P_SW2 |= 0x80;           //開擴展寄存器
  125.         ADCTIM = 0x3f;           //設置ADC內部時序
  126.         P_SW2 &= 0x7f;           //關擴展寄存器
  127.         ADCCFG = 0x2f;           //設置ADC時鐘為系統時鐘/2/16,12位結果右對齊
  128.         ADC_CONTR = 0x80;        //使能ADC模塊
  129. }
  130. //讀取ADC結果
  131. uint ADC_Read(uchar ch)
  132. {
  133.         ADC_CONTR = 0xc0|ch;           //啟動AD轉換
  134.         _nop_();                       //小延時
  135.         _nop_();
  136.         while (!(ADC_CONTR & 0x20));   //查詢ADC完成標志
  137.         ADC_CONTR &= ~0x20;            //清完成標志
  138.         return ADC_RES << 8 | ADC_RESL;//返回12位ADC結果
  139. }
  140. //ADC電阻換算公式:被測阻值=((固定分壓電阻值*AD轉換值)/(4096-AD轉換值)
  141. uint ADC_R(uchar dat)
  142. {
  143.         uint teme;
  144.         ADC_Read(dat);                 //丟掉兩次檢測
  145.         ADC_Read(dat);
  146.         VADC=ADC_Read(dat);            //讀取第x通道ADC結果
  147.         teme=(VCR*(ulong)VADC)/(4096-VADC)-30;//計算阻值(減30為IO口限流電阻)
  148.         return teme;
  149. }


復制代碼



51hei圖片_20240602124507.png (21.42 KB, 下載次數: 23)

測試電阻接線圖

測試電阻接線圖

作者: rundstedt    時間: 2024-6-5 22:56
數據溢出了唄,把數據帶進去人工計算一下就能知道哪里超范圍了。
作者: jony1122    時間: 2024-6-8 21:39
rundstedt 發表于 2024-6-5 22:56
數據溢出了唄,把數據帶進去人工計算一下就能知道哪里超范圍了。

感謝回復,換了一種電路和計算方式解決了。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩免费视频 | av在线免费网站 | 亚洲欧美精品在线 | 日韩av免费在线播放 | 日韩一级片视频 | 日韩一级黄| 黄色三级视频在线观看 | 青草视频网站 | 中文有码在线 | 成人在线国产 | 精品无人国产偷自产在线 | 成人毛片一区二区三区 | www.麻豆av| 久久福利社 | 全部免费毛片在线播放高潮 | 国产又粗又猛视频免费 | 999国产视频 | 91看片在线观看 | 国内精品一区二区三区 | 国产成人免费视频 | 黄色av免费在线观看 | 国产一区二区在线播放 | 躁躁躁日日躁 | 国产福利视频在线观看 | 天天操网站 | 精久久久 | 亚洲精品综合 | 一区二区精品在线 | 欧美一级淫片免费视频黄 | 四虎在线免费视频 | 成人高清视频在线观看 | 18精品爽国产白嫩精品 | 国产综合久久久 | www.婷婷.com | 日韩精品片 | 亚洲国产成人在线 | 成人久久网 | 日本在线一区二区三区 | 成人精品一区二区三区 | 五月婷视频 | 亚洲精品xxx |