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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

單片機(jī)測(cè)電阻阻值程序出現(xiàn)的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本程序使用STC8H8K64U單片機(jī)
測(cè)量0-100K的阻值時(shí),讀數(shù)沒什么問題,但是測(cè)100K以上阻值時(shí),顯示結(jié)果不正常。
把電路中51K的阻值換成300K阻值,測(cè)試結(jié)果還是不行。

出現(xiàn)這種情況是那方面的問題呢。
以下是與測(cè)試阻值有關(guān)的程序。
  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;           //測(cè)阻1
  13. sbit ADKB=P1^1;           //測(cè)阻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;  //數(shù)據(jù)
  20. sbit HC595_SRCLK = P0^1;  //移位時(shí)鐘
  21. sbit HC595_RCLK  = P0^2;  //鎖存

  22. uchar code table[]={      //共陰數(shù)碼管段碼標(biāo)準(zhǔn)字庫(kù)
  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;                  //測(cè)電壓A
  32. uint  VinB;                  //測(cè)電壓B
  33. uint  RinD;                  //測(cè)電阻
  34. uint  VADC;                  //ADC轉(zhuǎn)換結(jié)果
  35. uint  vector;                //向量
  36. bit   flag=0;                //標(biāo)志
  37. bit   flag1=0;               //
  38. bit   allow;                 //允許
  39. uint  count;                 //計(jì)數(shù)
  40. uint  count1;
  41. uint  count2;
  42. uint  VR;


  43. /*本地子函數(shù)*/
  44. void  Delay500us(void);       //延時(shí)函數(shù)
  45. void  Delay_ms(uint t);       //延時(shí)函數(shù)
  46. void  Timer0_Init(void);      //初始化定時(shí)器0
  47. void  ADC_Init(void);         //初始化ADC
  48. uint  ADC_Read(uchar ch);     //讀取ADC結(jié)果
  49. uint  ADC_R(uchar dat);       //換算ADC電阻
  50. uint  ADC_V(uchar dat);       //換算ADC電壓
  51. uint  exist_VR(uchar dat);    //測(cè)量VR存在
  52. void  symmetry_VR(void);     //測(cè)量VR電阻程序
  53. void  Send_595(uchar dat);    //595發(fā)送一個(gè)字節(jié)
  54. void  DisplayScan();          //595多字節(jié)驅(qū)動(dòng)數(shù)碼管靜態(tài)顯示
  55. void  Renewal();              //數(shù)碼管緩存更新
  56. //主函數(shù)
  57. void main()
  58. {
  59.         uchar RH,RL;
  60.         //初始化端口模式配置
  61.         P0M0 = 0x00;P0M1 = 0x00; //全部為準(zhǔn)雙向口
  62.         P1M0 = 0x00;P1M1 = 0xfb; //除P1.2NC外全部高阻
  63.         P2M0 = 0x00;P2M1 = 0x00; //全部為準(zhǔn)雙向口
  64.         P3M0 = 0x00;P3M1 = 0x00; //全部為準(zhǔn)雙向口
  65.         P4M0 = 0x00;P4M1 = 0x00; //全部為準(zhǔn)雙向口
  66.         P5M0 = 0x00;P5M1 = 0x00; //全部為準(zhǔn)雙向口
  67.         P6M0 = 0x00;P6M1 = 0x00; //全部為準(zhǔn)雙向口
  68.         P7M0 = 0x00;P7M1 = 0x00; //全部為準(zhǔn)雙向口
  69.         Delay_ms(100);
  70.         ADC_Init();              //初始化ADC
  71.         
  72.         while(1)
  73.         {
  74.                         symmetry_VR();          //測(cè)量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);//加小數(shù)點(diǎn)
  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;               //繼續(xù)
  85.                         }
  86.                         else                     //阻值正常
  87.                         {
  88.                                 LEDG=0;               //綠燈亮 正常
  89.                                 LEDR=1;               //紅燈熄         
  90.                                 flag=1;
  91.                         }
  92. }        
  93. }

  94. //延時(shí)函數(shù)
  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. //延時(shí)函數(shù)
  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;           //開擴(kuò)展寄存器
  125.         ADCTIM = 0x3f;           //設(shè)置ADC內(nèi)部時(shí)序
  126.         P_SW2 &= 0x7f;           //關(guān)擴(kuò)展寄存器
  127.         ADCCFG = 0x2f;           //設(shè)置ADC時(shí)鐘為系統(tǒng)時(shí)鐘/2/16,12位結(jié)果右對(duì)齊
  128.         ADC_CONTR = 0x80;        //使能ADC模塊
  129. }
  130. //讀取ADC結(jié)果
  131. uint ADC_Read(uchar ch)
  132. {
  133.         ADC_CONTR = 0xc0|ch;           //啟動(dòng)AD轉(zhuǎn)換
  134.         _nop_();                       //小延時(shí)
  135.         _nop_();
  136.         while (!(ADC_CONTR & 0x20));   //查詢ADC完成標(biāo)志
  137.         ADC_CONTR &= ~0x20;            //清完成標(biāo)志
  138.         return ADC_RES << 8 | ADC_RESL;//返回12位ADC結(jié)果
  139. }
  140. //ADC電阻換算公式:被測(cè)阻值=((固定分壓電阻值*AD轉(zhuǎn)換值)/(4096-AD轉(zhuǎn)換值)
  141. uint ADC_R(uchar dat)
  142. {
  143.         uint teme;
  144.         ADC_Read(dat);                 //丟掉兩次檢測(cè)
  145.         ADC_Read(dat);
  146.         VADC=ADC_Read(dat);            //讀取第x通道ADC結(jié)果
  147.         teme=(VCR*(ulong)VADC)/(4096-VADC)-30;//計(jì)算阻值(減30為IO口限流電阻)
  148.         return teme;
  149. }


