找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4981|回復: 7
收起左側

0-50v電壓表設計 精度0.01,過壓警報~程序、原理圖、仿真

  [復制鏈接]
ID:162997 發(fā)表于 2017-1-29 03:34 | 顯示全部樓層 |閱讀模式
三個擋,0-2,0-25,0-50,精度0.01,過壓警報~程序、原理圖、仿真。
0.png
全部資料打包下載:
畢業(yè)設計.zip (128.6 KB, 下載次數(shù): 132)

0-50v電壓表設計的論文預覽如下:
word格式的 可以編輯

0.png 0.png

程序如下:
  1. /*-------------------------------
  2. 作者:小劉
  3. --------------------------------*/
  4. #include <AT89X52.H>  
  5. unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};  //放數(shù)碼管位選的值
  6. unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00};//放數(shù)碼管顯示的數(shù)字
  7. unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};  //存放ad采集過來的值(只有最后3位有用)
  8. unsigned char dispcount;
  9. unsigned char getdata;
  10. unsigned int temp;
  11. long int  i;
  12. unsigned int R1;

  13. sbit ST=P3^0; //是否選中該芯片
  14. sbit OE=P3^1; //所存轉換的值
  15. sbit EOC=P3^2; //當EAC數(shù)據(jù)有效時,將轉換數(shù)據(jù)送出
  16. sbit CLK=P3^3; //給adc0808提供時鐘

  17. sbit D1=P2^0; //擋1
  18. sbit D2=P2^1; //擋2
  19. sbit D3=P2^2; //擋3

  20. sbit L=P3^7; //監(jiān)控燈

  21. void main(void)
  22. { D1=1;
  23.   D2=1;
  24.   D3=1;

  25.   ST=0;
  26.   OE=0;
  27.   ET0=1; //啟用定時器0
  28.   ET1=1;   // 啟用定時器1
  29.   EA=1;    //開總中斷
  30.   TMOD=0x12;//設置定時器0和1的工作方式
  31.   TH0=216;
  32.   TL0=216; //設置定時器0的初值為216(為adc0808提供時鐘)
  33.   TH1=(65536-5000)/256;
  34.   TL1=(65536-5000)%256;//設置定時器1的初值為5ms
  35.   TR1=1;  //開定時器1
  36.   TR0=1;  //開定時器0
  37.   ST=1;
  38.   ST=0;
  39.   while(D1==0)    //擋1
  40.     { L=1;
  41.       if(EOC==1) //判斷裝換是否結束
  42.         {
  43.           OE=1;  
  44.           getdata=P1;  //如果結束,給OE一個跳變,讀出數(shù)據(jù)存入getdata
  45.           OE=0;
  46.                     i=getdata*196;
  47.                         if(i>=20000)
  48.                         L=0;         //256/getdata=5V/xV  >>>x=(getdata*5/256)V
  49.                         dispbuf[5]=i/10000; //將數(shù)據(jù)存入數(shù)組中以待顯示。 (個位)
  50.                         i=i%10000;
  51.                         dispbuf[6]=i/1000;        //小數(shù)點第一位
  52.                         i=i%1000;
  53.                         dispbuf[7]=i/100;   //小數(shù)點第二位  

  54.           ST=1;
  55.           ST=0;
  56.         }
  57.     }
  58.   while(D2==0)    //擋2
  59.     { L=1;
  60.       if(EOC==1) //判斷裝換是否結束
  61.         {
  62.           OE=1;  
  63.           getdata=P1;  //如果結束,給OE一個跳變,讀出數(shù)據(jù)存入getdata
  64.           OE=0;
  65.                     i=getdata*98;
  66.                         if(i>=20000)
  67.                         L=0;         //256/getdata=5V/xV  >>>x=(getdata*5/256)V
  68.                         dispbuf[4]=i/10000; //將數(shù)據(jù)存入數(shù)組中以待顯示。 (個位)
  69.                         i=i%10000;
  70.                         dispbuf[5]=i/1000; //將數(shù)據(jù)存入數(shù)組中以待顯示。 (個位)
  71.                         i=i%1000;
  72.                         dispbuf[6]=i/100;        //小數(shù)點第一位
  73.                         i=i%100;
  74.                         dispbuf[7]=i/10;   //小數(shù)點第二位  
  75.                              
  76.           ST=1;
  77.           ST=0;
  78.         }
  79.     }
  80.           while(D3==0)    //擋3
  81.     { L=1;
  82.       if(EOC==1) //判斷裝換是否結束
  83.         {
  84.           OE=1;  
  85.           getdata=P1;  //如果結束,給OE一個跳變,讀出數(shù)據(jù)存入getdata
  86.           OE=0;
  87.                     i=getdata*196;
  88.                         if(i>=49900)
  89.                         L=0;         //256/getdata=5V/xV  >>>x=(getdata*5/256)V
  90.                         dispbuf[4]=i/10000; //將數(shù)據(jù)存入數(shù)組中以待顯示。 (個位)
  91.                         i=i%10000;
  92.                         dispbuf[5]=i/1000;        //小數(shù)點第一位
  93.                         i=i%1000;
  94.                         dispbuf[6]=i/100;   //小數(shù)點第二位   
  95.                         i=i%100;
  96.                         dispbuf[7]=i/10;   //小數(shù)點第二位                            
  97.           ST=1;
  98.           ST=0;
  99.         }
  100.     }
  101. }
  102.   
  103. void t0(void) interrupt 1 using 0           //定時器0  中斷服務
  104. {
  105.   CLK=~CLK;  //給adc0808提供時鐘
  106. }
  107.   
  108. void t1(void) interrupt 3 using 0          //定時器1  中斷服務
  109. {
  110.   TH1=(65536-5050)/256;
  111.   TL1=(65536-5050)%256;
  112.   P2=0xff;
  113.   P0=dispcode[dispbuf[dispcount]];          //段選
  114.   P2=dispbitcode[dispcount];                 //位選
  115.   if(dispcount==5)         // 顯示小數(shù)點
  116.     {
  117.       P0=P0 | 0x80;
  118.     }
  119.   dispcount++;          //讓位選循環(huán)起來
  120.   if(dispcount==8)
  121.     {
  122.       dispcount=0;
  123.     }  
  124. }

復制代碼

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:162997 發(fā)表于 2017-1-29 03:39 | 顯示全部樓層
自己沙發(fā)自己坐~
回復

使用道具 舉報

ID:154111 發(fā)表于 2017-2-3 23:21 | 顯示全部樓層
資料不錯,謝謝分享!。。。。。
回復

使用道具 舉報

ID:130231 發(fā)表于 2017-3-20 12:59 | 顯示全部樓層
好資料!感謝你的分享
回復

使用道具 舉報

ID:99130 發(fā)表于 2017-5-5 00:17 來自手機 | 顯示全部樓層
請問數(shù)碼管是共陰還是共陽?
回復

使用道具 舉報

ID:99130 發(fā)表于 2017-5-5 14:09 | 顯示全部樓層
如何用ADC0832替換ADC0808
回復

使用道具 舉報

ID:438003 發(fā)表于 2018-12-6 22:36 來自手機 | 顯示全部樓層
感謝分享,學習
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表