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