復(fù)制代碼



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

測(cè)試電阻接線圖

測(cè)試電阻接線圖
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:879809 發(fā)表于 2024-6-5 22:56 | 只看該作者
數(shù)據(jù)溢出了唄,把數(shù)據(jù)帶進(jìn)去人工計(jì)算一下就能知道哪里超范圍了。
回復(fù)

使用道具 舉報(bào)

板凳
ID:1045846 發(fā)表于 2024-6-8 21:39 | 只看該作者
rundstedt 發(fā)表于 2024-6-5 22:56
數(shù)據(jù)溢出了唄,把數(shù)據(jù)帶進(jìn)去人工計(jì)算一下就能知道哪里超范圍了。

感謝回復(fù),換了一種電路和計(jì)算方式解決了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区av | 国产精品美女www | 国产九九精品视频 | 99精品热视频 | 国内久久 | 激情久久久久 | 毛片高清 | 亚洲国产成人av好男人在线观看 | 欧美中文字幕在线观看 | 一区二区三区国产精品 | heyzo在线| 久色网| 黄色大片毛片 | 精品成人av| 亚洲精品福利视频 | 亚洲成人毛片 | 欧美一区2区三区4区公司 | 精品乱码一区二区 | 成人网视频 | 国产成人精品久久 | 天天综合网天天综合 | 国产超碰人人爽人人做人人爱 | 91网在线观看 | 亚洲免费视频网站 | 美国a级毛片免费视频 | 国产美女一区二区三区 | 国产成人高清 | 国产在线高清 | 99精品欧美一区二区三区 | 久久91精品国产一区二区三区 | 国产成人免费视频网站视频社区 | 国产欧美一区二区三区免费 | 91精品国产综合久久久久久丝袜 | 色综合一区二区 | 国产又色又爽又黄又免费 | 刘亦菲国产毛片bd | 久久一区二区免费视频 | 亚洲国产一区在线 | 亚洲成人精选 | 99re66在线观看精品热 | 中文字幕一区二区三区在线观看 |