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

標(biāo)題: 比較適合初學(xué)者自己動手仿制的電壓表 [打印本頁]

作者: dzdiy    時間: 2015-4-11 19:39
標(biāo)題: 比較適合初學(xué)者自己動手仿制的電壓表
    這是一個用STC12C2052AD單片機制作的電壓表,由電子樂屋收集整理,來源于網(wǎng)絡(luò)。A/D轉(zhuǎn)換單元用的是單片機的自己帶的,比較適合初學(xué)者自己動手仿制。單片機采用的是STC12C2052AD,4位共陽極數(shù)碼管,TL431作為電壓基準(zhǔn)。電路板采用的感光藍(lán)油制作,使用環(huán)保刻蝕劑刻蝕。整個電壓表制作容易,非常容易成功。






程序源碼:
  1. /**********************************************************************

  2. 基于STC12C4052AD單片機的0-99V數(shù)字電壓表程序

  3. P1.6口為0-5V模擬量輸入端,P1.5口連接TL431l輸出的2.5V基準(zhǔn)電源,4位串行LED數(shù)碼管顯示

  4. **********************************************************************/

  5. #include <STC/STC12C2052AD.H> //單片機頭文件

  6. #include <intrins.h> //51基本運算(包括_nop_空函數(shù))

  7. #define uchar unsigned char

  8. #define uint unsigned int

  9. #define LEDBus P3

  10. //a3.0-b3.1-c3.2-d3.3-e3.4-f3.5-g3.7-dp1.0

  11. sbit ge=P1^4;            //個位位選

  12. sbit shi=P1^3;            //十位位選

  13. sbit bai=P1^2;            //百位位選

  14. sbit qian=P1^1;            //千位位選

  15. sbit db=P1^0;

  16. char d[5];

  17. uint R,M,N;//若定義成uchar型就只能顯示2.5V以下的數(shù)值

  18. uchar code LEDTab[]={0xc0,0xf9,0x64,0x70,0x59,0x52,0x42,0xf8,0x40,0x50};//應(yīng)為沒有P3.6,所以這里管腳定義和普通的有點區(qū)別

  19. unsigned char port[4]={0xfe,0xfd,0xfb,0xf7};

  20. /*****************************************************************

  21. 函數(shù)名:毫秒級CPU延時函數(shù)

  22. 調(diào)  用:delay (?);

  23. 參  數(shù):1~65535(參數(shù)不可為0)

  24. 返回值:無

  25. 結(jié)  果:占用CPU方式延時與參數(shù)數(shù)值相同的毫秒時間

  26. 備  注:應(yīng)用于1T單片機時i<600,應(yīng)用于12T單片機時i<125

  27. /******************************************************************/

  28. void delay(uint t)

  29. {

  30. uint i;               //定義變量

  31. for(;t>0;t--)             //如果t大于0,t減1(外層循環(huán))

  32.   for(i=600;i>0;i--);         //i等于124,如果i大于0,i減1

  33. }

  34. /*******************************************************************

  35. 函數(shù)名:ADC初始化及8位A/D轉(zhuǎn)換函數(shù)

  36. 返回值:8位的ADC數(shù)據(jù)

  37. 結(jié)  果:讀出指定ADC接口的A/D轉(zhuǎn)換值,并返回數(shù)值

  38. 備  注:適用于STC12C2052AD系列單片機(必須使用STC12C2052AD.h頭文件)

  39. *******************************************************************/

  40. uchar Read (uchar CHA){

  41. uchar AD_FIN=0; //存儲A/D轉(zhuǎn)換標(biāo)志;若在函數(shù)外定義此變量則不能得到連續(xù)變化的模擬量的顯示

  42. /******以下為ADC初始化程序****************************/

  43.     CHA &= 0x07;            //選擇ADC的8個接口中的一個(0000 0111 清0高5位)

  44.     ADC_CONTR = 0x60;  //ADC轉(zhuǎn)換的速度(0XX0 0000 其中XX控制速度,請根據(jù)數(shù)據(jù)手冊設(shè)置)

  45.     _nop_();

  46.     ADC_CONTR |= CHA;       //選擇A/D當(dāng)前通道

  47.     _nop_();

  48.     ADC_CONTR |= 0x80;      //啟動A/D電源

  49.     delay(1);            //使輸入電壓達(dá)到穩(wěn)定(1ms即可?

  50. /******以下為ADC執(zhí)行程序****************************/

  51.     ADC_CONTR |= 0x08;      //啟動A/D轉(zhuǎn)換(0000 1000 令A(yù)DCS = 1)

  52.     _nop_();

  53.     _nop_();

  54.     _nop_();

  55.     _nop_();

  56.     while (AD_FIN ==0){     //等待A/D轉(zhuǎn)換結(jié)束

  57.     AD_FIN = (ADC_CONTR & 0x10); //0001 0000測試A/D轉(zhuǎn)換結(jié)束否

  58.     }

  59.     ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 關(guān)閉A/D轉(zhuǎn)換,

  60. return (ADC_DATA);          //返回A/D轉(zhuǎn)換結(jié)果(8位)

  61. }

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

  63. 顯示函數(shù)轉(zhuǎn)換函數(shù):

  64. M=模擬量采樣值,N=基準(zhǔn)電壓源采樣值(本例為2.5V),R=模擬量輸入值(待顯示值)

  65. N=256*2.5/Vcc;變形后得Vcc=256*2.5/N; 代入M=256*R/Vcc;得到M=R*N/2.5;變形后得R=M*2.5/N

  66. 1為輸入端分壓比。

  67. ******************************************************************/

  68. void transfer(void){

  69. M=Read(6);//P1.6口模擬量轉(zhuǎn)換

  70. N=Read(5);//P1.5口2.5V基準(zhǔn)電壓源采樣(轉(zhuǎn)換)

  71. R=((M*2.5)/N)*9.31*1000;//輸入模擬量換算并放大1000倍;

  72. /***以下為3位顯示轉(zhuǎn)換***/

  73. d[3]=R/1000;

  74. R=R%1000;

  75. d[2]=R/100;

  76. R=R%100;

  77. d[1]=R/10;

  78. d[0]=R%10;

  79. }

  80. /******************************************************************

  81. 函數(shù)功能:顯示子程序

  82. ********************************************************************/

  83. void xian_shi (void)

  84. {

  85.    P1=0xfe;        //P1.3引腳輸出低電平

  86.    P3=LEDTab[d[0]];          //顯示個位

  87.    delay(1);

  88.    P1=0xfd;       //P1.2引腳輸出低電平

  89.    P3=LEDTab[d[1]];         //顯示十位

  90.     delay(1);

  91.     db=0;

  92.    P1=0xfb;       //P1.1引腳輸出低電平

  93.    P3=LEDTab[d[2]];         //顯示百位

  94.    

  95.     delay(1);

  96.    if (LEDTab[3]!=0)

  97.    P1=0xf7;       //P1.0引腳輸出低電平

  98.    P3=LEDTab[d[3]];         //顯示千位

  99.    db=0;

  100.     delay(1);

  101.     P1=0xff;     //關(guān)閉所有數(shù)碼管

  102.   

  103. }

  104. /******************************************************************

  105. 函數(shù)名:主函數(shù)

  106. 調(diào)  用:無

  107. 參  數(shù):無

  108. 返回值:無

  109. 結(jié)  果:程序開始處,無限循環(huán)

  110. 備  注:

  111. ******************************************************************/

  112. void main (void)

  113. {

  114. P1M0 = 0x60; //P1.0/P1.1:0000 0011(高阻)//注意:更改ADC通道時須同時將對應(yīng)的IO接口修改為高阻輸入。

  115. P1M1 = 0x00; //P1.0/P1.1:0000 0000

  116. while(1){

  117. uchar i;

  118. delay(1);

  119. i++;

  120. if (i==30)

  121. {

  122. transfer();

  123. i=0;

  124. }

  125. xian_shi();

  126. //delay(10);

  127. }

  128. }
復(fù)制代碼




作者: 1300811688    時間: 2016-3-24 15:46
很好,我最近想在開關(guān)電源的輸出端添加一個單片機顯示電壓電流的功能,學(xué)習(xí)了。
作者: 越快樂越墮落    時間: 2016-6-18 22:21
為什么我做了好幾次,都是只顯示最后一位0???而且無法測量,我把75K改成了30K的,75K貌似不合理。
作者: XDDZ1013    時間: 2017-5-12 22:29
數(shù)碼管用共陰極的,怎么改
作者: 15895149620    時間: 2017-5-13 10:28
樓主,求發(fā)源文件,仿真
作者: 尹德文    時間: 2017-11-30 19:54
我做的只能顯示三位數(shù),不知什么原因
作者: bhjyqjs    時間: 2018-2-7 15:20
準(zhǔn)確度如何?穩(wěn)定性怎樣?總覺得實用性欠佳
作者: nklug    時間: 2018-3-5 10:16
無分壓電阻,只能測到5V以下(單片機工作電壓以下)。大約百分之二的誤差。
作者: ltp    時間: 2018-3-16 13:22
謝謝分享!
作者: 干就得了    時間: 2018-3-19 14:32
樓主能不能測負(fù)壓
作者: ty417502873    時間: 2018-11-24 05:01
學(xué)習(xí)一下。
作者: zpz181818    時間: 2019-2-9 11:27
贊,非常好!
作者: 太陽黑子1    時間: 2020-2-1 08:18
很好呀!學(xué)習(xí)學(xué)習(xí)!
作者: blackstar    時間: 2020-2-2 18:50
XDDZ1013 發(fā)表于 2017-5-12 22:29
數(shù)碼管用共陰極的,怎么改

程序里改下就好,段碼前加個“~”取反就行了
作者: 195470880    時間: 2020-5-14 19:07
謝謝樓主分享!
作者: 13566101057    時間: 2020-9-8 22:48
blackstar 發(fā)表于 2020-2-2 18:50
程序里改下就好,段碼前加個“~”取反就行了

我一直都是慢慢比劃著改......
作者: dj3365191    時間: 2020-9-10 13:34
樓主你好,這個程序如果要以百分比的形式顯示電量應(yīng)該怎樣修改?謝謝
作者: bsqpcb    時間: 2020-9-15 23:37
為什么你可以用INT可以計算小數(shù),   我得用浮點計算呢
作者: lhpm641    時間: 2021-5-15 21:53
請教下9.31是怎么計算出來的,還有為什么要乘以1000?謝謝
作者: fmdpj    時間: 2022-6-16 15:14
樓主你好!
Keli編譯出錯是什么原因?

Build target 'Target 1'
compiling 單片機電壓表.c...
單片機電壓表.c(10): warning C318: can't open file 'STC12C2052AD.H'
單片機電壓表.C(21): error C202: 'P3': undefined identifier
單片機電壓表.C(23): error C202: 'P3': undefined identifier
單片機電壓表.C(25): error C202: 'P3': undefined identifier
單片機電壓表.C(27): error C202: 'P3': undefined identifier
單片機電壓表.C(29): error C202: 'P3': undefined identifier
單片機電壓表.C(87): error C202: 'ADC_CONTR': undefined identifier




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品一区二区三区在线 | 国产在线一区二区 | www免费视频 | 中文字幕免费视频 | www.久久.com| 久久国产精品99久久久久 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 精品免费视频 | 久久久www成人免费无遮挡大片 | 国产伊人久久久 | 色婷婷综合久久久中字幕精品久久 | 一级片av | 欧美影院 | 青青草视频网 | 最新国产视频 | www.操com | 国产精品久久国产精品久久 | 女同av亚洲女人天堂 | 中文字幕亚洲视频 | 亚洲黄色一级 | 中文字幕韩在线第一页 | 香蕉久久a毛片 | 香蕉视频91| 国产精品视频在线播放 | 国产成人精品免费视频大全最热 | 正在播放国产精品 | 国产探花在线精品一区二区 | 99成人| 一级毛片视频 | 久久这里只有 | 亚洲欧美日韩成人在线 | 在线视频亚洲 | 日韩欧美大片 | 成人av免费播放 | 香蕉超碰 | 日韩1区| 久久免费精品视频 | 请别相信他免费喜剧电影在线观看 | 日韩手机在线视频 | 一级欧美一级日韩片免费观看 | 久久在线免费 |