/************************************************************************/
/****************** 广州信先行电子科技有限公司 ****************/
/****************** WWW.XXXMCU.COM ****************/
/****************** <ADC0831模数转换> ****************/
/****************** MCU:STC89C52RC ****************/
/***********************************************************************/
/*ADC0831模数转换程序,运行程序后,调节下电位器,你看看数据会如何变化*/
#include <reg51.h>
#include <intrins.h>
/***********定义数码管显示控制端口************/
#define LED P0
/*********管脚定义公共端输入控制信号线***********/
sbit No1 = P2^4;
sbit No2 = P2^5;
sbit No3 = P2^6;
sbit No4 = P2^7;
/*********宏定义,定义数码管显示第几位***********/
#define DIS_NO1 No1=0; No2=1; No3=1; No4=1
#define DIS_NO2 No1=1; No2=0; No3=1; No4=1
#define DIS_NO3 No1=1; No2=1; No3=0; No4=1
#define DIS_NO4 No1=1; No2=1; No3=1; No4=0
/*********共阳数码管0-9数码表***********/
code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x7f,0xff};
sbit ADC0831_CS=P1^3; //连接ADC0831的CS脚
sbit SDA= P1^5; //连接ADC0831的SDA脚
sbit SCL= P1^4; //连接ADC0831的SCL脚
sbit DS1302_DISABLE = P1^2;// DS1302片选,因这两芯片采用同一数据脚(SDA,SCL),读写时将DS1302片选关掉,否则发生冲突
/****************数字的显示函数*************************/
/******** Num为要显示的整数数值*************/
void display( unsigned char num );
/***********延时子函数,5个空指令**************/
void delay();
/*定义该函数为读取ADC0831的数据*/
unsigned char ad0831read(void);
void main(void) //入口函数
{
unsigned char i=254,AD_num=0;
DS1302_DISABLE=0;
while(1)
{
i++;
if(i==255)
{
AD_num=ad0831read(); //这里为循环255个周期读取一次0831,因CPU运行比较快,没必要每次循环都去读取
i=0;
}
display(AD_num); //输出显示
}
}
/*本函数主要是对应时序图来理解本函数是模拟0831的串口协议进行的*/
unsigned char ad0831read(void)
{
unsigned char i=0,tmp=0;
SDA=1;
ADC0831_CS=0;
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
for(i=0;i<8;i++)
{
tmp<<=1;
if(SDA)
tmp++;
SCL=1;
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
}
ADC0831_CS=1;
return tmp;
}
void display(unsigned char num)//显示
{
DIS_NO3; //选中第三只灯
LED=table[num/16];
delay();
LED=0xFF;
DIS_NO4; //选中第四只灯
LED=table[num%16];
delay();
LED=0xFF;
}
/************5个空指令延长***********/
void delay(void)
{
unsigned char i=100;
while(i--);
}
评论0
最新资源