| #include <reg52.h>             //头文件 #define uchar unsigned char           //宏定义无符号字符型
 #define uint  unsigned  int           //宏定义无符号整型
 code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
 uchar wei[4]={0XEf,0XDf,0XBf,0X7f};  //位的控制端                                                                 //位控制码
 sbit ST=P3^0;   //A/D启动转换信号
 sbit OE=P3^1;   //数据输出允许信号
 sbit EOC=P3^2;  //A/D转换结束信号
 sbit CLK=P3^3;  //时钟脉冲
 uint z,x,c,v,AD0809, date;        //定义数据类型
 /******************************************************************
 延时函数
 ******************************************************************/
 void delay(uchar t)
 {
 uchar i,j;
 for(i=0;i<t;i++)
 {
 for(j=13;j>0;j--);
 { ;
 }
 }
 }
 /**********************************************************************
 数码管动态扫描
 *********************************************************************/
 void xianshi() //显示函数
 {
 uint z,x,c,v;
 z=date/1000;                         //求千位
 x=date%1000/100;                 //求百位
 c=date%100/10;                 //求十位
 v=date%10;                         //求个位
 
 P2=0XFF;
 P0=seg7code[z]&0x7f;
 P2=wei[0];
 delay(80);
 P2=0XFF;
 P0=seg7code[x];
 P2=wei[1];
 delay(80);
 P2=0XFF;
 P0=seg7code[c];
 P2=wei[2];
 delay(80);
 P2=0XFF;
 P0=seg7code[v];
 P2=wei[3];
 delay(80);
 P2=0XFF;
 }
 /*************************************************************************
 CLK振荡信号
 **************************************************************************/
 void timer0( ) interrupt 1 //定时器0工作方式1
 {
 
 TH0=(65536-2)/256;          //重装计数初值
 TL0=(65536-2)%256;          //重装计数初值
 CLK=!CLK;                          //取反
 }
 
 /*************************************************************************
 主函数
 **************************************************************************/
 void main()
 {
 TMOD=0X01;                          //定时器中断0
 
 CLK=0;                                  //脉冲信号初始值为0
 TH0=(65536-2)/256;          //定时时间高八位初值
 TL0=(65536-2)%256;          //定时时间低八位初值
 EA=1;                                  //开CPU中断
 ET0=1;                                  //开T/C0中断
 TR0=1;
 while(1)                           //无限循环
 {
 ST=0;                                //使采集信号为低
 ST=1;                                //开始数据转换
 ST=0;                                //停止数据转换
 while(!EOC);                //等待数据转换完毕
 OE=1;                                //允许数据输出信号
 AD0809=P1;                    //读取数据
 OE=0;                                //关闭数据输出允许信号
 if(AD0809>=251)                //电压显示不能超过5V
 AD0809=250;
 date=AD0809*20;                //数码管显示的数据值,其中20为采集数据的毫安值
 xianshi();                        //数码管显示函数
 
 }
 }
 
 
 
 
 |