久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5403|回復(fù): 5
收起左側(cè)

求助關(guān)于ADC轉(zhuǎn)換的問題

[復(fù)制鏈接]
ID:81140 發(fā)表于 2016-7-13 17:28 | 顯示全部樓層 |閱讀模式
20黑幣
請看我寫的程序是不是有地方錯誤,為什么AD的IN0口的輸入模擬電壓與轉(zhuǎn)換之后的電壓不同?(程序在附件中)

ADC轉(zhuǎn)換.doc

36.5 KB, 下載次數(shù): 8, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

ID:76158 發(fā)表于 2016-7-15 10:30 | 顯示全部樓層
下載東西還要黑幣 這么黑 還是來要人幫忙的?
給你個程序看看吧!
#include<STC15F2K60S2.H>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define VCC 4.97
uchar code dsp_duan[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0x3e,0xe0,0xfe,0xf6};
uchar code dsp_dian[]={0xfd,0x61,0xdb,0xf3,0x67,0xb7,0xbf,0xe1,0xff,0xfd};
sbit du=P1^1;
sbit we=P1^0;
uint AVG=0;
uint aa,bb,cc,dd;



//_____________________________________

void delay1ms()                //@22.1184MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 22;
        j = 128;
        do
        {
                while (--j);
        } while (--i);
}

void display()
{                           
                du=1;
                        P3=dsp_dian[aa];
                        du=0;
                        P3=0Xff;
                       
                        we=1;
                        P3=0X7F; //For table[8];
                        we=0;
                        delay1ms();                 


                                du=1;
                                P3=dsp_duan[bb];
                                du=0;
                                P3=0Xff;
                               
                                we=1;
                                P3=0XBF;
                                we=0;
                                delay1ms();
                                       
                                    du=1;
                                        P3=dsp_duan[cc];
                                        du=0;
                                        P3=0XFF;
                                       
                                        we=1;
                                        P3=0Xdf;
                                        we=0;
                                        delay1ms();


}

void adc_init()
{
        uint i;
        ADC_CONTR|=0X80;
        for(i=0;i<10000;i++);
        P1ASF|=0X80;
        ADC_CONTR=0XE7;
        delay1ms();
        ADC_CONTR|=0X08;
        EADC=1;
        EA=1;
}

void main()
{
        float Vin;
        adc_init();
        while(1)
        {
             Vin=(VCC*AVG)/1023;
                dd=(Vin*1000);
                aa=dd/1000;
                bb=dd/100%10;
                cc=dd%100/10;
                display();

        }

}

void adc() interrupt 5
{
uint AD_DAT=0;
uchar TMP=0;
ADC_CONTR&=0XE7;
AD_DAT=ADC_RES;
AD_DAT<<=2;
TMP=ADC_RESL;
TMP&=0X03;
AD_DAT|=TMP;
AVG=AD_DAT;
ADC_CONTR|=0X88;

}

只是個簡單的 沒有做平均求值!也是開始學(xué)ADC時候?qū)懙某绦颍崿F(xiàn)最簡單的功能
回復(fù)

使用道具 舉報

ID:76158 發(fā)表于 2016-7-15 10:31 | 顯示全部樓層
給你看下 ADC 最簡單測試程序 帶數(shù)碼管顯示
這也是開始的時候自己寫的
#include<STC15F2K60S2.H>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define VCC 4.97
uchar code dsp_duan[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0x3e,0xe0,0xfe,0xf6};
uchar code dsp_dian[]={0xfd,0x61,0xdb,0xf3,0x67,0xb7,0xbf,0xe1,0xff,0xfd};
sbit du=P1^1;
sbit we=P1^0;
uint AVG=0;
uint aa,bb,cc,dd;



//_____________________________________

void delay1ms()                //@22.1184MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 22;
        j = 128;
        do
        {
                while (--j);
        } while (--i);
}

