⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad0809.c

📁 通过AD0809将输入的模拟量转化为数字量
💻 C
字号:
/* 作者:史叔伍
完成日期:2008-11-5
程序实现功能:通过AD0809将输入的模拟量转化为数字量,
通过调节电位器来改变模拟电压输入,通过数码管显示电压的变化
*/
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef
};//0,1,2,3,4,5,6,7,8,9,0.,1.,2.,3.,4.,5.,6.,7.,8.,9. */
uint temp;
uchar dis[3];

sbit START=P3^0;  //A/D转换启动信号,高电平有效
sbit OE=P3^1;	 //输出数据允许信号,高电平时,可以从ADC0809读取数据
sbit EOC=P3^2;	 //A/D转换结束信号,高电平时,转换结束
sbit PinA=P3^4;
sbit PinB=P3^5;
sbit PinC=P3^6;

/*延时zms程序*/
void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}

/*开始AD转换函数*/
void startadc(uchar address)
{
    PinC=(bit)(address&0x04); //选择输入通道
	PinB=(bit)(address&0x02);
	PinA=(bit)(address&0x01);
}

/*读取A/D转换后的数据函数*/
uint readdata(void)
{
	START=0;
	START=1;
	START=0;
	while(!EOC); //等待A/D转化结束
    OE=0;
	_nop_();
	_nop_();
	temp=P0&0xff;
	return(temp);
}

/*初始化端口*/
void initio()
{
    P0=0xff;
	PinA=0;
	PinB=0;
	PinC=0;
	START=0;
	OE=0;
	EOC=1;
}

/*将AD读出数据转化为电压值*/
void convert()
{
    uint volt;
    float voltage;
    voltage=temp*0.02;
	volt=voltage*100;
	dis[0]=volt/100;
	dis[1]=volt%100/10;
    dis[2]=volt%10;
}

/*在数码管上显示三位数字*/
void show() 	
{
    P1=0xfb;
	P2=table[dis[0]+10];
	delay(5);
	P1=0xfd;
    P2=table[dis[1]];
	delay(5);
	P1=0xfe;
    P2=table[dis[2]];
	delay(5);   
}

/*主程序*/
void main()
{
	initio();
	while(1)
	{
        startadc(4);//4通道
		temp=readdata();
		convert();
	  	show();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -