浅析ADC0804在MCS-51单片机中的应用

发表时间:2020/12/11   来源:《工程管理前沿》2020年9月25期   作者:汤泽容
[导读] 电压表利用模数转换芯片ADC004经单片机处理之后,通过液晶1602显示出实际的电压值,本文介绍ADC0804芯片实现模数转换,量程为0~5V
        汤泽容
        重庆工贸职业技术学院
        摘要:电压表利用模数转换芯片ADC004经单片机处理之后,通过液晶1602显示出实际的电压值,本文介绍ADC0804芯片实现模数转换,量程为0~5V。
        关键字:单片机,ADC0804,液晶1602
1、引言
        单片机主要应用于自动控制领域,除数字量之外还会遇见模拟量,例如湿度、温度、电压等,它们都是模拟量。由于单片机只能处理数字量,因此就需要将模拟量转换成数字量,所以本文就利用ADC004实现电压的测量。
2、硬件组成
        数字电压表实际是由51单片机最小系统、ADC0804外围电路、液晶1602构成,如下图所示。

3、软件编程
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define LCD_1602_PORT P0
#define ADC_0804_PORT P1
sbit rs_1602=P2^0;
sbit rw_1602=P2^1;
sbit e_1602=P2^2;
sbit cs_adc=P3^4;
sbit wr_adc=P3^6;
sbit rd_adc=P3^5;
sbit intr_adc=P3^7;
float v; uchar AD;
uchar read_adc_0804()
{
        uchar ad,i;
        cs_adc=0;
        wr_adc =0;
        wr_adc =0;//简短延时
        wr_adc =1;
        cs_adc =1;
        while(intr==1)
        {
                i++;
                if(i>220)
                {
                        return 0;
                }        
        }
        cs_adc =0;
        rd_adc =0;
        rd_adc =0;
        ad_adc =ADC_0804_PORT;
        rd_adc =1;
        cs_adc =1;
        return (ad);
}
void write_add(uchar add)
{
        uint x=300;
        rw_1602=0;
        rs_1602=0;
        LCD_1602_PORT =add;
        e_1602=1;
        while(x--);
        e_1602=0;
}
void write_data(uchar dat)
{
        uint x=300;
        rw_1602=0;
        rs_1602=1;
        LCD_1602_PORT =dat;
        e_1602=1;
        while(x--);
        e_1602=0;
}
void LCD_drive(bit x,uchar d)
{
        if(x==1)
        {
                write_data(d);
        }
        else
        {
                write_add(d);
        }
}

void LCD1602_init()
{
        uint x=10000;
        LCD_drive(0,0x38);
        LCD_drive(0,0x0c);
        LCD_drive(0,0x06);
        LCD_drive(0,0x01);
        while(x--);
}
void show_data(uchar add,uint da)
{
        LCD_drive(0,add);
        LCD_drive(1,da/100+48);
        LCD_drive(1,da%100/10+48);
        LCD_drive(1,da%10+48);
}
uchar code as[]="0123456789";
void show_float(uchar add,float n)
{
        uint vv;
        vv=n*100;
        LCD_drive(0,add);
        LCD_drive(1,as[vv/1000]);
        LCD_drive(1,as[vv%1000/100]);
        LCD_drive(1,'.');//.
        LCD_drive(1,as[vv%100/10]);
        LCD_drive(1,as[vv%10]);
}
void main()
{        
        e=0;
        LCD1602_init();
        while(1)
        {
                AD=read_adc_0804();
                v=AD*0.017;
                show_data(0x81,AD);
                show_float(0XC2,v);
        }
}
4、结束
        当编写好上述程序之后,对其使用编译软件进行编译,得到单片机能识别的二进制代码,然后再用编程器将二进制代码烧录到51单片机中,调节对应的电位器,就能看到液晶1602显示电压值以及相应的数字量。
参考文献:
[1] 谭浩强.C程序设计,北京:清华大学出版社,1991
[2] 郭天祥.51单片机C语言教程,北京:电子工业出版社,2010
[3] 余锡存等.单片机原理及接口技术,西安:西安电子科技大学出版社,2000
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: