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

QQ登錄

只需一步,快速開(kāi)始

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

3位數(shù)碼管電壓表 pcb 原理圖 程序都有

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

//3位數(shù)碼電壓表
//電壓范圍:0-50V
//原理:比較器做為ADC
//共陰數(shù)碼管
//5V穩(wěn)定性越高,測(cè)量的電壓越準(zhǔn)確

PCB用PADS打開(kāi).7z (53.35 KB, 下載次數(shù): 461)

程序如下:
  1. //3位數(shù)碼電壓表
  2. //電壓范圍:0-50V
  3. //原理:比較器做為ADC
  4. //共陰數(shù)碼管
  5. //5V穩(wěn)定性越高,測(cè)量的電壓越準(zhǔn)確
  6. #include "stc15w204s.h"
  7. #include "Led_can.h"
  8. typedef unsigned long u32;  //32位無(wú)符號(hào)整型數(shù)
  9. typedef unsigned int u16;  //16位無(wú)符號(hào)整型數(shù)
  10. typedef unsigned char u8;  //8位無(wú)符號(hào)整型數(shù)

  11. #define MAIN_Fosc                22118400        //定義主時(shí)鐘
  12. #define        ADC_SCALE                50000                //ADC滿量程, 根據(jù)需要設(shè)置



  13. /*************        本地常量聲明        **************/

  14. //CMPCR1
  15. #define        CMPEN        0x80        //1: 允許比較器, 0: 禁止,關(guān)閉比較器電源
  16. #define        CMPIF        0x40        //比較器中斷標(biāo)志, 包括上升沿或下降沿中斷, 軟件清0
  17. #define        PIE                0x20        //1: 比較結(jié)果由0變1, 產(chǎn)生上升沿中斷
  18. #define        NIE                0x10        //1: 比較結(jié)果由1變0, 產(chǎn)生下降沿中斷
  19. #define        PIS                0x08        //輸入正極性選擇, 0: 選擇內(nèi)部P5.5做正輸入,           1: 由ADCIS[2:0]所選擇的ADC輸入端做正輸入.
  20. #define        NIS                0x04        //輸入負(fù)極性選擇, 0: 選擇內(nèi)部BandGap電壓BGv做負(fù)輸入, 1: 選擇外部P5.4做輸入.
  21. #define        CMPOE        0x02        //1: 允許比較結(jié)果輸出到P1.2, 0: 禁止.
  22. #define        CMPRES        0x01        //比較結(jié)果, 1: CMP+電平高于CMP-,  0: CMP+電平低于CMP-,  只讀

  23. //CMPCR2
  24. #define        INVCMPO        0x80        //1: 比較器輸出取反,  0: 不取反
  25. #define        DISFLT        0x40        //1: 關(guān)閉0.1uF濾波,   0: 允許
  26. #define        LCDTY        0x00        //0~63, 比較結(jié)果變化延時(shí)周期數(shù)


  27. #define        Pin0                0x01        //IO引腳 Px.0
  28. #define        Pin1                0x02        //IO引腳 Px.1
  29. #define        Pin2                0x04        //IO引腳 Px.2
  30. #define        Pin3                0x08        //IO引腳 Px.3
  31. #define        Pin4                0x10        //IO引腳 Px.4
  32. #define        Pin5                0x20        //IO引腳 Px.5
  33. #define        Pin6                0x40        //IO引腳 Px.6
  34. #define        Pin7                0x80        //IO引腳 Px.7
  35. #define        PinAll                0xFF        //IO所有引腳
  36. /*************        本地變量聲明        **************/
  37. sbit        P_ADC        = P1^5;        //P1.5 比較器轉(zhuǎn)IO輸出端
  38. u16                adc;                        //ADC中間值, 用戶層不可見(jiàn)
  39. u16                adc_duty;                //ADC計(jì)數(shù)周期, 用戶層不可見(jiàn)
  40. u16                adc_value;                //ADC值, 用戶層使用
  41. bit                adc_ok;                        //ADC結(jié)束標(biāo)志, 為1則adc_value的值可用. 此標(biāo)志給用戶層查詢,并且清0

  42. /*************        本地函數(shù)聲明        **************/
  43. void ConfigTimer0();
  44. void ConfigTimer2(u8 ms);

  45. void main(void)
  46. {
  47.         
  48. //IO口初始化

  49.         P1M0 |= (Pin0+Pin1+Pin5);   //P1.0 P1.1 P1.5腳定義為推挽模式
  50.         P3M0 |= (Pin0+Pin1+Pin2+Pin3+Pin6+Pin7);   //P3.0-P3.7腳定義為推挽模式
  51.         P5M1 |= Pin4+Pin5;          //P5.4 P5.5設(shè)置為高阻輸入
  52.         

  53. //比較器初始化
  54.         CMPCR1 = 0;
  55.         CMPCR2 = 20;                //比較結(jié)果變化延時(shí)周期數(shù), 0~63
  56.         CMPCR1 |= CMPEN;        //允許比較器                ENABLE,DISABLE
  57. //        CMPCR1 |= PIE;                //允許上升沿中斷        ENABLE,DISABLE
  58. //        CMPCR1 |= NIE;                //允許下降沿中斷        ENABLE,DISABLE
  59. //        CMPCR1 |= PIS;                //輸入正極性選擇, 0: 選擇內(nèi)部P5.5做正輸入,           1: 由ADCIS[2:0]所選擇的ADC輸入端做正輸入.
  60.         CMPCR1 |= NIS;                //輸入負(fù)極性選擇, 0: 選擇內(nèi)部BandGap電壓BGv做負(fù)輸入, 1: 選擇外部P5.4做輸入
  61. //        CMPCR1 |= CMPOE;        //允許比較結(jié)果輸出到P1.2,   ENABLE,DISABLE
  62. //        CMPCR2 |= INVCMPO;        //比較器輸出取反,         ENABLE,DISABLE
  63.         CMPCR2 |= DISFLT;        //內(nèi)部0.1uF濾波,          ENABLE,DISABLE



  64.         ConfigTimer0();
  65.         ConfigTimer2(5);
  66.         EA = 1;                        //允許全局中斷

  67.         while (1)
  68.         {
  69.                
  70.                 if(adc_ok)                //等待ADC結(jié)束
  71.                 {
  72.                         adc_ok = 0;                                //清除ADC已結(jié)束標(biāo)志                                
  73.                         Led_buff[0] = Led_Char[adc_value / 10000 % 10];
  74.                         Led_buff[1] = Led_Char[adc_value / 1000 % 10];
  75.                         Led_buff[1] &= 0x7f;   //加小數(shù)點(diǎn)
  76.                         Led_buff[2] = Led_Char[adc_value / 100 % 10];

  77.                 }
  78.         }
  79. }

  80. /* 配置并啟動(dòng)T0,10us定時(shí)時(shí)間 */
  81. void ConfigTimer0()
  82. {
  83.         AUXR |= 0x80;                //定時(shí)器時(shí)鐘1T模式
  84.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  85.         TL0 = 0x23;                //設(shè)置定時(shí)初值 10微秒@22.1184MHz
  86.         TH0 = 0xFF;                //設(shè)置定時(shí)初值
  87.         TF0 = 0;                //清除TF0標(biāo)志
  88.         ET0 = 1;                //允許中斷
  89.         PT0 = 1;                //高優(yōu)先級(jí)中斷
  90.         TR0 = 1;                //開(kāi)始運(yùn)行
  91. }

  92. /* 配置并啟動(dòng)T2,ms-T2定時(shí)時(shí)間 */
  93. void ConfigTimer2(u8 ms)
  94. {
  95.     u32 tmp;  //臨時(shí)變量
  96.    
  97.     tmp = MAIN_Fosc / 12;      //定時(shí)器計(jì)數(shù)頻率
  98.     tmp = (tmp * ms) / 1000;  //計(jì)算所需的計(jì)數(shù)值
  99.     tmp = 65536 - tmp;        //計(jì)算定時(shí)器重載值
  100.     tmp = tmp + 18;           //補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差
  101.     T2H = (u8)(tmp>>8);  //定時(shí)器重載值拆分為高低字節(jié)
  102.     T2L = (u8)tmp;
  103.            
  104.         AUXR &= 0xEF;  // 啟動(dòng)T2定時(shí)器  方式 :16位重裝模式計(jì)數(shù)器
  105.         AUXR |= 0x10;  // 啟動(dòng)T2定時(shí)器
  106.            IE2 &= 0xFB;  // 使能T2中斷
  107.         IE2 |= 0x04;  // 使能T2中斷
  108.            
  109.     //ET2 = 1;        //使能T2中斷
  110.     //T2R = 1;        //啟動(dòng)T2定時(shí)器
  111. }


  112. /********************* Timer0中斷函數(shù)************************/
  113. void timer0_int () interrupt 1
  114. {
  115.         if((CMPCR1 & CMPRES) == 0)        P_ADC = 0;        //比較器輸出高電平
  116.         else                                //P_ADC輸出低電平, 給負(fù)輸入端做反饋.
  117.         {
  118.                 P_ADC = 1;                        //P_ADC輸出高電平, 給負(fù)輸入端做反饋.
  119.                 adc ++;        //ADC計(jì)數(shù)+1
  120.         }

  121.         if(--adc_duty == 0)                        //ADC周期-1, 到0則ADC結(jié)束
  122.         {
  123.                 adc_duty = ADC_SCALE;        //周期計(jì)數(shù)賦初值
  124.                 adc_value = adc;                //保存ADC值
  125.                 adc = 0;                                //清除ADC值
  126.                 adc_ok = 1;                                //標(biāo)志ADC已結(jié)束
  127.         }
  128. }

  129. /* T0中斷服務(wù)函數(shù),執(zhí)行數(shù)碼管掃描顯示 */
  130. void InterruptTimer2() interrupt 12
  131. {               
  132.    Led_can();
  133.    WDT_CONTR=0x36;             //喂狗 2S

  134. }
復(fù)制代碼


評(píng)分

參與人數(shù) 4黑幣 +115 收起 理由
0668866 + 5 絕世好帖!贊一個(gè)!
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!
xmd1972 + 5 共享資料的黑幣獎(jiǎng)勵(lì)!
楊雪飛 + 5 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:57657 發(fā)表于 2016-9-22 07:11 | 只看該作者
P1.1連接的接線名是P35,應(yīng)該改成P11,以此類(lèi)推。
另外78L05的極限輸入電壓是18v,電流100ma,是不可能直接輸入50v的,否則會(huì)炸管,應(yīng)該取9v到15v的的電源進(jìn)行供電。
回復(fù)

使用道具 舉報(bào)

板凳
ID:141494 發(fā)表于 2016-10-6 20:45 | 只看該作者
一直用7107的
回復(fù)

使用道具 舉報(bào)

地板
ID:76408 發(fā)表于 2019-8-13 12:01 | 只看該作者
樓主這個(gè)程序能不能改成測(cè)量0-500v的?謝謝
回復(fù)

使用道具 舉報(bào)

5#
ID:34298 發(fā)表于 2020-3-5 19:33 | 只看該作者
應(yīng)該是共陽(yáng)數(shù)碼管吧
回復(fù)

使用道具 舉報(bào)

