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

標題: 求助關于ADC轉換的問題 [打印本頁]

作者: idealize    時間: 2016-7-13 17:28
標題: 求助關于ADC轉換的問題
請看我寫的程序是不是有地方錯誤,為什么AD的IN0口的輸入模擬電壓與轉換之后的電壓不同?(程序在附件中)

ADC轉換.doc

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


作者: danpianji258    時間: 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時候寫的程序!實現最簡單的功能
作者: danpianji258    時間: 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;

}
作者: idealize    時間: 2016-7-18 14:34
好的  謝謝您
作者: idealize    時間: 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;       
}





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产免费观看一区 | 视频三区 | 一区二区三区国产好的精 | 丁香六月伊人 | 亚洲综合首页 | 欧美伦理一区 | 久久精品视频99 | 欧美一区二区三区 | 亚洲网站在线观看 | 免费国产一区二区视频 | 午夜欧美 | 亚洲一区二区精品视频 | 久久精品视频网站 | 看a网站| 日韩欧美国产一区二区 | 久久天天躁狠狠躁夜夜躁2014 | 国产精品欧美精品日韩精品 | 北条麻妃99精品青青久久主播 | 亚洲a在线观看 | 欧美日韩亚洲一区 | 欧洲国产精品视频 | 午夜激情在线 | 在线一区二区三区 | 九九热在线观看视频 | 欧美日韩精品一区二区三区四区 | 在线免费观看视频你懂的 | 日韩精品免费视频 | 五月婷婷激情网 | 天堂视频免费 | 亚洲国产激情 | 国产美女免费视频 | 亚洲人成人一区二区在线观看 | 一级毛片大全免费播放 | 亚洲午夜精品 | 羞羞视频在线观看网站 | 视频在线亚洲 | 一区二区三区国产 | 亚洲欧美日韩一区二区 | 伊人二区 | 亚洲欧美综合精品久久成人 | 久久一区二区三区四区 |