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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5543|回復: 5
打印 上一主題 下一主題
收起左側

求助關于ADC轉換的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:81140 發表于 2016-7-13 17:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
20黑幣
請看我寫的程序是不是有地方錯誤,為什么AD的IN0口的輸入模擬電壓與轉換之后的電壓不同?(程序在附件中)

ADC轉換.doc

36.5 KB, 下載次數: 8, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:76158 發表于 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;

}

只是個簡單的 沒有做平均求值!也是開始學ADC時候寫的程序!實現最簡單的功能
回復

使用道具 舉報

板凳
ID:76158 發表于 2016-7-15 10:31 | 只看該作者
給你看下 ADC 最簡單測試程序 帶數碼管顯示
這也是開始的時候自己寫的
#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;

}
回復

使用道具 舉報

地板
ID:81140 發表于 2016-7-18 14:34 | 只看該作者
好的  謝謝您
回復

使用道具 舉報

5#
ID:81140 發表于 2016-7-18 21:22 | 只看該作者
danpianji258 發表于 2016-7-15 10:31
給你看下 ADC 最簡單測試程序 帶數碼管顯示
這也是開始的時候自己寫的
#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數據口D0-D7
#define ADC_DataPort        P0         //ADC0809數據口D0-D7
sbit OE=P3^5;  //ADC0809輸出使能
sbit ST=P3^7;  //轉換開始控制
sbit CLK=P3^4; //ADC0809時鐘
sbit EOC=P3^6; //ADC0809轉換結束信號
//sbit ALE=P2^0;
//sbit ADDA=P2^2;
//sbit ADDB=P2^3;
//sbit ADDC=P2^5;
sbit RS=P2^4;  //LCD1602指令數據選擇端
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;                 //選擇指令或數據
        RW=0;                 //寫操作
        _nop_();_nop_();_nop_();
        E=1;
        _nop_();_nop_();_nop_();
        LCD1602_DatPort=dat;//送數據到LCD1602       
        _nop_();_nop_();_nop_();       
        E=0;
        delay(1);                       
}
//設置顯示位置坐標子程序
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數據口
        ST=0;         //開始信號初始化
        OE=1;         //始終輸出
        CLK=0;         //時鐘端口初始化
        EOC=1;         //轉換結束信號
//        ALE=1;
//        ADDA=0;
//        ADDB=0;
//        ADDC=0;
        //定時器1 作為轉換的時鐘脈沖
        TMOD=0X01;
        TH0=(65536-100)/256;
        TL0=(65536-100)%256;
        ET0=1;
        TR0=1;
        EA=1;
        delay(200);

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

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

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

        a=(196*n)/10;

        SetXY(4,1); //設置顯示位置
        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;       
}
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区三区视频 | 青青草国产在线观看 | 国产精品自产拍 | 亚洲第一区久久 | 人人做人人澡人人爽欧美 | 久久精品亚洲精品国产欧美 | 国产精品福利在线 | 99国产视频 | 国产精品视频久久 | 日本一区二区三区视频在线 | 日韩精品一区二区三区中文在线 | 亚洲免费一区 | 亚洲网站在线观看 | 超碰人人在线 | 久久精彩视频 | 日本久久精 | 亚洲视频在线免费 | 欧美一区二区三区在线观看 | xnxx 日本免费 | 亚洲一区二区三区在线播放 | 麻豆亚洲| 天天天操操操 | 91在线观看视频 | 国产一区二区在线视频 | 91视频.| 男女精品久久 | 国产91亚洲精品 | 中文字幕一区二区三区在线乱码 | 影音先锋中文字幕在线观看 | 欧美一级欧美三级在线观看 | 日韩中文在线观看 | 国产精品一区二区三区在线 | 成人激情视频免费观看 | 中文字幕爱爱视频 | 97色在线视频 | 亚洲综合色丁香婷婷六月图片 | 涩涩片影院 | 国产在线a视频 | 91精品国产综合久久久久久蜜臀 | 四虎影院在线观看免费视频 | 男女激情网站免费 |