【PROTEUS仿真】使用AT89C51控制AD0809进行采样并显示
原理图及运行效果源程序#include <reg52.h>//头文件#define uchar unsigned char//宏定义无符号字符型#define uintunsignedint//宏定义无符号整型code uchar seg7code[10]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0...
·
原理图及运行效果

源程序
#include <reg52.h> //头文件
#define uchar unsigned char //宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
code uchar seg7code[10]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码
sbit ST=P3^6; //A/D启动转换信号
sbit OE=P3^7; //数据输出允许信号
sbit EOC=P3^2; //A/D转换结束信号
sbit ALE=P3^3;
void delay(uchar t)
{
while(t--);
}
//在第N位显示num数据,是否带点显示
void seg_disp(uchar n,uchar num,uchar dot)
{
P0=0XFF;
P2=0xff&(~(0x01<<(n+4)));//选择位
P0=seg7code[num]&(0xff&(~(dot<<7)));
delay(100);
}
void disp(uint num)
{
seg_disp(0,num/1000,1);//显示千位,带点
seg_disp(1,num%1000/100,0);//显示百位
seg_disp(2,num%100/10,0);//显示十位
seg_disp(3,num%100,0);//显示各位
}
uint read_ADC0809(void)
{
uint ADC_Value;
OE=0; //开始采集,按照ADC0809手册时序
ST=0;
ALE=0;
ALE=1;
ST=1;//开始数据转换
ALE=0;
ST=0; //停止数据转换
delay(10);
while(!EOC); //等待数据转换完毕
OE=1; //允许数据输出信号
ADC_Value=P1; //读取数据
OE=0; //关闭数据输出允许信号
return ADC_Value;
}
void main()
{
while(1)
{
disp(read_ADC0809()*196/10); //数码管显示函数,数字量转换为电压需要乘以19.6
}
}
更多推荐


所有评论(0)