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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 20890|回復: 19
打印 上一主題 下一主題
收起左側

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. }
復制代碼


評分

參與人數 4黑幣 +115 收起 理由
0668866 + 5 絕世好帖!贊一個!
admin + 100 共享資料的黑幣獎勵!
xmd1972 + 5 共享資料的黑幣獎勵!
楊雪飛 + 5 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

5#
ID:34298 發表于 2020-3-5 19:33 | 只看該作者
應該是共陽數碼管吧
回復

使用道具 舉報

6#
ID:51443 發表于 2020-3-27 18:51 | 只看該作者
這個原理圖設計是為了省那五個300歐電吧
回復

使用道具 舉報

7#
ID:51443 發表于 2020-4-8 07:36 | 只看該作者
地方錯了
回復

使用道具 舉報

8#
ID:859799 發表于 2020-12-16 22:25 | 只看該作者
樓樓請問有仿真圖嗎
回復

使用道具 舉報

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

這里邊的程序沒有蜂鳴的
回復

使用道具 舉報

10#
ID:319331 發表于 2021-8-16 16:08 | 只看該作者
下載下來研究一下,改成0-10v輸入顯示對應比例放大,不知道行不行
回復

使用道具 舉報

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

使用道具 舉報

12#
ID:466595 發表于 2023-4-6 22:44 | 只看該作者
大佬,AD19打開什么都沒有啊
回復

使用道具 舉報

13#
ID:61493 發表于 2023-10-1 15:19 | 只看該作者
祝壇友們雙節快樂!
回復

使用道具 舉報

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

祝壇友們雙節快樂!
回復

使用道具 舉報

15#
ID:870445 發表于 2023-10-11 18:45 | 只看該作者
有做成的嗎,出來冒個泡,希望大家都成功,
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日日摸夜夜爽人人添av | 九九久久精品 | 日韩欧美不卡 | 欧美网站一区二区 | 在线精品一区二区 | 国产精品久久久久久吹潮 | 中文字幕一区二区三区精彩视频 | 久久91精品 | 国产原创视频 | 国产午夜精品久久久 | 欧美婷婷 | 天天干天天想 | 中文字幕亚洲欧美 | 日韩精品视频一区二区三区 | 欧美成人久久 | 国产精品综合色区在线观看 | 欧美福利一区 | 99久久99 | 欧美一区二区三区视频在线播放 | 日韩高清一区 | 在线播放一区 | www.国产.com | 超碰在线影院 | 成人欧美一区二区三区在线播放 | 91偷拍精品一区二区三区 | 日韩久久中文字幕 | 日韩不卡视频在线 | 日本精品视频在线 | 天天干 夜夜操 | 久久综合久色欧美综合狠狠 | 午夜免费电影院 | 亚洲第一视频网 | 精品国产一区二区国模嫣然 | 9久久婷婷国产综合精品性色 | 亚洲三区在线观看 | 欧美999 | 久久久久久网 | 国产高清一区二区三区 | 精品欧美一区二区在线观看 | 成人h动漫亚洲一区二区 | 激情在线视频 |