|
|
三個(gè)擋,0-2,0-25,0-50,精度0.01,過(guò)壓警報(bào)~程序、原理圖、仿真。
0.png (62.73 KB, 下載次數(shù): 52)
下載附件
2017-2-3 01:07 上傳
全部資料打包下載:
畢業(yè)設(shè)計(jì).zip
(128.6 KB, 下載次數(shù): 132)
2017-1-29 03:33 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
0-50v電壓表設(shè)計(jì)的論文預(yù)覽如下:
word格式的 可以編輯
0.png (75.21 KB, 下載次數(shù): 74)
下載附件
2017-2-3 01:04 上傳
0.png (41.43 KB, 下載次數(shù): 65)
下載附件
2017-2-3 01:05 上傳
程序如下:
- /*-------------------------------
- 作者:小劉
- --------------------------------*/
- #include <AT89X52.H>
- unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; //放數(shù)碼管位選的值
- unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00};//放數(shù)碼管顯示的數(shù)字
- unsigned char dispbuf[8]={10,10,10,10,10,0,0,0}; //存放ad采集過(guò)來(lái)的值(只有最后3位有用)
- unsigned char dispcount;
- unsigned char getdata;
- unsigned int temp;
- long int i;
- unsigned int R1;
- sbit ST=P3^0; //是否選中該芯片
- sbit OE=P3^1; //所存轉(zhuǎn)換的值
- sbit EOC=P3^2; //當(dāng)EAC數(shù)據(jù)有效時(shí),將轉(zhuǎn)換數(shù)據(jù)送出
- sbit CLK=P3^3; //給adc0808提供時(shí)鐘
- sbit D1=P2^0; //擋1
- sbit D2=P2^1; //擋2
- sbit D3=P2^2; //擋3
- sbit L=P3^7; //監(jiān)控?zé)?
- void main(void)
- { D1=1;
- D2=1;
- D3=1;
- ST=0;
- OE=0;
- ET0=1; //啟用定時(shí)器0
- ET1=1; // 啟用定時(shí)器1
- EA=1; //開(kāi)總中斷
- TMOD=0x12;//設(shè)置定時(shí)器0和1的工作方式
- TH0=216;
- TL0=216; //設(shè)置定時(shí)器0的初值為216(為adc0808提供時(shí)鐘)
- TH1=(65536-5000)/256;
- TL1=(65536-5000)%256;//設(shè)置定時(shí)器1的初值為5ms
- TR1=1; //開(kāi)定時(shí)器1
- TR0=1; //開(kāi)定時(shí)器0
- ST=1;
- ST=0;
- while(D1==0) //擋1
- { L=1;
- if(EOC==1) //判斷裝換是否結(jié)束
- {
- OE=1;
- getdata=P1; //如果結(jié)束,給OE一個(gè)跳變,讀出數(shù)據(jù)存入getdata
- OE=0;
- i=getdata*196;
- if(i>=20000)
- L=0; //256/getdata=5V/xV >>>x=(getdata*5/256)V
- dispbuf[5]=i/10000; //將數(shù)據(jù)存入數(shù)組中以待顯示。 (個(gè)位)
- i=i%10000;
- dispbuf[6]=i/1000; //小數(shù)點(diǎn)第一位
- i=i%1000;
- dispbuf[7]=i/100; //小數(shù)點(diǎn)第二位
- ST=1;
- ST=0;
- }
- }
- while(D2==0) //擋2
- { L=1;
- if(EOC==1) //判斷裝換是否結(jié)束
- {
- OE=1;
- getdata=P1; //如果結(jié)束,給OE一個(gè)跳變,讀出數(shù)據(jù)存入getdata
- OE=0;
- i=getdata*98;
- if(i>=20000)
- L=0; //256/getdata=5V/xV >>>x=(getdata*5/256)V
- dispbuf[4]=i/10000; //將數(shù)據(jù)存入數(shù)組中以待顯示。 (個(gè)位)
- i=i%10000;
- dispbuf[5]=i/1000; //將數(shù)據(jù)存入數(shù)組中以待顯示。 (個(gè)位)
- i=i%1000;
- dispbuf[6]=i/100; //小數(shù)點(diǎn)第一位
- i=i%100;
- dispbuf[7]=i/10; //小數(shù)點(diǎn)第二位
-
- ST=1;
- ST=0;
- }
- }
- while(D3==0) //擋3
- { L=1;
- if(EOC==1) //判斷裝換是否結(jié)束
- {
- OE=1;
- getdata=P1; //如果結(jié)束,給OE一個(gè)跳變,讀出數(shù)據(jù)存入getdata
- OE=0;
- i=getdata*196;
- if(i>=49900)
- L=0; //256/getdata=5V/xV >>>x=(getdata*5/256)V
- dispbuf[4]=i/10000; //將數(shù)據(jù)存入數(shù)組中以待顯示。 (個(gè)位)
- i=i%10000;
- dispbuf[5]=i/1000; //小數(shù)點(diǎn)第一位
- i=i%1000;
- dispbuf[6]=i/100; //小數(shù)點(diǎn)第二位
- i=i%100;
- dispbuf[7]=i/10; //小數(shù)點(diǎn)第二位
- ST=1;
- ST=0;
- }
- }
- }
-
- void t0(void) interrupt 1 using 0 //定時(shí)器0 中斷服務(wù)
- {
- CLK=~CLK; //給adc0808提供時(shí)鐘
- }
-
- void t1(void) interrupt 3 using 0 //定時(shí)器1 中斷服務(wù)
- {
- TH1=(65536-5050)/256;
- TL1=(65536-5050)%256;
- P2=0xff;
- P0=dispcode[dispbuf[dispcount]]; //段選
- P2=dispbitcode[dispcount]; //位選
- if(dispcount==5) // 顯示小數(shù)點(diǎn)
- {
- P0=P0 | 0x80;
- }
- dispcount++; //讓位選循環(huán)起來(lái)
- if(dispcount==8)
- {
- dispcount=0;
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|