用單片機C語言來實現(xiàn)相思病
現(xiàn)在我們就用一個實際的例子來描述:如何用編程語言來說明人的想法在機器上的實現(xiàn)。這個例子就是用用單片機C語言來實現(xiàn)"相思病",大家都知道,相思病是一種愛情所引起的病,因為雙方的距離或他原因?qū)е碌囊环N思念對方的病。這就是相思病的特性,由這些特性我們能知道什么信息呢?我們要整理出對我們有用的信息,這是很重要的。
因為我們的題目是說用單片機來實現(xiàn)相思病的。所以相思病帶給我們的有用信息有:
一、相思病是一個人思念另外一個人的,所以有相思病的思念者(簡稱"病主")和被思念者兩個對象。
二、相思病是有病主自身體內(nèi)產(chǎn)生的,并且是不斷的循環(huán)的。
三、所謂心病還需心藥醫(yī),必須通過"被思念者"給你傳達的信息才能抑制病的發(fā)作。要想治好的話雙方在 一起即可。
四、相思病發(fā)作的時候心里是很苦的;
病的特性我們了解了,接下來是一種"自然界思想轉(zhuǎn)化法"的應(yīng)用(都只是個人的觀點),我們把單片機想象成現(xiàn)實中存在的人類,這個人他不會說話,我叫他做什么他就做什么的這樣一個人。為什么能這樣想象呢?這就要結(jié)合單片機的特性和人類的特性,他們之間有很多聯(lián)系點,善于聯(lián)系自然。因為一個科技的產(chǎn)生就是一種對自然界的發(fā)現(xiàn),就比如雷達的產(chǎn)生是運用蝙蝠的發(fā)聲原理。言歸正傳,單片機和人類有什么相似點呢?單片機內(nèi)部有定時器/計數(shù)器可以在內(nèi)部產(chǎn)生周期性的行為,而人類大腦的某一位置也會在體內(nèi)產(chǎn)生某種感覺,比如喜怒哀樂的感覺。單片機有中斷系統(tǒng),中斷系統(tǒng)有外部中斷和內(nèi)部中斷,定時器/計數(shù)器便是根據(jù)中斷的原理來產(chǎn)生周期性的行為的,它是一種內(nèi)部中斷。而外部中斷是外界對單片機的一種刺激,就像人的眼睛可以當做外部中斷的接口一樣。太陽光照射到你的眼睛,給了你一個中斷請求,大腦就會作出相應(yīng)的處理,比如說閉上眼睛或者拿手擋住陽光。這就是外界對我們?nèi)诉M行刺激之后我們?nèi)俗龀龅姆从?。外部中斷產(chǎn)生的時候,單片機也能對中斷作出相應(yīng)的反映。利用這些聯(lián)系,我們就可以用單片機來描述相思病啦。
下面是編程部分:
一、你要實現(xiàn)什么功能:用單片機C語言來實現(xiàn)"相思病"
二、確定思路。
1、用單片機的定時器/計數(shù)器來產(chǎn)生相思病。
2、用外部中斷來接受"被思念者"傳給你的信息,比如說短信,電話之類的。
3、用LED燈表示生病的狀態(tài)。
4、用獨立按鍵表示"被思念者"。
下面是用89C51單片機來實現(xiàn)代碼部分:
完整代碼下載地址:http://www.51hei.com/f/xxb.rar
#include reg51.h>//用P3^2定義接受"被思念者"的信息的外部中斷,這里用獨立按鍵連接sbit illstate_led=P1^2; //定義生病的狀態(tài),這里用LED顯示,亮表示生病bit startill=0; //定義生病的標志位,1表示生病,0表示好了void Init_Timer0(void) //定時器0初始化{TMOD |= 0x01; //使用模式1,16位定時器 EA=1; //總中斷打開ET0=1; //定時器中斷打開TR0=1; //定時器開關(guān)打開}void Timer0_isr(void) interrupt 1 //定時器中斷子程序{static unsigned long int i; //用來定時1小時 static unsigned char j; //用來定時1天static unsigned char k; //用來定時15天TH0=(65536-36000)/256; //重新賦值 12M晶振計算,指令周期1us,定時60msTL0=(65536-36000)*256; i++;if(i==100000) //定時1小時{i=0;j++;if(j==24) //定時1天{j=0;k++;if(k==15) //定時15天,相思病每15天發(fā)作一次{k=0;startill=1; //病發(fā)作了illstate_led=0; //LED燈亮了}}}}void Init_Ex0(void) //外部中斷0初始化{EA=1; //全局中斷開EX0=1; //外部中斷0開IT0=0; //電平觸發(fā)}void Ex0_isr(void) interrupt 0 //外部中斷程序,表示藥(短信)來了 {if(startill) {startill=0; //病好啦illstate_led=1; //燈滅啦}}void main(void){illstate_led=1;Init_Timer0();Init_Ex0();while(startill) //循環(huán)用來處理生病的狀態(tài){illstate_led=0; //LED燈亮了,生病啦 }}
上面就是用程序來模擬"相思病"啦。
評論