<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        ADC0832采集數據1602液晶顯示

        作者:未知   來源:不詳   點擊數:  更新時間:2014年07月29日   【字體:

        #include <intrins.h>

        #include <reg51.h>
        #define uchar unsigned char
        #define uint unsigned int
        sbit cs=P3^0;//對ADC0832進行位定義
        sbit DI=P3^2;
        sbit DO=P3^2;
        sbit clk=P3^1;
        uchar readad[2];
        void adc0832(unsigned char channel);
        void adc0832(uchar channel)//對0832的操作:首先進行傳輸數據前的定義,嚴格按照時序,
        {                              // 其次開始傳數據,如果達到了8位,從新開始傳
          uchar i=0;                   //最后開始收數據  ,不管是傳數據還是收數據,都要有一個完整的時鐘脈沖
          uchar j;//對數據值的定義     //數據每次只能傳輸一位
          uint dat=0;                 //傳數據是從最高位開始將寄存器的數據發送完,接著從低位開始發,比較2次發送的數據是否一樣
          uchar ndat=0;                 //如果一樣則接收如果不一樣則淘汰
          if(channel==0)channel=2;
          if(channel==1)channel=3;
             DI=1;
            _nop_();
              _nop_();
             cs=0;   //拉低cs端
             _nop_();
             _nop_();
             clk=1;  //拉高clk
              _nop_();
              _nop_();
              clk=0;   //拉低clk形成下降沿1
              _nop_();
              _nop_();
              clk=1;
              DI=channel&0x1;
              _nop_();
              _nop_();
              clk=0; //形成下降沿2
              _nop_();
              _nop_();
              clk=1;
              DI=(channel>>1)&0x1;
              _nop_();
              _nop_();
              clk=0;  //形成下降沿3
              DI=1;  //控制指令結束
              _nop_();
              _nop_();
              dat=0;  //將dat初始化
              for(i=0;i<8;i++)            //從高位開始發數據
              {
                dat|=DO;//接收數據
                clk=1;
                  _nop_();
                   _nop_();
                clk=0;
                    _nop_();
                    _nop_();//形成一次時鐘脈沖,數據傳一位
                dat<<=1;//將所收到的數據進行左移一位
                if(dat==7) //如果所收到的數據達到了8位。
                  dat|=DO;//接著收數據
              }
             for(i=0;i<8;i++)            //從低位開始發數據
               {
                 j=0;
                 j=j|DO;//或者是j|=DO....開始收數據
                 clk=1;
                 _nop_();
                 _nop_();
                 clk=0;  //形成一次時鐘脈沖
                 _nop_();
                 _nop_();
                 j=j<<7;
                 ndat=ndat|j;
                 if(j<7)
                  ndat>>=1;//得到的這位數據向左移7位
                }
              cs=1;
              clk=0;
              DO=1;     //回到初始狀態
              readad[0]=dat;
              readad[1]=ndat;  
               
        }
         
         
        #include<absacc.h>
        #define REG0 XBYTE[0x0000]//通過宏定義將液晶的初始化設置,寫指令,寫數據
        #define REG1 XBYTE[0x0001]//讀指令,讀數據代替,可以直接調用
        #define REG2 XBYTE[0x0002]
        #define REG3 XBYTE[0x0003]
        uchar bdata busyflag;
        uchar dat,datn,count;
        uchar word1[16]={"CH="};
        code uchar  word2[16]={"liushuai"};
        code uchar word3[16]={"19901001"};
        sbit busyflag_7=busyflag^7;
         
        //液晶的初始化//
        void busy()
        {
          do
           {
             busyflag=REG1;
           }while(busyflag_7);
        }
         
        void wrc( uchar wcon)
        {
          busy();//檢測液晶是否處于工作狀態
          REG0=wcon; //寫指令
         
        }  
        void wrd(uchar wdat)
        {
          busy();
          REG2=wdat;//寫數據
        }
        void rdd()//讀數據
        {
          busy();
          dat=REG3;
        }
        void lcdint() //液晶的初始化指令
        {
         wrc(0x38);
         wrc(0x01);
         wrc(0x06);
         wrc(0x0c);
        }
        void wrn(uchar word[])
        {
         
          uchar i;
          for(i=0;i<16;i++)
          {
            wrd (word[i]);
          }
         
        void temp()  //數字的轉換
        {
          float tt;
          tt=readad[0]/255.0*5.0;
          word1[4]=(unsigned char)(tt);
          word1[5]='.';
          word1[6]=(unsigned char)(tt*10-word1[4]*10);
          word1[7]=(unsigned char)(tt*100-word1[4]*100-word1[6]*10);
          word1[8]=(unsigned char)(tt*1000-word1[4]*1000-word1[6]*100-word1[7]*10);
          word1[9]=(unsigned char)(tt*10000-word1[4]*10000-word1[6]*1000-word1[7]*100-word1[8]*10);
          word1[4]+=48;
          word1[6]+=48;
          word1[7]+=48;
          word1[8]+=48;
          word1[9]+=48;
          word1[10]='V';
        }
        void main()
        {
          lcdint();//初始化液晶
          wrc(0x80);
          wrn(word2);
          wrc(0xc0);
          wrn(word3);
          while(1)
          {
            adc0832(0);//選擇通道0
            temp() ;
            wrc(0x80);
            word1[2]='0';
            temp() ;
            adc0832(0);//選擇通道1
            temp() ;
            wrc(0xc0);
            word1[2]='1';
            wrn(word1);
          }
         
         
        }
         
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