6#
ID:51443 發(fā)表于 2020-3-27 18:51 | 只看該作者
這個(gè)原理圖設(shè)計(jì)是為了省那五個(gè)300歐電吧
回復(fù)

使用道具 舉報(bào)

7#
ID:51443 發(fā)表于 2020-4-8 07:36 | 只看該作者
地方錯(cuò)了
回復(fù)

使用道具 舉報(bào)

8#
ID:859799 發(fā)表于 2020-12-16 22:25 | 只看該作者
樓樓請(qǐng)問(wèn)有仿真圖嗎
回復(fù)

使用道具 舉報(bào)

9#
ID:868717 發(fā)表于 2020-12-27 13:05 | 只看該作者

這里邊的程序沒(méi)有蜂鳴的
回復(fù)

使用道具 舉報(bào)

10#
ID:319331 發(fā)表于 2021-8-16 16:08 | 只看該作者
下載下來(lái)研究一下,改成0-10v輸入顯示對(duì)應(yīng)比例放大,不知道行不行
回復(fù)

使用道具 舉報(bào)

11#
ID:319331 發(fā)表于 2021-8-16 16:11 | 只看該作者
為什么我下載了原理圖和pcb打開(kāi)啥也沒(méi)有0.0,14版本的ad
回復(fù)

使用道具 舉報(bào)

12#
ID:466595 發(fā)表于 2023-4-6 22:44 | 只看該作者
大佬,AD19打開(kāi)什么都沒(méi)有啊
回復(fù)

使用道具 舉報(bào)

13#
ID:61493 發(fā)表于 2023-10-1 15:19 | 只看該作者
祝壇友們雙節(jié)快樂(lè)!
回復(fù)

使用道具 舉報(bào)

14#
ID:281040 發(fā)表于 2023-10-2 10:29 | 只看該作者

祝壇友們雙節(jié)快樂(lè)!
回復(fù)

使用道具 舉報(bào)

15#
ID:870445 發(fā)表于 2023-10-11 18:45 | 只看該作者
有做成的嗎,出來(lái)冒個(gè)泡,希望大家都成功,
回復(fù)

使用道具 舉報(bào)

16#
ID:890642 發(fā)表于 2023-12-23 05:43 | 只看該作者
絕對(duì)的好帖子
回復(fù)

使用道具 舉報(bào)

17#
ID:71233 發(fā)表于 2023-12-23 14:39 | 只看該作者
樓主用的芯片是STC的?
回復(fù)

使用道具 舉報(bào)

18#
ID:1078115 發(fā)表于 2023-12-23 15:43 | 只看該作者
原理圖和PCB需要用PADS才能打開(kāi)
回復(fù)

使用道具 舉報(bào)

19#
ID:72088 發(fā)表于 2024-2-13 08:37 | 只看該作者
分壓電阻就有問(wèn)題,浪費(fèi)電阻和空間。設(shè)計(jì)成65V多好,兩個(gè)精密電阻分壓就搞定了,你原理圖用這么多電阻精度還是有誤差,我發(fā)的帖子看看,做成95V,65V
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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