void display()
{                           
                du=1;
                        P3=dsp_dian[aa];
                        du=0;
                        P3=0Xff;
                       
                        we=1;
                        P3=0X7F; //For table[8];
                        we=0;
                        delay1ms();                 


                                du=1;
                                P3=dsp_duan[bb];
                                du=0;
                                P3=0Xff;
                               
                                we=1;
                                P3=0XBF;
                                we=0;
                                delay1ms();
                                       
                                    du=1;
                                        P3=dsp_duan[cc];
                                        du=0;
                                        P3=0XFF;
                                       
                                        we=1;
                                        P3=0Xdf;
                                        we=0;
                                        delay1ms();


}

void adc_init()
{
        uint i;
        ADC_CONTR|=0X80;
        for(i=0;i<10000;i++);
        P1ASF|=0X80;
        ADC_CONTR=0XE7;
        delay1ms();
        ADC_CONTR|=0X08;
        EADC=1;
        EA=1;
}

void main()
{
        float Vin;
        adc_init();
        while(1)
        {
             Vin=(VCC*AVG)/1023;
                dd=(Vin*1000);
                aa=dd/1000;
                bb=dd/100%10;
                cc=dd%100/10;
                display();

        }

}

void adc() interrupt 5
{
uint AD_DAT=0;
uchar TMP=0;
ADC_CONTR&=0XE7;
AD_DAT=ADC_RES;
AD_DAT<<=2;
TMP=ADC_RESL;
TMP&=0X03;
AD_DAT|=TMP;
AVG=AD_DAT;
ADC_CONTR|=0X88;

}
回復(fù)

使用道具 舉報

ID:81140 發(fā)表于 2016-7-18 14:34 | 顯示全部樓層
好的  謝謝您
回復(fù)

使用道具 舉報

ID:81140 發(fā)表于 2016-7-18 21:22 | 顯示全部樓層
danpianji258 發(fā)表于 2016-7-15 10:31
給你看下 ADC 最簡單測試程序 帶數(shù)碼管顯示
這也是開始的時候自己寫的
#include

抱歉請您幫忙看一下程序。
#include<reg52.h>
#include<intrins.h>
#define uint8 unsigned char
#define uint16 unsigned int
//端口聲明
#define CMD 0x00
#define DAT 0X01
#define LCD1602_DatPort P1         //LCD1602數(shù)據(jù)口D0-D7
#define ADC_DataPort        P0         //ADC0809數(shù)據(jù)口D0-D7
sbit OE=P3^5;  //ADC0809輸出使能
sbit ST=P3^7;  //轉(zhuǎn)換開始控制
sbit CLK=P3^4; //ADC0809時鐘
sbit EOC=P3^6; //ADC0809轉(zhuǎn)換結(jié)束信號
//sbit ALE=P2^0;
//sbit ADDA=P2^2;
//sbit ADDB=P2^3;
//sbit ADDC=P2^5;
sbit RS=P2^4;  //LCD1602指令數(shù)據(jù)選擇端
sbit RW=P2^6;  //LCD1602讀寫選擇端
sbit E=P2^7;   //LCD1602使能端

//延時子程序
void delay(uint16 t)
{
        uint16 a;
        for(;t>0;t--)
        {
                for(a=124;a>0;a--)
                {}
        }       
}
//1602寫子程序
void Write1602(uint8 dat,bit rs)
{
        E=0;
        RS=rs;                 //選擇指令或數(shù)據(jù)
        RW=0;                 //寫操作
        _nop_();_nop_();_nop_();
        E=1;
        _nop_();_nop_();_nop_();
        LCD1602_DatPort=dat;//送數(shù)據(jù)到LCD1602       
        _nop_();_nop_();_nop_();       
        E=0;
        delay(1);                       
}
//設(shè)置顯示位置坐標(biāo)子程序
void SetXY(uint8 x,uint8 y)
{
        x=x&0x0f;//防止超出X范圍
        y=y&0x01;//防止超出Y范圍
        if(y==0)
        {
                Write1602(0x80+x,CMD);       
        }
        else
        {
                Write1602(0x80+0x40+x,CMD);       
        }       
}
//1602寫字符串子程序
void LCD1602_WrStrs(uint8* str)
{
        while(*str!='\0') //終止符
        {
                Write1602(*str,DAT);
                str++;       
        }       
}

//初始化子程序
void Init()
{
        P0=0XFF; //ADC0809數(shù)據(jù)口
        ST=0;         //開始信號初始化
        OE=1;         //始終輸出
        CLK=0;         //時鐘端口初始化
        EOC=1;         //轉(zhuǎn)換結(jié)束信號
//        ALE=1;
//        ADDA=0;
//        ADDB=0;
//        ADDC=0;
        //定時器1 作為轉(zhuǎn)換的時鐘脈沖
        TMOD=0X01;
        TH0=(65536-100)/256;
        TL0=(65536-100)%256;
        ET0=1;
        TR0=1;
        EA=1;
        delay(200);

        Write1602(0x38,CMD); //8位數(shù)據(jù)格式,兩行顯示,5*7點陣
        Write1602(0x38,CMD); //8位數(shù)據(jù)格式,兩行顯示,5*7點陣

        Write1602(0x0C,CMD); //打開顯示,關(guān)閉光標(biāo),光標(biāo)不閃爍
        Write1602(0x01,CMD); //清屏
        delay(10);

        SetXY(4,0); //設(shè)置顯示位置
        LCD1602_WrStrs("ADC TEST!");
}
uint8 ADC_Conventer()
{
        uint8 ad,alc;//局部變量
        ST=1;        //啟動轉(zhuǎn)換,并鎖存地址
        delay(1);
        ST=0;
        delay(10);
        while(EOC==1); //等待轉(zhuǎn)換結(jié)束
        while(EOC==0);
        OE=1;                   //使能數(shù)據(jù)輸出
        delay(100);
        ad=ADC_DataPort;                   //讀取ADC轉(zhuǎn)換值
        OE=0;
        //alc=ad;                   //禁止數(shù)據(jù)輸出
        return ad;       
}
//裝載子程序
void disload(n)
{
        uint16 a;

        a=(196*n)/10;

        SetXY(4,1); //設(shè)置顯示位置
        Write1602(n/1000+'0',DAT);
        Write1602('.',DAT);
        Write1602(n%1000/100+'0',DAT);
        Write1602(n%100/10+'0',DAT);
        Write1602(n%10+'0',DAT);
        Write1602('V',DAT);       
}
void main()
{
        Init();
        while(1)
        {               
                disload(ADC_Conventer());
                delay(500);               
        }
}
void timer0() interrupt 1
{
        TH0=(65536-100)/256;
        TL0=(65536-100)%256;
        CLK=!CLK;       
}
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费h在线| 色小姐综合网 | av网站在线免费观看 | 成人精品一区二区三区 | 国产91在线 | 欧美 | 国产在线观看一区二区 | 中文字幕视频在线观看 | 日韩av一区二区在线观看 | 亚洲美女网站 | 国产7777 | www.男人天堂.com | 日韩在线精品强乱中文字幕 | 一级毛片中国 | 成人精品在线观看 | 国产精品揄拍一区二区 | 91精品久久久久久久久久入口 | 99国产精品久久久久 | 91xxx在线观看 | 亚洲成av片人久久久 | 欧美在线观看一区二区 | 欧美一区二区三区四区在线 | 日韩精品免费 | 成人日韩av | 亚洲视频二区 | 免费看a | 亚洲电影在线播放 | 韩日一区二区 | 黄色av网站在线观看 | 97精品国产 | 天天亚洲 | 日韩视频区| 波多野吉衣久久 | 欧美综合一区二区 | 国产精品日韩欧美一区二区三区 | 日日摸日日碰夜夜爽2015电影 | 欧美日韩一区不卡 | 一区二区三区在线电影 | 免费日韩网站 | 欧美精品影院 | 在线中文视频 | 亚洲毛片 |