📄 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 + -