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

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

QQ登錄

只需一步,快速開始

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

單片機(jī)自帶AD 4位電壓表AD000.0-500.0源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:699785 發(fā)表于 2020-3-26 10:38 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
STC15W401AS自帶AD 4位電壓表AD000.0-500.0。單片機(jī)直接驅(qū)動(dòng)4位共陰數(shù)碼管!采用定時(shí)中斷調(diào)AD!附件有很清楚的注釋!

單片機(jī)源程序如下:
  1. #include  "STC15W401AS.h"
  2. #include  "intrins.h"


  3. sbit GND1=P1^4;
  4. sbit GND2=P1^3;
  5. sbit GND3=P1^2;
  6. sbit GND4=P1^1;
  7.          
  8. sbit LEDa=P1^5;
  9. sbit LEDb=P1^6;
  10. sbit LEDc=P3^3;
  11. sbit LEDd=P3^1;
  12. sbit LEDe=P3^0;
  13. sbit LEDf=P1^7;     
  14. sbit LEDg=P3^2;
  15. sbit LEDp=P3^4;
  16. unsigned char count;
  17. unsigned char PWM=9;

  18. float dianya;    // 電壓
  19. int dianya1;    // 電壓 1
  20. unsigned char code numtab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  21. //unsigned char code numtab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};


  22. /*-------------------------------------延時(shí)函數(shù)-------------------------------------*/
  23. void delay (unsigned int a)
  24. {
  25.         unsigned int i;
  26.         while( --a != 0)
  27.         {
  28.                 for (i = 0; i < 12; i++);
  29.         }
  30. }


  31. /*-------------------------------------數(shù)碼管消隱-------------------------------------*/
  32. void displayoff (void)                 
  33. {                  
  34.         GND1=1;
  35.         GND2=1;
  36.         GND3=1;
  37.         GND4=1;
  38.        
  39.         LEDa=0;
  40.         LEDb=0;
  41.         LEDc=0;
  42.         LEDd=0;
  43.         LEDe=0;
  44.         LEDf=0;
  45.         LEDg=0;
  46.         LEDp=0;

  47.         delay(10-PWM);
  48. }
  49. /*-------------------------------------個(gè)位碼顯-------------------------------------*/
  50. void bit1 (unsigned char d)       
  51. {
  52.         unsigned char i;
  53.         i=d&0x01;
  54.         if (i==0x01){
  55.                 GND1=0;LEDa=1;}delay(PWM);displayoff();
  56.         i=d&0x02;
  57.         if (i==0x02){
  58.                 GND1=0;LEDb=1;}delay(PWM);displayoff();
  59.         i=d&0x04;
  60.         if (i==0x04){
  61.                 GND1=0;LEDc=1;}delay(PWM);displayoff();
  62.         i=d&0x08;
  63.         if (i==0x08){
  64.                 GND1=0;LEDd=1;}delay(PWM);displayoff();
  65.         i=d&0x10;
  66.         if (i==0x10){
  67.                 GND1=0;LEDe=1;}delay(PWM);displayoff();
  68.         i=d&0x20;
  69.         if (i==0x20){
  70.                 GND1=0;LEDf=1;}delay(PWM);displayoff();
  71.         i=d&0x40;
  72.         if (i==0x40){
  73.                 GND1=0;LEDg=1;}delay(PWM);displayoff();
  74.         i=d&0x80;
  75.         if (i==0x80){
  76.                 GND1=0;LEDp=1;}delay(PWM);displayoff();
  77. }
  78. /*-------------------------------------十位碼顯-------------------------------------*/
  79. void bit2 (unsigned char d)
  80. {
  81.         unsigned char i;
  82.         i=d&0x01;
  83.         if (i==0x01){
  84.                 GND2=0;LEDa=1;}delay(PWM);displayoff();
  85.         i=d&0x02;
  86.         if (i==0x02){
  87.                 GND2=0;LEDb=1;}delay(PWM);displayoff();
  88.         i=d&0x04;
  89.         if (i==0x04){
  90.                 GND2=0;LEDc=1;}delay(PWM);displayoff();
  91.         i=d&0x08;
  92.         if (i==0x08){
  93.                 GND2=0;LEDd=1;}delay(PWM);displayoff();
  94.         i=d&0x10;
  95.         if (i==0x10){
  96.                 GND2=0;LEDe=1;}delay(PWM);displayoff();
  97.         i=d&0x20;
  98.         if (i==0x20){
  99.                 GND2=0;LEDf=1;}delay(PWM);displayoff();
  100.         i=d&0x40;
  101.         if (i==0x40){
  102.                 GND2=0;LEDg=1;}delay(PWM);displayoff();
  103.         i=d&0x80;
  104.         if (i==0x80){
  105.                 GND2=0;LEDp=1;}delay(PWM);displayoff();
  106. }
  107. /*-------------------------------------百位碼顯-------------------------------------*/
  108. void bit3 (unsigned char d)
  109. {
  110.         unsigned char i;
  111.         i=d&0x01;
  112.         if (i==0x01){
  113.                 GND3=0;LEDa=1;}delay(PWM);displayoff();
  114.         i=d&0x02;
  115.         if (i==0x02){
  116.                 GND3=0;LEDb=1;}delay(PWM);displayoff();
  117.         i=d&0x04;
  118.         if (i==0x04){
  119.                 GND3=0;LEDc=1;}delay(PWM);displayoff();
  120.         i=d&0x08;
  121.         if (i==0x08){
  122.                 GND3=0;LEDd=1;}delay(PWM);displayoff();
  123.         i=d&0x10;
  124.         if (i==0x10){
  125.                 GND3=0;LEDe=1;}delay(PWM);displayoff();
  126.         i=d&0x20;
  127.         if (i==0x20){
  128.                 GND3=0;LEDf=1;}delay(PWM);displayoff();
  129.         i=d&0x40;
  130.         if (i==0x40){
  131.                 GND3=0;LEDg=1;}delay(PWM);displayoff();
  132.         i=d&0x80;
  133.         if (i==0x80){
  134.                 GND3=0;LEDp=1;}delay(PWM);displayoff();
  135. }
  136. /*-------------------------------------百位碼顯-------------------------------------*/
  137. void bit4 (unsigned char d)
  138. {
  139.         unsigned char i;
  140.         i=d&0x01;
  141.         if (i==0x01){
  142.                 GND4=0;LEDa=1;}delay(PWM);displayoff();
  143.         i=d&0x02;
  144.         if (i==0x02){
  145.                 GND4=0;LEDb=1;}delay(PWM);displayoff();
  146.         i=d&0x04;
  147.         if (i==0x04){
  148.                 GND4=0;LEDc=1;}delay(PWM);displayoff();
  149.         i=d&0x08;
  150.         if (i==0x08){
  151.                 GND4=0;LEDd=1;}delay(PWM);displayoff();
  152.         i=d&0x10;
  153.         if (i==0x10){
  154.                 GND4=0;LEDe=1;}delay(PWM);displayoff();
  155.         i=d&0x20;
  156.         if (i==0x20){
  157.                 GND4=0;LEDf=1;}delay(PWM);displayoff();
  158.         i=d&0x40;
  159.         if (i==0x40){
  160.                 GND4=0;LEDg=1;}delay(PWM);displayoff();
  161.         i=d&0x80;
  162.         if (i==0x80){
  163.                 GND4=0;LEDp=1;}delay(PWM);displayoff();
  164. }
  165. /*-------------------------------------數(shù)碼管位顯-------------------------------------*/
  166. void display(unsigned char l,unsigned char d)
  167. {
  168.         switch (l)                       
  169.         {                                       
  170.                 case 1:                         
  171.                         bit1(d);                
  172.                         break;               
  173.                 case 2:                       
  174.                         bit2(d);               
  175.                         break;       
  176.                 case 3:                       
  177.                         bit3(d);                
  178.                         break;
  179.                 case 4:                       
  180.                         bit4(d);                
  181.                         break;               
  182.         }
  183. }


  184. /*--------------------------------A/D轉(zhuǎn)換初始化函數(shù)--------------------------------*/
  185. void Init_ADC()
  186. {
  187.   P1ASF|=0X03;//設(shè)定P1.0,P1.1為模擬量電壓輸入端
  188.         ADC_RES=0;//清除緩存寄存器
  189.         ADC_CONTR=ADC_PWR+ADC_SPD1;//啟動(dòng)ADC電源,設(shè)定轉(zhuǎn)換速率
  190.         _nop_();
  191. }
  192. //========================================================================//
  193. uint ReadAdc(uchar Chx)//讀取ADC數(shù)據(jù)
  194. {       
  195.     uint ADCDAT;
  196.     Init_ADC();
  197.     ADC_CONTR=ADC_PWR+ADC_SPD1+Chx+ADC_START;//啟動(dòng)轉(zhuǎn)換
  198.         _nop_();       
  199.     _nop_();
  200.     _nop_();       
  201.     _nop_();//短暫延時(shí)
  202.         while((ADC_CONTR&ADC_FLAG)==0);//等待轉(zhuǎn)換完畢
  203.         //ADC_CONTR&=~ADC_FLAG;//清除轉(zhuǎn)換完成標(biāo)志
  204.         ADC_CONTR &= 0xE7;//1111,0111 清 ADC_FLAG 位, 關(guān)閉A/D轉(zhuǎn)換,
  205.         ADCDAT=ADC_RES;//獲取ADC數(shù)值
  206.     ADCDAT<<=2;
  207.     ADCDAT|=ADC_RESL;       
  208.         return ADCDAT;//返回?cái)?shù)值
  209. }
  210. /*--------------------------------------主函數(shù)--------------------------------------*/       
  211. void main (void)
  212. {
  213.         P1M0=0x01;        P1M1=0xe0;
  214.         P3M0=0x00;        P3M1=0x1f;

  215.         TMOD=0x01;//定時(shí)器工作方式1
  216.         TH0=0x3C;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號(hào)
  217.         TL0=0xB0;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號(hào)
  218.        
  219.         EA=1;//開總中斷
  220.         ET0=1;//開定時(shí)器中斷
  221.         TR0=1;//啟動(dòng)定時(shí)器                       

  222.         while(1)
  223.         {
  224.         if (count==10)
  225.         {
  226.         /*        dianya=ReadAdc(0)*(5.0/4500.0);  // 取電壓
  227.                 dianya=dianya*100;
  228.                 dianya1=(int)dianya;
  229.         */
  230.         dianya=ReadAdc(0);
  231.                 dianya1=dianya;
  232.             count=0;
  233.         }
  234. /*                P2=0x01;
  235.                 P0=shuzu[dianya1/100]; // 取百位
  236.                 DELAY_MS(5);
  237.                 P2<<=1;
  238.                 P0=shuzu[dianya1%100/10];// 取十位
  239.                 DELAY_MS(5);
  240.                 P2<<=1;   
  241.                    P0=shuzu[dianya1%100%10]&0x7f;// 取個(gè)位
  242.                 DELAY_MS(5);                               
  243. */
  244.                 display (1,numtab[dianya1/1000 + '0']); //取百位
  245.                 display (2,numtab[dianya1%1000/100 + '0']);         //取十位
  246.                 display (3,numtab[dianya1%100/10 + '0']);         //取個(gè)位
  247.                 display (3,numtab[dianya1%10 + '0']);                 //取小數(shù)點(diǎn)后一位


  248.         }
  249. }
  250. /*-----------------------------------中斷服務(wù)程序-----------------------------------*/       
  251. void Timer0_Routine(void) interrupt 1
  252. {
  253.         TH0=0x3C;                         
  254.         TL0=0xB0;                       
  255.     count++;
  256. }
