?? 14位ad轉換試例.c
字號:
#include<reg52.h> // 由器件MAX121即十四位AD轉換實現對電壓的精確測量
#include<intrins.h>
#define uchar unsigned char //運用ALE產生2MHZ的時鐘信號,并且試驗成功
#define uint unsigned int
sbit convst=P1^0; //下降沿啟動轉化
sbit sfrm=P1^1; //開始轉化置低,轉化結束置高
sbit fstrt=P1^2; //先持續一個時鐘高電平,下降沿開始啟動數據傳輸
sbit sclk=P1^3; //串行時鐘輸出
//sbit clkin=P1^4; //提供0.1~05MHZ的時鐘信號,本實驗采用的2MHZ
sbit sdata=P1^5; //數據串行輸出口
sbit led1=P2^2;
sbit led2=P2^3;
sbit led3=P2^4;
sbit led4=P2^5;
sbit led5=P2^6;
//sbit led6=P2^7;
float tt;
uchar code table[]={0x40,0x79,0x24,
0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uchar count=0,b_0,b_1,b_2,b_3,b_4;
//uchar a[]={0,0,0,0};
uint vdata,j,b,d;
void start();
void read();
void delay(uchar z);
void display();
main()
{ /*EA=1;
TMOD=0x01; //定時器T0工作方式1
ET0=1;
TH0=(65536-8)/256;
TL0=(65536-8)%256;
TR0=1;
clkin=1;*/
sfrm=1;
start();
while(1)
{
if(sclk==1)
{
_nop_();
read();
while(1)
{
display();
}
}
}
}
/*void timer0() interrupt 1
{ TH0=(65536-8)/256;
TL0=(65536-8)%256;
clkin=~clkin;
}*/
void start()
{ convst=1;
_nop_();
convst=0;
fstrt=0;
_nop_();
fstrt=1;
delay(1);
fstrt=0;
sfrm=0;
}
void read()
{
uchar i;
for(i=0;i<16;i++)
{
vdata<<=1;
if(sdata==1)
{
_nop_();
_nop_();
vdata=vdata|0x01;
}
}
if(vdata&0x8000)
vdata=~vdata+1;
d=vdata>>2;
}
void display()
{
tt=d*5/8192.0;
b=tt*10000;
b_0=b/10000;
b_1=b%10000/1000;
b_2=b%1000/100;
b_3=b%100/10;
b_4=b%10;
P0=table[b_4];
led1=0;
delay(5);
led1=1;
P0=table[b_3];
led2=0;
delay(5);
led2=1;
P0=table[b_2];
led3=0;
delay(5);
led3=1;
P0=table[b_1];
led4=0;
delay(5);
led4=1;
P0=table[b_0];
led5=0;
delay(5);
led5=1;
}
void delay(uchar z)
{ uchar x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -