DAC-ADC控制實驗程序
大?。?/span>0.1 MB 人氣: 2017-09-06 需要積分:0
ADC溫度控制實例演練
/* ADC溫度控制實例演練 (ch11-7-5.c) */#include
/* 聲明驅動信號陣列 */
char code TAB[10]={?0xc0, 0xf9, 0xa4, 0xb0, 0x99,?// 0 ̄4
?????0x92, 0x83, 0xf8, 0x80, 0x98 };?// 5 ̄9
#define? SCANP?P1????//?定義掃瞄信號連接埠?
#define? SEG7P?P2????//?定義七節顯示器連接埠?
#define off? 35?????//?定義溫度上限?
#define on? 20?????//?定義溫度下限?
sbit?INTR=P3^2; ????//?IRQ接腳?
sbit?relay=P3^3; ???//?繼電器位置?
unsigned char xdata? adc;??//?聲明外部記憶體變量?
unsigned char _adc; ???//?聲明變量?
unsigned char disp[4]={0, 0, 0, 0};?//?聲明顯示區陣列?
unsigned char _adc;????//?聲明變量?
void dataproc(unsigned char);?//?聲明資料處理函數?
void display(void);????//?聲明顯示函數?
void delay1ms(char);???//?聲明延遲函數?
main()???????//?主程序?
{?while(1)?????//?while開始?
?{?display();????//?顯示?
??_adc=adc;???
??/*讀取外部記憶體,目的是讓ADC0804之RD=0、INTR=1*/
??adc=0xff;
??while(INTR==1); ??//?等待中斷
??_adc=adc; ????//?讀取外部記憶體?
??dataproc(_adc);???//?資料處理?
?}???????//?while結束?
}????????//?主程序結束?
//====資料處理函數====
void dataproc(unsigned char data_in)
{?int results;????//?聲明變量?
?results= data_in;???//?讀取ADC0804轉換結果?
?if (results >=off) relay=0;?
?/* 若溫度高於或等於35度(off),則關閉繼電器 */
?else if (results <=on) relay=1;
?/* 若溫度低於或等於20度(on),則開啟繼電器 */
?disp[3]=results/1000;??//?取得千位數?
?disp[2]=(results/100)%10;?//?取得百位數?
?disp[1]=(results/10)%10;?//?取得十位數?
?disp[0]=results%10;???//?取得個位數?
}????????//?資料處理函數結束?
//====顯示函數====
void display(void)
{?char i, scan;????//?聲明變量?
?char times=20;????//?掃瞄20次?
?while (--times>=0)???//?while循環開始?
?{?scan=1;?????//?初始掃瞄信號?
??for(i=0;i<4;i++)??//?for敘述開始?
??{?SEG7P=0xff;???//?關閉7節顯示器?
???SCANP=~scan;??//?輸出掃瞄信號?
???SEG7P=TAB[disp[i]];?//?轉換成驅動信號,并輸出到P0
???delay1ms(4);??//?延遲4ms
???scan<<=1;???//?下一個掃瞄信號?
??}??????//?結束for敘述?
?}???????//?結束while敘述?
}????????//?display函數結束?
//====延遲函數====
void delay1ms(char x)
{?int i,j;????//?聲明變量?
?for(i=0;i
}???????//?延遲函數結束?
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
