新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STC12c5a60s2單片機內部ADC應用測試外部電壓

        STC12c5a60s2單片機內部ADC應用測試外部電壓

        作者: 時間:2016-12-03 來源:網絡 收藏
        #include

        #include /*use _nop_() function*/
        #define uchar unsigned char
        #define uint unsigned int

        本文引用地址:http://www.104case.com/article/201612/325259.htm

        uint k;
        uchar ch ;
        /*******************延時****************/
        void Delay (uint j)
        {
        uint i;
        while(j--)
        {
        i=111;while(i--);
        }
        }
        void InitADC()
        {
        P1M0=0X01;
        P1M1=0X01;
        P1ASF=0XFF; //相應端口當ADC使用時,端口要置位
        ADC_RES=0;
        ADC_CONTR=0XE0; //1110 0000 開電源,最高速
        Delay(50);
        }
        int GetADC(uchar ch)
        {
        int result;
        ADC_CONTR|=ch; //選擇通道
        _nop_(); _nop_();
        _nop_(); _nop_();
        ADC_CONTR|=0x08; //0000 0100 開始AD轉換
        while(!(ADC_CONTR&ADC_FLAG)); //查詢ADC_FLOG是否置位1 轉換結束
        ADC_CONTR &= ~ADC_FLAG; //Clear ADC interrupt flag
        //result=ADC_RES;//1111 0111 結束AD轉換
        result=ADC_RES*4+ADC_RESL;
        return(result);
        }

        /////////////////////平均濾波//////////////////////
        #define N 100
        float filter(uchar ch)
        {
        float value=0;
        uchar count;
        for(count=0;count{
        value+=GetADC(ch); //100次采樣求平均
        }
        value/=202.5;//單片機電壓5.05V
        //value/=205;
        //value/=2048;
        //value/=512;
        //value/=100;
        //value=value*5.0/1024;
        return (value);
        }
        /****************1602液晶******************/
        sbit RS = P2^4;
        sbit RW = P2^5;
        sbit E = P2^6;
        /*******************查表0~f****************/
        uchar code LCD_display_code[16]=
        {
        0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
        0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x046
        };
        void lcd_Write_com(uchar com)
        {
        RS=0; //定義指令寄存器
        RW=0; //寫允許
        P0=com; //寫指令
        Delay(5);E=1;//片選端上拉
        Delay(5);E=0;//下降沿鎖存
        }
        void lcd_write_date(uchar date)
        {
        RS=1;//定義數據寄存器
        RW=0;//寫允許
        P0=date;//寫數據
        Delay(5);E=1;//片選端上拉
        Delay(5);E=0;//下降沿鎖存
        }
        void dis_lcd1602(uchar x,uchar y,uchar dat)
        {
        uchar add;
        if(y==1) add=(0x80+x);
        if(y==2) add=(0xc0+x);
        lcd_Write_com(add);//寫指令
        lcd_write_date(dat);//寫數據
        }
        void lcd1602_init()
        {
        lcd_Write_com(0x38);//設置8位格式,2行,5*7
        lcd_Write_com(0x01);//清屏
        lcd_Write_com(0x0c);//整體顯示,關光標,不閃爍
        lcd_Write_com(0x06);//設定輸入方式,增量不移位
        lcd_Write_com(0x80);//初始坐標
        }
        /*******************液晶顯示漢字程序****************/
        void hz_lcdDis(uchar x,uchar y,uchar *p) //漢字顯示
        {
        uchar i=0,temp;
        if(x)temp = 0x40; else temp = 0;
        for(i=y;*p!=

        主站蜘蛛池模板: 洪江市| 静宁县| 河源市| 阿克陶县| 盐边县| 禄丰县| 宁德市| 永定县| 双鸭山市| 南康市| 闵行区| 抚顺县| 锡林浩特市| 彝良县| 东城区| 陇川县| 闽清县| 温宿县| 治县。| 普陀区| 陇南市| 亳州市| 克什克腾旗| 汾阳市| 剑阁县| 凤台县| 竹北市| 溆浦县| 广河县| 灵石县| 郧西县| 西和县| 定襄县| 九台市| 兰考县| 汕尾市| 从化市| 大埔县| 临清市| 来安县| 德兴市|