新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機驅動ADC0832模數轉換程序-lcd1602顯示

        51單片機驅動ADC0832模數轉換程序-lcd1602顯示

        作者: 時間:2016-12-02 來源:網絡 收藏
        /*這個芯應用不多*/

        #include
        #define uchar unsigned char
        #define uint unsigned int
        uchar Chan0Value,Chan1Value;
        sbit RS=P1^0; //1602各控制腳
        sbit RW=P1^1;
        sbit EN=P1^2;
        sbit Cs0832= P2^0; //0832各控制腳
        sbit Clk0832= P3^6;
        sbit Di0832= P3^7;
        sbit Do0832= P3^7;

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

        void delay1ms(unsigned int ms)//延時1毫秒(不夠精確的)
        {
        int i,j;
        for(i=0;i for(j=0;j<100;j++);
        }

        /**********************************ADC0832********************************/
        uchar GetValue0832(uchar Channel) //獲取數值返回。入口:通道(0或1)。出口:數值。
        {
        uchar i,Dat1=0,Dat2=0;
        Clk0832=0;
        Di0832=1;
        Cs0832=0;
        Clk0832=1;
        Clk0832=0; //第一脈沖,開始位
        Di0832=1;
        Clk0832=1;
        Clk0832=0; //第二脈沖,模式選擇
        Di0832=Channel;//通道選擇,0或1
        Clk0832=1;
        Clk0832=0; //第三脈沖,通道選擇
        Di0832=1; //釋放輸入線
        for(i=0;i<8;i++) //從高到低取一次數
        {
        Clk0832=1; //下降沿有效
        Clk0832=0;
        if(Do0832) Dat1|=0x80>>i;
        }
        for(i=0;i<8;i++) //從低到高取一次數
        {
        if(Do0832) Dat2|=0x01< Clk0832=1; //下降沿有效
        Clk0832=0;
        }
        Cs0832=1;
        Di0832=1;
        Clk0832=1; //數據讀取完成,釋放所有數據線
        if(Dat1==Dat2)
        return Dat1; //校驗兩次數相等,輸出
        }
        /*本程序與其他一般程序最大的不同就是要讀兩次
        一次從最高位到最低位,一次從最低位到最高位,
        兩次所讀值相等即為正常,可以輸出*/
        /******************************LCD1602**************************************/
        /*************************lcd1602程序**************************/

        void wr_com(unsigned char com)//寫指令//
        { delay1ms(1);
        RS=0;
        RW=0;
        EN=0;
        P0=com;
        delay1ms(1);
        EN=1;
        delay1ms(1);
        EN=0;
        }
        void wr_dat(unsigned char dat)//寫數據//
        { delay1ms(1);
        RS=1;
        RW=0;
        EN=0;
        P0=dat;
        delay1ms(1);
        EN=1;
        delay1ms(1);
        EN=0;
        }
        void lcd_init()//初始化設置//
        {
        delay1ms(15);
        wr_com(0x38);delay1ms(5);
        wr_com(0x80);delay1ms(5);
        wr_com(0x01);delay1ms(5);
        wr_com(0x06);delay1ms(5);
        wr_com(0x0c);delay1ms(5);
        }
        void writevalue(uchar add,uchar dat)
        {
        wr_com(0x80+add);
        wr_dat(dat);
        }
        void zifuchuan(uchar *ch)
        {
        while(*ch!=0)
        wr_dat(*ch++);
        delay1ms(20);
        }
        void main(void)
        {
        lcd_init();
        while(1)
        {
        Chan0Value=GetValue0832(0);
        delay1ms(100);
        Chan1Value=GetValue0832(1);

        wr_com(0x80);
        zifuchuan("Chanal 0:");
        writevalue(10,Chan0Value/100+0x30);
        writevalue(11,Chan0Value%100/10+0x30);
        writevalue(12,Chan0Value%100%10+0x30);

        wr_com(0x80+0x40);
        zifuchuan("Chanal 1:");
        writevalue(0x40+10,Chan1Value/100+0x30);
        writevalue(0x40+11,Chan1Value%100/10+0x30);
        writevalue(0x40+12,Chan1Value%100%10+0x30);
        delay1ms(1000);
        }
        }
        /*此程序只為調 通ADC0832,沒有對電壓值進行轉換
        要想得到準確電壓值,請把Chan0Value和Chan1Value
        的值乘以5再除以255即可。當某一通道沒有輸入而
        懸空時,有可能會顯示256的中間值128,這是干擾,可
        以不理會*/



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 区。| 扶绥县| 金阳县| 牡丹江市| 合山市| 金坛市| 安岳县| 金平| 高密市| 韶关市| 丹阳市| 怀集县| 平南县| 紫金县| 文山县| 道孚县| 留坝县| 西藏| 林周县| 广东省| 淮安市| 兰州市| 三台县| 鹤峰县| 常州市| 长岭县| 平昌县| 大洼县| 安西县| 云霄县| 巴彦县| 比如县| 三门县| 富源县| 朔州市| 方城县| 南充市| 简阳市| 夹江县| 周至县| 会泽县|