#include<reg51.h>//头文件 #include<intrins.h>//库文件 #define uchar unsigned char #define uint unsigned int sbit W1=P2^0; sbit W2=P2^1; sbit W3=P2^2; sbit W4=P2^3; /*ADC0809初始定义*/ sbit ST=P3^0;//ADC0809转换开始控制 sbit OE=P3^2;//ADC0809输出允许控制 sbit EOC=P3^1;//ADC0809转换结束信号 sbit CLK=P3^3;//ADC0809转换时钟 uchar date; //数字电压量 uchar code table1[]={ 63,6,91,79,102, 109,125,7,127, 111,119,124,57, 94,121,113,118, 56,115,49,62, 110,64,128,0 }; //延时子函数 void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //显示电压值子函数 void display(uchar date) { uchar tab[3]; uint temp; temp=(date*1.0/255)*500/1.41; tab[0]=temp%10; tab[1]=temp/10%10; tab[2]=temp/100%10; if(tab[2]==0) P0=(0); else P0=(table1[tab[2]]); //再传段码 W1=0; delay(1); //延迟时间2ms以内 W1=1; if(tab[2]==0&&tab[1]==0) P0=(0); else P0=(table1[tab[1]]); //再传段码 W2=0; delay(1); //延迟时间2ms以内 W2=1; P0=(table1[tab[0]]); //再传段码 W3=0; delay(1); //延迟时间2ms以内 W3=1; P0=(0); //再传段码 W4=0;; delay(1); //延迟时间2ms以内 W4=1; } void main()//主函数 { while(1)//大循环 { ST=0; ST=1; //获得上升沿复位 ST=0; //获得下降沿启动转换,同时ALE开锁存 do { CLK=~CLK; //时钟信号 } while(EOC==0);//等待转换结束,eoc=1结束 OE=1;//三态锁存缓冲器打开 date=P1;//数字电压信号输出 OE=0;//三态锁存缓冲器关闭 display(date);//调用液晶显示电压值子函数 } }
|