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

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

模數轉換ADC0832、ADC0808和ADC0809的利用

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年11月05日   【字體:
/***************************************************************
利用AT89c51單片機和ADC0808(ADC0809)ADC0832進行模數轉換,進行電壓測試
 數碼管采用共陽極,要顯示小數點,則小數點位二進制數最高為應為0,在0-9的8421BCD
碼中,最高位都為1,所以把輸出數據的BCD碼與0x7F“相與”才能實現帶小數點的顯示。
****************************************************************/
#include<AT89x51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
//******************adc0832****************************//
sbit CS=P2^3; //使能。
sbit CLK=P2^2;//時鐘
sbit DO=P2^1; // 數據輸出
sbit DI=P2^0;//數據輸入
char CC[]="11001001";
uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar temp;
uint vvv,i;
//通道的選擇:0x02就是單通道0;0x03就是單通道1;
//0x00就是雙通道ch0="+";   ch0="-"
//0x01就是雙通道ch0="-";   ch0="+"
//*****************************************************//
void delay(int tt)
{
while(tt--)
  {for(i=0;i<120;i++);}
}
void startADC()
{
CS=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
CS=0;
_nop_();
_nop_();
DI=1;
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
DI=0;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
}
void choiceADC(uint CH)//CH為0選擇通道ch0,為1,選擇ch1進行AD轉換
{
startADC();
if(CH==0)
{
DI=1;
_nop_();
CLK=1;//上升沿DI=1
_nop_();
CLK=0;//1個下降沿DI=1
_nop_();
DI=0;
_nop_();
CLK=1;
_nop_();
CLK=0;//第3個上升沿DI=0
_nop_();
}
else
{
DI=1;
_nop_();
CLK=1;//上升沿DI=1
_nop_();
CLK=0;//1個下降沿DI=1
_nop_();
DI=1;
_nop_();
CLK=1;
_nop_();
CLK=0;//第3個上升沿DI=1
_nop_();
}
/********通道選擇結束開始讀取轉換后的二進制數****/
CLK=1;
_nop_();
CLK=0;//下降沿讀數,一下進行判斷和處理,共8次
for(i=0;i<8;i++)
      {
   DI=1;
   if(DO)
      {
   temp |=0x01;
   }
    else
      {
   temp &=0xfe;
   }
      CLK=0;
   _nop_();
   CLK=1;
   temp=temp<<1;
   }
   vvv=temp*500.0/255;
}
void display(uint dat)
{
P3=0x04;
P0=tab[dat/100];
P0 &=0x7f;//實現帶小數點位顯示小數點。
delay(1);
P0=0xff;
P3=0x02;
P0=tab[dat%100/10];
delay(1);
P0=0xff;
P3=0x01;
P0=tab[dat%10];
delay(1);
P0=0xff;
}
void main()
{
   P3=0xFF;
   P0=0xff;
   while(1)
   {
      choiceADC(0);
   delay(1);
   display(vvv);
   }



#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit OE   =P2^7;
sbit EOC  =P2^6;
sbit start=P2^5;
sbit CLOCK=P2^4;
sbit CS4  =P2^3;
sbit CS3  =P2^2;
sbit CS2  =P2^1;
sbit CS1  =P2^0;
uint vvv,vot;
uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
             0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(uint ms)
{
uchar j;
while(ms--)
  for(j=0;j<120;j++);
}
void ADCread()
{
start=0;
start=1;
start=0;//開始轉換
while(EOC==0);//等待轉換結束
OE=1;
vvv=P1;//向單片機發出轉換結果存VVV中
OE=0;
}
void votexcheng()//根據顯示要求換算成顯示電壓值
{
/**單片機8為對應最大數255,對應最大電壓V(此處為5V)換算如下**/
vot=vvv*5/255;//如最大量程8V,則乘800,依次類推
}
void display(uint dat)
{
CS1=1;CS1=0;CS3=0;CS4=0;
P0=~tab[dat/100|0x80];
delay(1);
P0=0xff;
CS1=0;CS1=0;CS3=1;CS4=0;
P0=tab[dat%100/10];
delay(1);
P0=0xff;
CS1=0;CS1=0;CS3=0;CS4=1;
P0=tab[dat%10];
delay(1);
P0=0xff;
}
void t0() interrupt 1
{
CLOCK=~CLOCK;
}
void t0_init()//開啟定時器定時,計時滿后產生中斷以便產生CLK時鐘
{
TMOD=0x02;
TH0=0x14;
TL0=0x00;
TR0=1;
ET0=1;
EA=1;
}
void main()
{
t0_init();
while(1)
    {
 ADCread();
    votexcheng();
    display(vot);
 }
}
關閉窗口

相關文章

主站蜘蛛池模板: 久草视频网站 | 久久婷婷国产香蕉 | 欧美成视频 | 久久伊人精品 | 国产精品久久久久久模特 | 国产成人a亚洲精品 | 免费在线观看一级毛片 | 欧美日韩精品国产 | www久久久| 欧美激情99 | 99re国产视频 | 成人午夜高清 | 精品一区二区三区四区五区 | 国产精品视频一区二区三区 | 中文字幕第二十页 | 久久成人精品视频 | 国产91av视频在线观看 | 五月天国产 | 一区福利视频 | 亚洲一区二区在线播放 | 福利视频网址 | 国产精品一区二区免费看 | 91porn国产成人福利 | 91麻豆久久久 | 黄视频欧美| 久久久久香蕉视频 | 福利视频1000| 色综合视频 | 欧美视频成人 | 精久久久 | 91影院在线观看 | 一区二区三区免费网站 | 国产精品二区三区在线观看 | 欧美一区 | 欧美视频一区二区三区 | 中文字幕一区二区三区精彩视频 | 色视频一区二区 | 久久精品国产一区二区电影 | 亚洲成人av | 韩国av电影网 | 成人黄色电影在线播放 |