微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > stc12c2052ad测试ad模块

stc12c2052ad测试ad模块

时间:10-02 整理:3721RD 点击:
#include<stc12c2052ad.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//I/O
sbit led1=P3^3;
sbit led2=P3^4;
sbit led3=P3^5;
sbit led4=P3^6;
sbit j4=P3^2;
sbit j3=P3^1;
sbit j2=P3^0;
uchar V;
void delay_ms(uint a)
{
        uint i;
        while(--a!=0)
        {
                for(i=0; i<600; i++);
        }
}
void UART_init(void)
{
        TMOD=0x20;           //定时器工作方式2
        SCON=0x50;           //串口工作方式1
        TH1=0xf3;
        TL1=0xf3;
        PCON=0x80;         //波特率倍频
        TR1=1;   //启动定时器
}
void UART_T(uchar UART_data)
{
        SBUF=UART_data;
        while(TI==0);
        TI=0;
}
void READ_init(uchar CHA)
{
        uchar AD_FIN=0;                //存储AD转换标志
        CHA&=0x07;                        //选择ADC的8个接口中的一个
        ADC_CONTR=0x40;                //ADC转换的速度(0xx00000)
        _nop_();
        ADC_CONTR|=CHA;                //选择AD当前通道
        _nop_();
        ADC_CONTR|=0x80;   //启动AD电源
        delay_ms(1);    //使输入电压达到稳定
}
uchar read(void)
{
        uchar AD_FIN=0;   //存储AD转换标志
        ADC_CONTR|=0x08;        //启动AD转换(00001000)
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        while(AD_FIN==0)  //等待AD转换结束
        {
                AD_FIN=(ADC_CONTR&0x10);   //00010000测试AD转换结束否
        }
        ADC_CONTR&=0xE7;  //11110111清ADC_FLAG位,关闭AD转换
        return(ADC_DATA);  //返回AD转换结果(8位)
}
void relay()
{
        if(V>160)
        {
                led4=1;
                j4=0;
                j3=0;
                j2=0;
        }
        if(V<60)
        {
                led1=1;
                j4=1;
        }
        if(V<100&&V>60)
        {
                led2=1;
                j2=1;
                j3=0;
                j4=0;
        }
        if(V>100&&V<160)
        {
                led3=1;
                j3=1;
                j2=0;
                j4=0;
        }
}
void main()
{
        uchar R;
        UART_init();
        READ_init(7);
        P1M0=0x80;  //P1.7~0;00000001(高阻)P1.7为开漏
        P1M1=0x80;  //P1.7~0:00000000(强推)
        P3M0=0x00;        //P3为强推
        P3M1=0xBF;
        while(1)
        {
                R=read();
                UART_T(R);
                V=read();
                delay_ms(10);
                relay();
                delay_ms(10);
        }
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top