|
模擬數(shù)據(jù)采集器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- /*模擬數(shù)據(jù)采集器*/
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define input P1
- #define TT P0
- #define c 0.01 //設(shè)置一階慣性數(shù)字濾波值//
- sbit START=P3^4;
- sbit CLK=P3^5;
- sbit OE=P3^6;
- sbit EOC=P3^7;
- sbit E=P3^0;
- sbit AA=P3^1;
- sbit BB=P3^2;
- sbit CC=P3^3;
- sbit K1=P2^4;
- sbit K2=P2^5;
- sbit P07=P0^7;
- uchar t1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數(shù)碼管0-9//
- uchar a,b;
- void delay1();
- void display(uint temp1);
- /*******延時(shí)1*******/
- void delay1(void)
- {
- for(a=248;a>0;a--);
- for(b=248;b>0;b--);
- }
- /*******延時(shí)2*******/
- void delay2()
- {
- int i;
- for(i=1000;i>0;i--);
- }
- /*void delay3()
- {
- int j;
- for(j=5000;j>0;j--);
- }
- /***延時(shí)3*****/
- /******A/D轉(zhuǎn)換程序*******/
- uchar AD()
- {
-
- uchar date;
- if(!EOC)
- {
- START=1;
- START=0;
- }
- while(!EOC);
- START=1;
- START=0;
- date=input;
- return date;
- }
- char date;
- char new_date;
- char filter()
- {
- char new_date;
- return 0.01*date+(1-0.01)*new_date;
- }
- /*******加地址,選擇模擬通道*******/
- void get_add(uchar add)
- {
- CC=add/4;
- BB=add%4/2;
- AA=add%2;
- delay2();
- }
- /*******動(dòng)態(tài)掃描程序*******/
- void display(uint temp1)
- {
- uint aa,bb,cc,dd;
- aa=temp1%10;
- temp1/=10;
- bb=temp1%10;
- temp1/=10;
- cc=temp1%10;
- dd=temp1/10;
- P2=0xf1;
- P0=t1[dd];
- delay2();
-
- P2=0xf2;
- P0=t1[cc];
- delay2();
-
- P2=0xf4;
- P0=t1[bb]&0X7F;
- delay2();
-
- P2=0xf8;
- P0=t1[aa];
- delay2();
-
- }
- /*******電壓顯示轉(zhuǎn)溫度顯示函數(shù)*******/
- void c_u(float aa)
- {
- uchar i;
- aa=aa*15.4*5*10/255;
- for(i=0;i<10;i++)
- display(aa);
- }
- /*******主程序*******/
- void main(void)
- {
- uchar rr,tt;
- bit temp=0;
- TMOD=0x02; //定時(shí)器0工作在2模式
- TR0=1;// 定時(shí)器0啟動(dòng)控制位
- ET0=1; //定時(shí)器0的中斷允許開關(guān)
- IT0=1; //外部中斷0觸發(fā)方式選擇位,為1邊沿觸發(fā)
- EX0=1;//允許外部中斷0申請(qǐng)中斷
- EA=1;
- tt=0;
- while(1)
- {
- if(!K2)
- {
- while(!K2);
- temp=~temp;
- }
- if(temp)
- {
- get_add(tt);
- AD();
- rr=input;
- filter();//一階慣性數(shù)字濾波
- c_u(rr);
- if(!K1)
- {
- while(!K1);
- tt++;
- tt=tt%8;
- }
- }
- if(!temp)
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
模擬數(shù)據(jù)采集器.zip
(87.13 KB, 下載次數(shù): 108)
2018-1-9 15:25 上傳
點(diǎn)擊文件名下載附件
程序和仿真
|
評(píng)分
-
查看全部評(píng)分
|