復(fù)制代碼

所有資料51hei提供下載:
500電壓表.rar (29.56 KB, 下載次數(shù): 51)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2020-3-26 20:44 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

板凳
ID:214276 發(fā)表于 2020-3-27 00:58 | 只看該作者
這個(gè)貼要學(xué)習(xí)下。頂
回復(fù)

使用道具 舉報(bào)

地板
ID:15020 發(fā)表于 2020-3-27 09:04 | 只看該作者
初級(jí)代碼,初學(xué)者玩玩可以
回復(fù)

使用道具 舉報(bào)

5#
ID:59884 發(fā)表于 2020-3-27 10:05 | 只看該作者
不錯(cuò)!頂一下!謝謝樓主分享!
回復(fù)

使用道具 舉報(bào)

6#
ID:377382 發(fā)表于 2020-5-27 13:49 | 只看該作者
好東東,分享下圖紙就好
回復(fù)

使用道具 舉報(bào)

7#
ID:770983 發(fā)表于 2020-6-6 11:14 | 只看該作者
很好的東西,有個(gè)電路圖就更好了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: h片在线播放 | 成人网在线观看 | 欧美日韩专区 | 国产精品99久久久久久动医院 | 91久久综合 | 欧美视频免费 | 国产精品美女 | 国产乱码精品一品二品 | 欧美无乱码久久久免费午夜一区 | 午夜国产羞羞视频免费网站 | 亚洲免费在线观看 | 成人高清视频在线观看 | 三级免费毛片 | 日本一二三区电影 | 亚洲国产一区二区三区在线观看 | 婷婷成人在线 | 毛片免费看 | 日韩不卡三区 | 午夜精品久久久久久久久久久久 | 成人不卡| 九九久久国产精品 | 国产成人精品午夜 | 久久精品视频一区二区三区 | 国产成人叼嘿视频在线观看 | 国产剧情一区二区三区 | 成人免费在线观看视频 | 中文字幕一区二区三区四区不卡 | 日韩中文欧美 | 欧美一a一片一级一片 | 亚洲伊人a| 97精品超碰一区二区三区 | 热久久999| 成人不卡 | 欧美一区二区三区视频 | 亚洲精品视频三区 | 中文字幕欧美一区二区 | 欧美在线观看一区 | 日韩精品一区二区三区在线播放 | 精品一二三区 | 成人免费看电影 | 免费看91|