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

專注電子技術學習與研究
當前位置:單片機教程網 >> 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国产精品99久久久久久粉嫩 | 日韩一区二区视频 | 99精品久久久 | 亚洲高清在线视频 | 日韩在线小视频 | 国产伦精品一区二区三区视频金莲 | 久久国产精品无码网站 | 久久爱黑人激情av摘花 | 久久亚洲春色中文字幕久久久 | 欧美中文一区 | 国产91av视频在线观看 | 日韩中文字幕久久 | 国产探花在线观看视频 | 亚洲精品福利在线 | 蜜臀网| 国产精品v | 日韩精品免费播放 | 日韩成人精品在线观看 | 精品中文字幕一区 | 久久精品视频一区二区三区 | 久久激情五月丁香伊人 | 在线观看国产视频 | 久久男人 | 色婷婷一区 | 九九热国产精品视频 | 男人亚洲天堂 | 波波电影院一区二区三区 | 韩日免费视频 | 亚洲一区二区免费视频 | 国产伦精品一区二区三区精品视频 | 韩日在线视频 |