1实验原理
用八个LED灯实现流水灯的效果
P0口8个引脚各接一个LED灯,要求这8个LED灯从第一个开始,依次被点亮,一直循环往复,(注意每个时刻仅允许一个LED灯点亮)
2Proteus仿真电路图
4C51代码
①用十六进制表示P0口的状态:
我们写程序控制单片机的某个引脚输出高电平或者低电平时,都是提前定义一个变量代表这个引脚,如果要对单片机某个口的八个引脚都进行输出操作,就需要定义八个变量来表示这八个引脚,这样十分繁琐。
P0,P1,P2,P3这四个I/O口对单片机来说就是4个寄存器,这四个寄存器包括8个二进制位,(正好是1个字节),我们即可以对这四个寄存器进行为寻址,也可以进行字节寻址。对I/O进行编程,既可以对这个口的其中一个引脚进行编程,也可以对整个口进行编程操作。
例如让P0^0为高电平,其他为低电平,可以直接用二进制写成P0=0000 0001B(最高位在最左,最低位在最右),因为Keil,编译器不支持二进制数操作,所以就需要把二进制数转化为十六进制数,即P0=0X01;
②定义初始化子函数的原因:
一般在生产实践中,任何的应用系统在商店运行之后,会先执行一个初始化程序,保证所有的设备处于一个安全稳定的可靠状态,这样可以防止意外事故的发生,同时还会根据项目需求进行一些必须的系统设置,对于单片机应用系统来讲也是如此,所以最好在写程序时定义一个初始化子函数,这样可以保证相关的外设都处于一个非工作状态,比如对于这个LED灯来讲,我们就在初始化程序中控制它处于一个熄灭状态,若是某个引脚需要做输入口,则对其进行写1操作,另外,定时器中断系统等寄存器的配置,有时候也会根据需要进行设置。
5. C51代码(简化版)
循环左移函数
#include<intrins.h>
-crol-(unsigned.char x ,unsigned.char weidhu);
其中“-crol-”包含在“<intrins.h>”这个头文件中,
“unsigned.char x”表示需要左移的数据
“unsigned.char weidhu”表示左移的位数
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!