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