|
一个用51单片机和ADC0808做的电压采集的proteus仿真,上面是仿真原理图
源程序:
- #include<reg51.h>
- #include<intrins.h>
- #include<stdio.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit CLK=P2^0;
- sbit ST=P2^1;
- sbit EOC=P2^2;
- sbit OE=P2^3;
- sbit ADDA=P2^5;
- sbit ADDB=P2^6;
- sbit ADDC=P2^7;
- sbit X1=P3^4;
- sbit X2=P3^5;
- sbit X3=P3^6;
- sbit P07=P0^7;
- sbit LED=P3^7;
- uint temp;
- uchar getdata;
- uchar b;
- uchar s;
- uchar g;
- uchar code table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- void delayus(uchar us){
- uchar i;
- while(us--)
- for(i=0;i<120;i++)
- ;
- }
- void init(){
- TMOD=0x21;
- TH0=(65536-200)/256;
- TL0=(65536-200)%256;
- TH1=0XFD;
- TL1=0XFD;
- PCON=0X00;
- SCON=0X50;
- ES=1;
- ET0=1;
- EA=1;
- TR1=1;
- TR0=1;
- }
- void timer0()interrupt 1
- { TH0=(65535-200)/256;
- TL0=(65535-200)%256;
- CLK=~CLK;
- }
- void disp(){
- X1=1;
- X2=0;
- X3=0;
- P0=table[b];
- P07=0;
- X1=1;
- X2=0;
- X3=0;
- delayus(5);
- P0=0XFF;
-
- P0=table[s];
- X1=0;
- X2=1;
- X3=0;
- delayus(5);
- P0=0XFF;
- P0=table[g];
- X1=0;
- X2=0;
- X3=1;
- delayus(5);
- P0=0XFF;
- }
- void adda(uchar z,uchar x,uchar c){
- ADDA=z;
- ADDB=x;
- ADDC=c;
- }
- void send(uchar x){
- EA=0;
- SBUF=x;
- while(TI==0);
- TI=0;
- EA=1;
- }
- void main(){
- P1=0XFF;
- init();
- LED=0;
- P2=0XFF;
- adda(0,0,1);
- while(1){
- ST=0;
- OE=0;
- ST=1;
- ST=0;
- while(EOC==0);
- OE=1;
- getdata=P1;
- send(getdata);
- OE=0;
- temp=getdata*1.0/255*500;
- b=temp/100;
- s=temp/10%10;
- g=temp%10;
- disp();
- }
- }
- void ser()interrupt 4
- {
- if(RI==1){
- RI=0;
- if(SBUF=='A'){
- LED=~LED;
- }
- }
- }
复制代码
|
|