首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
AD0804单片机控制程序
来源:本站整理  作者:佚名  2011-02-05 21:35:27



/*采用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--);//内循环
}

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:205,796.90000 毫秒