欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 3位數碼管電壓表 pcb 原理圖 程序都有 [打印本頁]

作者: 0o000000    時間: 2016-9-21 20:58
標題: 3位數碼管電壓表 pcb 原理圖 程序都有

//3位數碼電壓表
//電壓范圍:0-50V
//原理:比較器做為ADC
//共陰數碼管
//5V穩定性越高,測量的電壓越準確

PCB用PADS打開.7z (53.35 KB, 下載次數: 461)

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

  11. #define MAIN_Fosc                22118400        //定義主時鐘
  12. #define        ADC_SCALE                50000                //ADC滿量程, 根據需要設置



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

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

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


  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 比較器轉IO輸出端
  38. u16                adc;                        //ADC中間值, 用戶層不可見
  39. u16                adc_duty;                //ADC計數周期, 用戶層不可見
  40. u16                adc_value;                //ADC值, 用戶層使用
  41. bit                adc_ok;                        //ADC結束標志, 為1則adc_value的值可用. 此標志給用戶層查詢,并且清0

  42. /*************        本地函數聲明        **************/
  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設置為高阻輸入
  52.         

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



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

  67.         while (1)
  68.         {
  69.                
  70.                 if(adc_ok)                //等待ADC結束
  71.                 {
  72.                         adc_ok = 0;                                //清除ADC已結束標志                                
  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;   //加小數點
  76.                         Led_buff[2] = Led_Char[adc_value / 100 % 10];

  77.                 }
  78.         }
  79. }

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

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


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

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

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

  134. }
復制代碼



作者: npn    時間: 2016-9-22 07:11
P1.1連接的接線名是P35,應該改成P11,以此類推。
另外78L05的極限輸入電壓是18v,電流100ma,是不可能直接輸入50v的,否則會炸管,應該取9v到15v的的電源進行供電。
作者: whsy138    時間: 2016-10-6 20:45
一直用7107的
作者: 成森林    時間: 2019-8-13 12:01
樓主這個程序能不能改成測量0-500v的?謝謝
作者: fancunwu    時間: 2020-3-5 19:33
應該是共陽數碼管吧

作者: 職教電子    時間: 2020-3-27 18:51
這個原理圖設計是為了省那五個300歐電吧
作者: 職教電子    時間: 2020-4-8 07:36
地方錯了
作者: 蠟筆小新2727    時間: 2020-12-16 22:25
樓樓請問有仿真圖嗎
作者: 試卷313    時間: 2020-12-27 13:05

這里邊的程序沒有蜂鳴的
作者: lcl1260519806    時間: 2021-8-16 16:08
下載下來研究一下,改成0-10v輸入顯示對應比例放大,不知道行不行
作者: lcl1260519806    時間: 2021-8-16 16:11
為什么我下載了原理圖和pcb打開啥也沒有0.0,14版本的ad
作者: 天使的眼淚    時間: 2023-4-6 22:44
大佬,AD19打開什么都沒有啊
作者: vivianb    時間: 2023-10-1 15:19
祝壇友們雙節快樂!
作者: 科林科技    時間: 2023-10-2 10:29

祝壇友們雙節快樂!
作者: xlhlydd    時間: 2023-10-11 18:45
有做成的嗎,出來冒個泡,希望大家都成功,
作者: huangguanhua    時間: 2023-12-23 05:43
絕對的好帖子
作者: lmn2005    時間: 2023-12-23 14:39
樓主用的芯片是STC的?
作者: happysxk    時間: 2023-12-23 15:43
原理圖和PCB需要用PADS才能打開
作者: 新鄉家電維修    時間: 2024-2-13 08:37
分壓電阻就有問題,浪費電阻和空間。設計成65V多好,兩個精密電阻分壓就搞定了,你原理圖用這么多電阻精度還是有誤差,我發的帖子看看,做成95V,65V





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1