数模转换ADC08009应用

 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 }        
原文地址:https://www.cnblogs.com/kinson/p/7454869.html