在单片机c语言中 "p1^0 = 1" 实现了什么功能?,用单片机C语言来实现相思病

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

现在我们就用一个实际的例子来描述:如何用编程语言来说明人的想法在机器上的实现。这个例子就是用用单片机C语言来实现"相思病",大家都知道,相思病是一种爱情所引起的病,因为双方的距离或他原因导致的一种思念对方的病。这就是相思病的特性,由这些特性我们能知道什么信息呢?我们要整理出对我们有用的信息,这是很重要的。

因为我们的题目是说用单片机来实现相思病的。所以相思病带给我们的有用信息有:

一、相思病是一个人思念另外一个人的,所以有相思病的思念者(简称"病主")和被思念者两个对象。

二、相思病是有病主自身体内产生的,并且是不断的循环的。

三、所谓心病还需心药医,必须通过"被思念者"给你传达的信息才能抑制病的发作。要想治好的话双方在 一起即可。

四、相思病发作的时候心里是很苦的;

病的特性我们了解了,接下来是一种"自然界思想转化法"的应用(都只是个人的观点),我们把单片机想象成现实中存在的人类,这个人他不会说话,我叫他做什么他就做什么的这样一个人。为什么能这样想象呢?这就要结合单片机的特性和人类的特性,他们之间有很多联系点,善于联系自然。因为一个科技的产生就是一种对自然界的发现,就比如雷达的产生是运用蝙蝠的发声原理。言归正传,单片机和人类有什么相似点呢?单片机内部有定时器/计数器可以在内部产生周期性的行为,而人类大脑的某一位置也会在体内产生某种感觉,比如喜怒哀乐的感觉。单片机有中断系统,中断系统有外部中断和内部中断,定时器/计数器便是根据中断的原理来产生周期性的行为的,它是一种内部中断。而外部中断是外界对单片机的一种刺激,就像人的眼睛可以当做外部中断的接口一样。太阳光照射到你的眼睛,给了你一个中断请求,大脑就会作出相应的处理,比如说闭上眼睛或者拿手挡住阳光。这就是外界对我们人进行刺激之后我们人做出的反映。外部中断产生的时候,单片机也能对中断作出相应的反映。利用这些联系,我们就可以用单片机来描述相思病啦。

下面是编程部分:

一、你要实现什么功能:用单片机C语言来实现"相思病"

二、确定思路。

1、用单片机的定时器/计数器来产生相思病。

2、用外部中断来接受"被思念者"传给你的信息,比如说短信,电话之类的。

3、用LED灯表示生病的状态。

4、用独立按键表示"被思念者"。

下面是用89C51单片机来实现代码部分:

完整代码下载地址:http://www.51hei.com/f/xxb.rar

#include

//用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灯亮了,生病啦

}

}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值