51單片機ADC0804模數(shù)轉換學習
while(1) //進入死循環(huán)不停地做模數(shù)轉換
{
adwr=1; /*-----------------------------------------*/
_nop_();
adwr=0; / *啟動AD轉換(根據(jù)時序圖來的)*/
_nop_();
adwr=1; /*-----------------------------------------*/
for(a=10;a>0;a--)
{
display(A1,A2,A3); //兼具顯示和延時的作用,因為轉換需要經(jīng)過一定的時間,用這個for循環(huán)可以起到延時的作用
}
P1=0xff; //讀取P1口之前先給其寫全1
adrd=1; //rd置1(根據(jù)時序圖可知)
_nop_(); //延時一個機器周期(根據(jù)時序圖可知)
adrd=0; //rd置0(根據(jù)時序圖可知)
_nop_(); //延時一個機器周期
adval=P1; //A/D轉換后的數(shù)據(jù)賦給adval
adrd=1; //轉換后的數(shù)字信號(二進制的信號應該已經(jīng)譯成了十進制了)讀出(也是根據(jù)時序圖可知)
A1=adval/100; /*-----------------------------------------*/
A2=adval%100/10; /*分離轉換后的十進制數(shù),用來給數(shù)碼管顯示*/
A3=adval%10; /*-----------------------------------------*/
}
}
/*-------------------------------------------------------------------------------*/
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延時約xms毫秒
for(j=110;j>0;j--);
}
void display(uchar bai,uchar shi,uchar ge)//顯示子函數(shù)
{
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0x7e;
wela=0;
delayms(5);
評論