首页 理论教育 闪烁效果实现及变量知识表格

闪烁效果实现及变量知识表格

时间:2023-06-28 理论教育 版权反馈
【摘要】:2.2.3.4 变量的基本知识请读者查阅相关资料,完成表2-4。

闪烁效果实现及变量知识表格

2.2.3.1 全部点亮与全部熄灭

要全部点亮P0口所接的8个发光二极管,使用字节操作,只需语句“P0=0x00”。这时,P0口的8个位P0.0~P0.7都输出0(低电平),所接的发光二极管点亮。那么,如果要8个指示灯全部熄灭呢?使用语句“P0=0xff”,这时P0口的8个位全部输出1(高电平)。

到此,我们只需在while(1)死循环中,分别写“P0=0x00”实现全部点亮,接着写“P0=0xff”实现全部熄灭,然后不断循环。主函数部分如图2-10所示。

978-7-111-55685-5-Chapter02-20.jpg

图2-10 全部点亮与熄灭

动一动

读者完成图2-10所示的控制程序,编译无误后,下载到目标板上,查看运行效果。你的肉眼能看到指示灯在闪烁吗?如果看不到闪烁,是因为什么?

2.2.3.2 “数绵羊”

通过验证我们知道如图2-10所示的控制程序,在实际目标板上是看不到闪烁的效果的。这是由于肉眼本身的“反应速度”跟不上变换的速度,存在“视觉暂留”效应。我们看不到变换,是因为变换得太快。因此,如果变换得慢一些,比如1s变换一次,毫无疑问我们就能清楚地看出变换了。单片机的变换速度远远超出交流电,肉眼当然无法察觉到单片机的快速变换:点亮——熄灭——点亮——熄灭……

解决的办法是:点亮——延时——熄灭——延时——点亮……

那如何实现延时呢?众所周知,单片机执行程序是需要时间的,好比我们写字、吃饭都需要消耗时间一样,为实现延时的目的,我们可以让单片机去“数绵羊”。当“绵羊”数量很大时,要数完这些“绵羊”就需要较长时间;当“绵羊”数量很少时,要数完它们则需要较短时间。请看图2-11所示的主函数,编译无误后,下载到目标板上,观察现象。

978-7-111-55685-5-Chapter02-21.jpg

图2-11 带延时的全部点亮与熄灭

明显地,图2-11所示的主函数,通过数50000只“绵羊”,实现了闪烁功能,而且通过改变变量i的数值,还能实现不同的延时时间(但几乎都是不精确的、粗糙的时间)。

2.2.3.3 模式2的实现

我们知道,P0=0x00实现全部点亮;P0=0xff实现全部熄灭。那如何实现奇数灯、偶数灯的点亮呢?请看表2-3。

表2-3 奇数灯、偶数灯点亮时P0口状态

978-7-111-55685-5-Chapter02-22.jpg

可见,要点亮奇数灯,只要给P0口写二进制01010101,对应十六进制0x55;要点亮偶数灯,只要给P0口写二进制10101010,对应十六进制0xaa。这样参照全部指示灯的闪烁的控制程序,我们得到奇偶交替闪烁的控制程序如图2-12所示。

978-7-111-55685-5-Chapter02-23.jpg(www.xing528.com)

图2-12 奇偶交替闪烁的控制程序

动一动

请读者使用keil编写上述奇偶交替闪烁的控制程序,并下载验证。

2.2.3.4 变量的基本知识

请读者查阅相关资料,完成表2-4。

表2-4 数据类型

978-7-111-55685-5-Chapter02-24.jpg

说明:

➢8051是8位机,能用unsigned char处理的,就不要用unsigned int或其他长度超过1个字节的情形。这好比,你一次能打一桶水,就尽量不要一次打两桶水,甚至4桶水。表面上,好像能力强了,但却耗费了太多精力。

➢再次强调,读者在定义变量时,请务必千万注意表示范围!比如你定义了unsigned char类型的变量,却企图给它赋值1000,这是无法实现的。

➢变量名是自己定义的,如前所述,建议在命名变量时做到“顾名思义”。再次提醒读者,C语言是严格区分大小写的。

动一动

1.请读者自行改变i的数值(0~65535),观察指示灯闪烁快慢。

2.如果将i定义为unsigned char类型,其他地方不变,还能达到一样的闪烁效果吗?为什么?提示:unsigned char的表示范围是0~255。

3.如果要实现数100000只“绵羊”,该怎么办呢?提示:1)改变变量类型;2)分几次实现。

4.请找出下列代码中存在的错误,并给予修正。

978-7-111-55685-5-Chapter02-25.jpg

5.图2-11使用的是“倒计数”方式(从初值减少到0),读者能否编写“正计数”方式的延时呢(从0增加到设定的数)?提示:使用“++”实现“增计数”,并判断变量i是否小于某个设定数实现循环。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