数模转换ADC08009应用

发布时间: 2024-08-14
来源: 电子工程世界

 

 1 #include              //头文件

 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;i18    {

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 }       


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。