1 #include <reg52.h> //头文件 2 #define uchar unsigned char //宏定义无符号字符型 3 #define uint unsigned int //宏定义无符号整型 4 code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟 5 uchar wei[4]={0XEf,0XDf,0XBf,0X7f}; //位的控制端 //位控制码 6 sbit ST=P3^0; //A/D启动转换信号 7 sbit OE=P3^1; //数据输出允许信号 8 sbit EOC=P3^2; //A/D转换结束信号 9 sbit CLK=P3^3; //时钟脉冲 10 uint z,x,c,v,AD0809, date; //定义数据类型 11 /****************************************************************** 12 延时函数 13 ******************************************************************/ 14 void delay(uchar t) 15 { 16 uchar i,j; 17 for(i=0;i<t;i++) 18 { 19 for(j=13;j>0;j--); 20 { ; 21 } 22 } 23 } 24 /********************************************************************** 25 数码管动态扫描 26 *********************************************************************/ 27 void xianshi() //显示函数 28 { 29 uint z,x,c,v; 30 z=date/1000; //求千位 31 x=date%1000/100; //求百位 32 c=date%100/10; //求十位 33 v=date%10; //求个位 34 35 P2=0XFF; 36 P0=seg7code[z]&0x7f; 37 P2=wei[0]; 38 delay(80); 39 P2=0XFF; 40 P0=seg7code[x]; 41 P2=wei[1]; 42 delay(80); 43 P2=0XFF; 44 P0=seg7code[c]; 45 P2=wei[2]; 46 delay(80); 47 P2=0XFF; 48 P0=seg7code[v]; 49 P2=wei[3]; 50 delay(80); 51 P2=0XFF; 52 } 53 /************************************************************************* 54 CLK振荡信号 55 **************************************************************************/ 56 void timer0( ) interrupt 1 //定时器0工作方式1 57 { 58 59 TH0=(65536-2)/256; //重装计数初值 60 TL0=(65536-2)%256; //重装计数初值 61 CLK=!CLK; //取反 62 } 63 64 /************************************************************************* 65 主函数 66 **************************************************************************/ 67 void main() 68 { 69 TMOD=0X01; //定时器中断0 70 71 CLK=0; //脉冲信号初始值为0 72 TH0=(65536-2)/256; //定时时间高八位初值 73 TL0=(65536-2)%256; //定时时间低八位初值 74 EA=1; //开CPU中断 75 ET0=1; //开T/C0中断 76 TR0=1; 77 while(1) //无限循环 78 { 79 ST=0; //使采集信号为低 80 ST=1; //开始数据转换 81 ST=0; //停止数据转换 82 while(!EOC); //等待数据转换完毕 83 OE=1; //允许数据输出信号 84 AD0809=P1; //读取数据 85 OE=0; //关闭数据输出允许信号 86 if(AD0809>=251) //电压显示不能超过5V 87 AD0809=250; 88 date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值 89 xianshi(); //数码管显示函数 90 91 } 92 }