找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

簡單易制作的0-30VSTC單片機(jī)數(shù)字電壓表

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:76686 發(fā)表于 2015-4-11 18:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
    這塊簡單易制作的0-30VSTC單片機(jī)數(shù)字電壓表,被測電壓經(jīng)限流電阻接到AD檢測端并由分流電阻分流,讀出8位(256)的AD數(shù)據(jù),由AD值計(jì)算出AD端電壓,即分流點(diǎn)電壓,由此電壓計(jì)算出分流電流,再由此電流計(jì)算出輸入電壓。使用STC12C5204AD單片機(jī),P0.0-P0.3 共陰數(shù)碼管位、P2 為共陰數(shù)碼管段a-g dp,P0、P2 設(shè)置為推挽輸出,段輸出加限流電阻,AD為8位,計(jì)算方法:5/256=0.0195312V,分流電阻為實(shí)測阻值。AD值*0.0195312v/對地分流電阻,算出分流電流,然后用分流電流*分流電阻與限流電阻之和即為要顯示的輸入電壓值,業(yè)余使用,精度已經(jīng)夠用了。STC12C5204AD頭文件 網(wǎng)上多的是,大家搜一下就會(huì)找到的,其中涉及到端口設(shè)置的地方大家對照芯片手冊更正。

簡單易制作的0-30VSTC單片機(jī)數(shù)字電壓表源程序:
  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數(shù)據(jù)高八位,即ADC值

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

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

  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; //定義四個(gè)顯示數(shù)據(jù)單元和一個(gè)數(shù)據(jù)存儲(chǔ)單元

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


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

  26. /*  延時(shí)子程序                                                                                                                                 */

  27. /*                                                                                                                  */

  28. /*                                                                                                                                  */

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

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

  31. {  

  32.    uchar de1,de2;

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

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

  35. }

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

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

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

  39. //

  40. //

  41. //

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

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

  44. {


  45. // 第一個(gè)數(shù)碼管顯示數(shù)據(jù)

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

  47. P2=h1;

  48.   //delay(2);

  49. P00=0;

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

  51. P2=0X00;

  52. P00=1;

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

  54. // 第二個(gè)數(shù)碼管顯示數(shù)據(jù)

  55. P2=h2|0x80;

  56.   //delay(2);

  57. P01=0;

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

  59. P2=0X00;

  60. P01=1;

  61. //delay(5);

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

  63. // 第三個(gè)數(shù)碼管顯示數(shù)據(jù)


  64. P2=s1;

  65.   //delay(2);

  66. P02=0;

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

  68.   P2=0X00;

  69.     P02=1;

  70. // delay(5);

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

  72. // 第四個(gè)數(shù)碼管顯示數(shù)據(jù)

  73. P2=s2;

  74.   //delay(2);

  75. P03=0;

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

  77.   P2=0X00;

  78. P03=1;


  79. //delay(5);


  80. }

  81. void init()//系統(tǒng)初始化函數(shù)

  82. {

  83. P2M1=0Xff; //強(qiáng)推挽   推動(dòng)a-g dp

  84. P2M0=0X00; //強(qiáng)推挽   推動(dòng)a-g dp

  85. P0M1=0X0f; //強(qiáng)推挽   推動(dòng)位

  86. P0M0=0X00; //強(qiáng)推挽   推動(dòng)位

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

  88. P2=0;    //初始化

  89. /***定時(shí)器0初始化設(shè)置*****/  

  90. TMOD = 0x01;

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

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

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

  94.     ET0 = 1;  //定時(shí)器0中斷打開

  95.     TR0 = 1;  //打開定時(shí)器 開始計(jì)時(shí)

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

  97. ZZ=0;

  98. }

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

  100. {

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

  102. ADC_RES=0;//ADC數(shù)據(jù)寄存器清零

  103. ADC_CONTR=ADC_POWER|ADC_SPEEDLL;  //打開ADC開關(guān)并設(shè)置 轉(zhuǎn)換速率詳見STC12C52.H

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

  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));//等待轉(zhuǎn)換完成標(biāo)志

  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();//開機(jī)轉(zhuǎn)換

  122. while(1)

  123. {

  124.   float j;

  125.   uchar ad_data;

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

  127.   {

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

  129.    ZZ=0;

  130.   }

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

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

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

  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;//小數(shù)位第一位

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

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

  142.   //delay(10000);

  143. }

  144. }

  145. void Timer0Interrupt(void) interrupt 1

  146. {

  147.     ZZ++;   //AD讀取間隔時(shí)間控制

  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.    }
復(fù)制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏27 分享淘帖 頂1 踩1

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:79544 發(fā)表于 2015-8-20 17:12 | 只看該作者
找不到STC12C5204ad.h的頭文件,來源分享出來嗎?謝謝
回復(fù)

使用道具 舉報(bào)

板凳
ID:100141 發(fā)表于 2015-12-23 15:58 | 只看該作者
要用LCD顯示
回復(fù)

使用道具 舉報(bào)

地板
ID:195950 發(fā)表于 2017-5-4 15:15 | 只看該作者
很強(qiáng)大
回復(fù)

使用道具 舉報(bào)

5#
ID:200118 發(fā)表于 2017-6-16 20:53 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

6#
ID:238760 發(fā)表于 2017-10-12 08:54 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

7#
ID:153371 發(fā)表于 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
回復(fù)

使用道具 舉報(bào)

8#
ID:249545 發(fā)表于 2018-1-20 22:27 | 只看該作者
可能是太普通了吧,總覺得8位的ADC沒什么用,做做課題,試驗(yàn)而已,不能用來做產(chǎn)品,做產(chǎn)品要14或16位還差不多.

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

9#
ID:334473 發(fā)表于 2018-5-27 09:16 | 只看該作者
我想問一下
j=ad_data*19.5312;//由AD數(shù)據(jù)*19.5312(放大1000倍)=分流后的電壓
這個(gè)19.5312是怎么來的
回復(fù)

使用道具 舉報(bào)

10#
ID:344278 發(fā)表于 2018-6-4 07:37 來自手機(jī) | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

11#
ID:398477 發(fā)表于 2018-11-24 12:34 來自手機(jī) | 只看該作者
19.5312為什么要放大1000倍?
回復(fù)

使用道具 舉報(bào)

12#
ID:410591 發(fā)表于 2018-12-13 20:48 | 只看該作者
留住這一刻2014 發(fā)表于 2018-11-24 12:34
19.5312為什么要放大1000倍?

要顯示三位小數(shù)
回復(fù)

使用道具 舉報(bào)

13#
ID:378732 發(fā)表于 2018-12-26 23:04 | 只看該作者
13680172313 發(fā)表于 2018-5-27 09:16
我想問一下
j=ad_data*19.5312;//由AD數(shù)據(jù)*19.5312(放大1000倍)=分流后的電壓
這個(gè)19.5312是怎么來的

這個(gè)是分辨率吧。
回復(fù)

使用道具 舉報(bào)

14#
ID:598951 發(fā)表于 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
回復(fù)

使用道具 舉報(bào)

15#
ID:703081 發(fā)表于 2023-2-16 09:56 | 只看該作者
不做電流顯示嗎
回復(fù)

使用道具 舉報(bào)

16#
ID:537530 發(fā)表于 2023-9-23 01:33 | 只看該作者
驗(yàn)證一下
回復(fù)

使用道具 舉報(bào)

17#
ID:227484 發(fā)表于 2023-9-25 16:36 | 只看該作者
要是能測電壓0-100V,能顯示電流功率就好了。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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