专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

用单片机C语言来实现相思病

作者:佚名   来源:本站原创   点击数:  更新时间:2011年03月14日   【字体:

      如果刚开始看到这个题目的时候是不是觉得疑惑呢?"相思病"是什么?"相思病"就是我们平常所说的心病。写这个文章的目的在于启发我们的思想,其实编程思想很简单,就是把我们的想法通过编程语言实现出来。就像我们通过汉语来表达我们的想法一样。只不过汉语是用来表达给人的,而编程语言是用来表达给机器,操作系统,或者说一些网络协议的。因为机器,操作系统他们都不会说人话嘛,他们只会说编程语言。所以你就要通过编程语言来建立和他们之间的联系。个人想法,只供参考哦。

       现在我们就用一个实际的例子来描述:如何用编程语言来说明人的想法在机器上的实现。这个例子就是用用单片机C语言来实现"相思病",大家都知道,相思病是一种爱情所引起的病,因为双方的距离或他原因导致的一种思念对方的病。这就是相思病的特性,由这些特性我们能知道什么信息呢?我们要整理出对我们有用的信息,这是很重要的。
       因为我们的题目是说用单片机来实现相思病的。所以相思病带给我们的有用信息有:
一、相思病是一个人思念另外一个人的,所以有相思病的思念者(简称"病主")和被思念者两个对象。
二、相思病是有病主自身体内产生的,并且是不断的循环的。
三、所谓心病还需心药医,必须通过"被思念者"给你传达的信息才能抑制病的发作。要想治好的话双方在 一起即可。
四、相思病发作的时候心里是很苦的;
       病的特性我们了解了,接下来是一种"自然界思想转化法"的应用(都只是个人的观点),我们把单片机想象成现实中存在的人类,这个人他不会说话,我叫他做什么他就做什么的这样一个人。为什么能这样想象呢?这就要结合单片机的特性和人类的特性,他们之间有很多联系点,善于联系自然。因为一个科技的产生就是一种对自然界的发现,就比如雷达的产生是运用蝙蝠的发声原理。言归正传,单片机和人类有什么相似点呢?单片机内部有定时器/计数器可以在内部产生周期性的行为,而人类大脑的某一位置也会在体内产生某种感觉,比如喜怒哀乐的感觉。单片机有中断系统,中断系统有外部中断和内部中断,定时器/计数器便是根据中断的原理来产生周期性的行为的,它是一种内部中断。而外部中断是外界对单片机的一种刺激,就像人的眼睛可以当做外部中断的接口一样。太阳光照射到你的眼睛,给了你一个中断请求,大脑就会作出相应的处理,比如说闭上眼睛或者拿手挡住阳光。这就是外界对我们人进行刺激之后我们人做出的反映。外部中断产生的时候,单片机也能对中断作出相应的反映。利用这些联系,我们就可以用单片机来描述相思病啦。

       下面是编程部分:
一、你要实现什么功能:用单片机C语言来实现"相思病"
二、确定思路。
1、用单片机的定时器/计数器来产生相思病。
2、用外部中断来接受"被思念者"传给你的信息,比如说短信,电话之类的。
3、用LED灯表示生病的状态。
4、用独立按键表示"被思念者"。

       下面是用89C51单片机来实现代码部分:
完整代码下载地址:http://www.51hei.com/f/xxb.rar

#include <reg51.h>

//用P3^2定义接受"被思念者"的信息的外部中断,这里用独立按键连接
sbit illstate_led=P1^2;  //定义生病的状态,这里用LED显示,亮表示生病
bit startill=0;   //定义生病的标志位,1表示生病,0表示好了

void Init_Timer0(void)  //定时器0初始化
{
   TMOD |= 0x01;   //使用模式1,16位定时器       
 
   EA=1;            //总中断打开
   ET0=1;           //定时器中断打开
   TR0=1;           //定时器开关打开
}

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,定时60ms
   TL0=(65536-36000)*256;       

   i++;
   if(i==100000)  //定时1小时
   {
         i=0;
         j++;
         if(j==24)   //定时1天
         {
              j=0;
              k++;
              if(k==15)  //定时15天,相思病每15天发作一次
              {
                  k=0;
                  startill=1;  //病发作了
                  illstate_led=0; //LED灯亮了
              }
        }
   }
}
void Init_Ex0(void)  //外部中断0初始化
{
   EA=1;          //全局中断开
   EX0=1;         //外部中断0开
   IT0=0;         //电平触发
}

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)  //循环用来处理生病的状态
   {
      illstate_led=0;  //LED灯亮了,生病啦 
   }
}

上面就是用程序来模拟"相思病"啦。

关闭窗口

相关文章