您当前的位置:五五电子网电子知识单片机-工控设备源码-程序基于单片机的AD转换的数码管显示程序 正文
基于单片机的AD转换的数码管显示程序

基于单片机的AD转换的数码管显示程序

点击数:7654 次   录入时间:03-04 11:52:37   整理:http://www.55dianzi.com   源码-程序

  *本例程采用AD0804芯片,硬件电路:cs片选端接P2.3,WR写数据端写P3.6,RD读数据端接P3.7,锁存端接P2.6脚,数码管位选端分别接P3.2 ,P3.3,P3.4,段选端接P1口*/

  #include<reg52.h>//头文件

  #define uint unsigned int//宏文件

  #define uchar unsigned char//宏文件

  uchar num;//变量

  void delay3(uint z);//延时定义

  void dissy();//延时函数定义

  sbit ge=P3^2;//个位定义

  sbit shi=P3^3;//十位定义

  sbit bai=P3^4;//百位定义

  sbit ad_cs=P2^3;//片选端

  sbit ad_wr=P3^6;//写数据端

  sbit ad_rd=P3^7;//读数据端

  sbit pian=P2^6;//锁存器片选

  void add();//ad转换子函数

  void delay(uint i);//延时子函数申明

  uchar code table[]={

  0xc0,0xf9,0xa4,0xb0,0x99,

  0x92,0x82,0xf8,0x80,0x90,

  0x88,0x83,0xc6,0xa1,0x86,

  0x8e

  };//数组

  /************主函数**********/

  void main()

  {

  while(1)

  {

  add();//调用AD转换子函数

  dissy();//数码管显示子函数

  }

  }

  /************AD转换子函数**********/

  void add()//AD转换子函数

  {

  uchar i;

  ad_cs=1;//将片选关闭

  ad_cs=0;//将片选打开

  ad_wr=1;//写数上升沿

  ad_wr=0;//写数下降沿

  ad_wr=1;//写数上升沿

  P1=0xff;//送数到P0口

  ad_rd=1;//读数上升沿

  delay(25);//延时一会儿

  ad_rd=0;//读数下降沿

  //////**************因为AD转换时间周期长,我现在的数码管没有采用锁存器,AD转换时间大于显示时间,所以显示时会闪烁,解决此问题方法是,连续调用了显示子程序七次,这样显示时就和AD转换时一至,显示出来的数就不闪了********************//////

  for(i=0;i<7;i++)                //调用7次,相当于delay(255)

  void dissy();

  //////**********************************//////

  num=P1;//将数给计数器num

  }

  /************显示子函数**********/

  void  dissy()//显示子函数

  {

  P0=table[num/100];//百位显示数据

  bai=0;//百位打开

  delay(14);//延时一会

  bai=1;//关闭百位

  P0=table[num%100/10];//十位显示数据

  shi=0;//十位打开

  delay(14);//延时一会

  shi=1;//关闭十位

  P0=table[num%10];//百位显示数据

  ge=0;//关闭十位

  delay(14);//延时一会

  ge=1;//关闭十位

  }

  /**************延时子函数*************/

  void delay(uint i)//延时函数

  {

  uint j,k;//定义变量

  for(j=i;j>0;j--)//外循环

  for(k=30;k>0;k--);//内循环

  }




本文关键字:单片机  程序  数码管  源码-程序单片机-工控设备 - 源码-程序