流水灯设计

流水灯设计

目的与要求

通过采用单片机控制8个LED发光二极管顺序点亮的流水灯系统设计与制作,让读者了解C语言的数据类型、常量与变量、运算符和表达式等基本概念及使用方法。
设计要求:首先点亮连接到P1.7引脚的发光二极管,延时一定时间后熄灭,再点亮连接到P1.6引脚的发光二极管,直到电量最后一个连接到P1.0引脚的发光二极管,再从头开始,循环不止,产生一种动态显示的流水灯效果。

电路设计

流水灯控制系统设计电路如 图1 所示。
图1:

流水灯设计

通过向P1口写入一个8位二进制数来改变每个引脚的输出电平状态,从而控制8个发光二极管的亮灭。在 流水灯设计.c源程序中,语句“P1=0x7F;”将P1口8位引脚设置为按8位01111111输出,电量P1.7引脚连接的发光二极管。将P1端口在01111111、10111111、11011111、11101111、11110111、11111011、11111101、11111110这8种状态之间顺序转换,就可以实现流水灯效果。
容易看出,P1端口顺序彼岸花的8个状态是最高位旁边的”0“依次右移,调用内部函数 cror() 可以实现循环右移功能。程序中使用了while循环语句不停地重复着”P1端口状态循环右移→延时“的循环程序段,程序流程图如 图2 所示。
图2:

Created with Rapha2.2.0 循环 P1<–0x7F P1端口状态右移1位 延时

Keil C51提供_cror_()是循环右移函数,就是把低位移出去的部分补到高位去。
循环右移函数_cror_()需要两个参数。第一个参数存放被移位的数据,例如此例中的P1端口状态;第二个参数是常数,用来说明移位次数,此例中常数为1,表示右移1位。
Keil C51还提供了一个循环左移函数_crol_(),使用原理与_cror_()相同。

任务小结

本任务通过用51单片机控制连接到P1口的8个发光二极管实现流水灯效果的软、硬件设计过程,使读者初步了解C语言程序的基本结构和特点,学习如何用C语言编程来控制单片机的并行I/O端口。

举一反三

C51提供左移运算“<<”和右移运算“>>”,运算的结果是把二进制操作数左移或右移若干位。对无符号数左移后,高位移出的数丢掉,对低位补0。对无符号数右移后,低位移出的数丢掉,对高位补0。

例如:如果 aa=01111111 ,执行命令“aa>>1”后,aa=00111111。使用移位运算符实现流水灯的源程序如下。

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113118 人正在系统学习中

来源:不咕鸟会咕咕

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月13日
下一篇 2021年4月13日

相关推荐