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

標題: 簡單易制作的0-30VSTC單片機數字電壓表 [打印本頁]

作者: dzdiy    時間: 2015-4-11 18:28
標題: 簡單易制作的0-30VSTC單片機數字電壓表
    這塊簡單易制作的0-30VSTC單片機數字電壓表,被測電壓經限流電阻接到AD檢測端并由分流電阻分流,讀出8位(256)的AD數據,由AD值計算出AD端電壓,即分流點電壓,由此電壓計算出分流電流,再由此電流計算出輸入電壓。使用STC12C5204AD單片機,P0.0-P0.3 共陰數碼管位、P2 為共陰數碼管段a-g dp,P0、P2 設置為推挽輸出,段輸出加限流電阻,AD為8位,計算方法:5/256=0.0195312V,分流電阻為實測阻值。AD值*0.0195312v/對地分流電阻,算出分流電流,然后用分流電流*分流電阻與限流電阻之和即為要顯示的輸入電壓值,業余使用,精度已經夠用了。STC12C5204AD頭文件 網上多的是,大家搜一下就會找到的,其中涉及到端口設置的地方大家對照芯片手冊更正。

簡單易制作的0-30VSTC單片機數字電壓表源程序:
  1. #include <STC12C52.H>  //STC12C5204AD頭文件

  2. #include <intrins.h>   //_nop_();

  3. #define uchar unsigned char

  4. #define uint  unsigned int


  5. //sfr ADC_CONTR=0XBC;//adc使能位.ADC電源控制位

  6. sfr ADC_RES=0XBD;// adc數據高八位,即ADC值

  7. sfr P1ASF=0X9D;//P1各端口ADC使能端

  8. uchar led_bcd[]={0x3F,/*0*/  //共陰數碼管

  9.           0x06,/*1*/

  10.           0x5B,/*2*/

  11.           0x4F,/*3*/

  12.           0x66,/*4*/

  13.           0x6D,/*5*/

  14.           0x7D,/*6*/

  15.           0x07,/*7*/

  16.           0x7F,/*8*/

  17.           0x6F,/*9*/

  18.     0x00,/* */

  19.     0x7c /*b*/

  20.     }

  21.     ,ad_data

  22.     ;

  23. uint data dis[5]={0x00,0x00,0x00,0x00,0x00},ZZ; //定義四個顯示數據單元和一個數據存儲單元

  24. //dis[4,3,2,1,5]  顯示:12.34   5為存儲單元


  25. /*******************************************************************/

  26. /*  延時子程序                                                                                                                                 */

  27. /*                                                                                                                  */

  28. /*                                                                                                                                  */

  29. /*******************************************************************/

  30. void delay(uint z)    //延時子函數

  31. {  

  32.    uchar de1,de2;

  33.   for(de1=z;de1>0;de1--)

  34.   for(de2=100;de2>0;de2--);  

  35. }

  36. /*******************************************************/

  37. //顯示子函數 display(h1,h2,h3,h4)

  38. //h1,h2,h3,h4 為四位LED數碼管顯示變量

  39. //

  40. //

  41. //

  42. /*******************************************************/

  43. void display(uchar h1,uchar h2,uchar s1,uchar s2)   ////LED顯示函數(參數:LED1,LED2,LED3,LED4)

  44. {


  45. // 第一個數碼管顯示數據

  46. if(h1==0x3f) h1=0x00;   //0消隱語句

  47. P2=h1;

  48.   //delay(2);

  49. P00=0;

  50.   delay(2);   //參數2-10   數值大LED亮度高但閃爍感強,數值小LED亮度低,但閃爍感小.

  51. P2=0X00;

  52. P00=1;

  53. /*******************************************************/

  54. // 第二個數碼管顯示數據

  55. P2=h2|0x80;

  56.   //delay(2);

  57. P01=0;

  58.   delay(2);  //參數2-10   數值大LED亮度高但閃爍感強,數值小LED亮度低,但閃爍感小.

  59. P2=0X00;

  60. P01=1;

  61. //delay(5);

  62. /*******************************************************/

  63. // 第三個數碼管顯示數據


  64. P2=s1;

  65.   //delay(2);

  66. P02=0;

  67.   delay(2); //參數2-10   數值大LED亮度高但閃爍感強,數值小LED亮度低,但閃爍感小.

  68.   P2=0X00;

  69.     P02=1;

  70. // delay(5);

  71. /*******************************************************/

  72. // 第四個數碼管顯示數據

  73. P2=s2;

  74.   //delay(2);

  75. P03=0;

  76.   delay(2); //參數2-10   數值大LED亮度高但閃爍感強,數值小LED亮度低,但閃爍感小.

  77.   P2=0X00;

  78. P03=1;


  79. //delay(5);


  80. }

  81. void init()//系統初始化函數

  82. {

  83. P2M1=0Xff; //強推挽   推動a-g dp

  84. P2M0=0X00; //強推挽   推動a-g dp

  85. P0M1=0X0f; //強推挽   推動位

  86. P0M0=0X00; //強推挽   推動位

  87. P0=0XFF;   //初始化

  88. P2=0;    //初始化

  89. /***定時器0初始化設置*****/  

  90. TMOD = 0x01;

  91.     TH0 = 0xFC;  //初值1ms

  92.     TL0 = 0x18;  //初值1ms

  93.     EA = 1;   //開總中斷

  94.     ET0 = 1;  //定時器0中斷打開

  95.     TR0 = 1;  //打開定時器 開始計時

  96. /*************************/

  97. ZZ=0;

  98. }

  99. void initADC()  //AD初始化

  100. {

  101. P1ASF=0x01;//只使用P1.0端口做為ADC輸入端.

  102. ADC_RES=0;//ADC數據寄存器清零

  103. ADC_CONTR=ADC_POWER|ADC_SPEEDLL;  //打開ADC開關并設置 轉換速率詳見STC12C52.H

  104. delay(2);  //打開ADC并延時.

  105. }

  106. uchar readADC()   //讀AD

  107. {

  108. ADC_CONTR=ADC_POWER|ADC_SPEEDLL|0|ADC_START;

  109. _nop_();

  110. _nop_();

  111. _nop_();

  112. _nop_();

  113. while(!(ADC_CONTR&ADC_FLAG));//等待轉換完成標志

  114. ADC_CONTR&=~ADC_FLAG;//close ADC

  115. return ADC_RES;//返回ADC值.

  116. }

  117. void main()

  118. {

  119. init();

  120. initADC();//初始化ADC

  121. ad_data=readADC();//開機轉換

  122. while(1)

  123. {

  124.   float j;

  125.   uchar ad_data;

  126.   while(ZZ>=500) //500毫秒讀一次ADC

  127.   {

  128.    ad_data=readADC();//讀入ADC數據

  129.    ZZ=0;

  130.   }

  131.   j=ad_data*19.5312;//由AD數據*19.5312(放大1000倍)=分流后的電壓

  132.   j=j/9890; //j(電壓)/接地電阻(實測)9890歐

  133.   j=j*60190;//j(電流)*(輸入限流電阻(實測)60190歐+接地電阻(實測)9890歐) 計算出實際輸入電壓 如果使用高精度電阻,則直接輸入電阻值

  134.   dis[4]=j/1000;

  135.   dis[3]=dis[4]/10;

  136.   dis[2]=dis[4]%10;

  137.   //h=(h-(dis[3]*10+dis[2]))*100;

  138.   dis[4]=j/10-dis[4]*100;

  139.   //dis[4]=j%100;//小數位第一位

  140.   dis[1]=dis[4]/10;

  141.   dis[0]=dis[4]%10;//小數位第二位

  142.   //delay(10000);

  143. }

  144. }

  145. void Timer0Interrupt(void) interrupt 1

  146. {

  147.     ZZ++;   //AD讀取間隔時間控制

  148. TH0 = 0xFC;

  149.     TL0 = 0x18;

  150. display(led_bcd[dis[3]],led_bcd[dis[2]],led_bcd[dis[1]],led_bcd[dis[0]]);

  151.    }
