光敏電阻遮擋試驗?

#include //包含相應的標頭檔案

#include

#include

sbit CS=P1^6;//定義數模轉換器硬體對應引腳

sbit CLK=P1^3;

sbit DO=P1^4;

sbit DI=P1^5;

sbit LED=P1^2;

sbit SPK=P3^0;

bit ADFlag;

unsigned char code DIS[]={0xf7,0xfb,0xfd}; //定義數碼管位碼

unsigned char code Datatab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//7段數碼管段碼錶

data unsigned char Display[3];//定義臨時存放數碼管數值

void Init_Timer1(void)

{

TMOD = 0x10;

TH1=0xff;/* Init value */

TL1=0x00;

//PT1=1; /* 優先順序 */

EA=1; /* interupt enable */

ET1=1; /* enable timer1 interrupt */

TR1=1;

}

unsigned char ReadADC(unsigned char channel)

{

unsigned char i,j;

unsigned char Temp=0;

channel <<=3;

channel =3;

CS =0; //按照資料進行時序操作

for(i=0;i<3;i++) //輸入指令,包含通道選擇

{

CLK=0;

_nop_();

DI=channel;

channel>>=1;

_nop_();

CLK=1;

}

CLK=0;

_nop_();

CLK=1;

for(j=0;j<8;j++) //處理讀入8位資料

{

CLK=0;

_nop_();

Temp=(Temp<<1) DO;

_nop_();

CLK=1;

}

CS=1;

return(Temp); //返回轉換值

}

void Timer1_isr(void) interrupt 3 using 1//定時器1執行數碼管動態掃描

{

static unsigned char count,j;

TH1=0xfb;/* Init value */

TL1=0x00;

j++;

if(j==200) {j=0;ADFlag=1;}

P0=Display[count];

P2=DIS[count];

count++;

if(count==3)

count=0;

}

void delay(unsigned int cnt)

{

while(--cnt);

}

void Speaker(void)//蜂鳴器程式

{

unsigned char i;

for(i=0;i<255;i++)

{

delay(100);

SPK=!SPK;

LED=!LED;

}

SPK=0;

}

main()

{

unsigned char ADtemp;//定義中間變數

// unsigned char temp;

Init_Timer1();

while(1)

{

if(ADFlag) //定時採集輸入模擬量

{

ADFlag=0;

ADtemp=ReadADC(0);

Display[0]=Datatab[((ADtemp-5)/50)]&0x7f;//處理電壓顯示

Display[1]=Datatab[((ADtemp-5)%50)/10];

Display[2]=Datatab[((ADtemp-5)%50)%10];

}

if(ADtemp>200)

{

Speaker();

}

}

}

相關問題答案