復制代碼





作者: 騰飛的龍    時間: 2015-8-20 17:12
找不到STC12C5204ad.h的頭文件,來源分享出來嗎?謝謝
作者: yanchen    時間: 2015-12-23 15:58
要用LCD顯示
作者: 人工智能威力    時間: 2017-5-4 15:15
很強大
作者: XDDZ1013    時間: 2017-6-16 20:53
謝謝分享
作者: qch4223565    時間: 2017-10-12 08:54
謝謝分享
作者: XFH2008    時間: 2018-1-20 10:33
Build target 'Target 1'
compiling 30vdyb.c...
30VDYB.C(53): error C202: 'P00': undefined identifier
30VDYB.C(56): error C202: 'P00': undefined identifier
30VDYB.C(66): error C202: 'P01': undefined identifier
30VDYB.C(72): error C202: 'P01': undefined identifier
30VDYB.C(85): error C202: 'P02': undefined identifier
30VDYB.C(91): error C202: 'P02': undefined identifier
30VDYB.C(103): error C202: 'P03': undefined identifier
30VDYB.C(109): error C202: 'P03': undefined identifier
30VDYB.C(161): error C202: 'ADC_POWER': undefined identifier
30VDYB.C(171): error C202: 'ADC_POWER': undefined identifier
30VDYB.C(181): error C202: 'ADC_FLAG': undefined identifier
30VDYB.C(183): error C202: 'ADC_FLAG': undefined identifier
Target not created
作者: GUOXUAN    時間: 2018-1-20 22:27
可能是太普通了吧,總覺得8位的ADC沒什么用,做做課題,試驗而已,不能用來做產品,做產品要14或16位還差不多.
作者: 13680172313    時間: 2018-5-27 09:16
我想問一下
j=ad_data*19.5312;//由AD數據*19.5312(放大1000倍)=分流后的電壓
這個19.5312是怎么來的
作者: TKJT    時間: 2018-6-4 07:37
感謝分享
作者: 留住這一刻2014    時間: 2018-11-24 12:34
19.5312為什么要放大1000倍?
作者: qq863964014    時間: 2018-12-13 20:48
留住這一刻2014 發表于 2018-11-24 12:34
19.5312為什么要放大1000倍?

要顯示三位小數
作者: ty417502873    時間: 2018-12-26 23:04
13680172313 發表于 2018-5-27 09:16
我想問一下
j=ad_data*19.5312;//由AD數據*19.5312(放大1000倍)=分流后的電壓
這個19.5312是怎么來的

這個是分辨率吧。
作者: fmdpj    時間: 2022-7-5 11:38
Build target 'Target 1'
compiling 5204四位.c...
5204四位.c(1): warning C318: can't open file 'STC12C52.H'
5204四位.C(96): error C202: 'P2': undefined identifier
5204四位.C(100): error C202: 'P00': undefined identifier
5204四位.C(104): error C202: 'P2': undefined identifier
5204四位.C(106): error C202: 'P00': undefined identifier
5204四位.C(112): error C202: 'P2': undefined identifier
5204四位.C(116): error C202: 'P01': undefined identifier
5204四位.C(120): error C202: 'P2': undefined identifier
5204四位.C(122): error C202: 'P01': undefined identifier
5204四位.C(131): error C202: 'P2': undefined identifier
5204四位.C(135): error C202: 'P02': undefined identifier
5204四位.C(139): error C202: 'P2': undefined identifier
5204四位.C(141): error C202: 'P02': undefined identifier
5204四位.C(149): error C202: 'P2': undefined identifier
5204四位.C(153): error C202: 'P03': undefined identifier
5204四位.C(157): error C202: 'P2': undefined identifier
5204四位.C(159): error C202: 'P03': undefined identifier
5204四位.C(171): error C202: 'P2M1': undefined identifier
5204四位.C(173): error C202: 'P2M0': undefined identifier
5204四位.C(175): error C202: 'P0M1': undefined identifier
5204四位.C(177): error C202: 'P0M0': undefined identifier
5204四位.C(179): error C202: 'P0': undefined identifier
5204四位.C(181): error C202: 'P2': undefined identifier
5204四位.C(185): error C202: 'TMOD': undefined identifier
5204四位.C(187): error C202: 'TH0': undefined identifier
5204四位.C(189): error C202: 'TL0': undefined identifier
5204四位.C(191): error C202: 'EA': undefined identifier
5204四位.C(193): error C202: 'ET0': undefined identifier
5204四位.C(195): error C202: 'TR0': undefined identifier
5204四位.C(211): error C202: 'ADC_CONTR': undefined identifier
5204四位.C(221): error C202: 'ADC_CONTR': undefined identifier
5204四位.C(231): error C202: 'ADC_CONTR': undefined identifier
5204四位.C(233): error C202: 'ADC_CONTR': undefined identifier
5204四位.C(301): error C202: 'TH0': undefined identifier
5204四位.C(303): error C202: 'TL0': undefined identifier
Target not created
作者: qfg138    時間: 2023-2-16 09:56
不做電流顯示嗎
作者: user2402167    時間: 2023-9-23 01:33
驗證一下
作者: 13869300    時間: 2023-9-25 16:36
要是能測電壓0-100V,能顯示電流功率就好了。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 在线播放h| 国产高清视频在线 | 日韩中文字幕在线播放 | 免费看黄色录像 | 成人视屏在线观看 | www.色综合 | 久久精品美女 | 欧美三级在线视频 | 青青草国产成人av片免费 | 特一级黄色片 | 国产黄视频在线观看 | 国产美女一区 | 视频一区在线观看 | 欧美午夜精品一区二区三区 | 波多野结衣乳巨码无在线观看 | 久久一级视频 | 国产精品久久久999 成人在线国产 | 久久精品视频一区二区 | 久久综合一区 | 国产aⅴ爽av久久久久成人 | a毛片在线观看 | 久久久久人 | 欧美色综合 | 免费爱爱网站 | 五月婷婷色综合 | 天堂视频在线免费观看 | 欧美日韩一区二区三区四区 | 亚州精品视频 | 黄色成人在线视频 | 99久久婷婷国产综合精品草原 | 懂色av一区二区夜夜嗨 | 天堂网久久 | 日韩福利一区 | yy6080午夜| 精品国产一区二区三 | www.com国产| 日韩一级黄色片 | 国产欧美日韩在线观看 | 欧美日韩在线看 | 视频一区在线观看 | 青青草在线观看视频 |