前言
今天学习了循环点亮一个LED和LED流水灯。
一、基础知识
- 头文件名称不区分大小写,但标识符区分大小写
- C51数据类型
注意和计算机的数据类型区分,计算机里的int是32位。
二、具体示例
1.循环点亮一个LED
根据电路图,LED的另一端是VCC,控制P2.0引脚循环输出高低电平就可以循环点亮。
单片机的频率这里是11.059MHz,如果直接只放两句代码,那循环点亮的间隔是微秒级的,眼睛观察不到,所以需要另外写一个延时程序。这里使用do_while循环生成延时程序。
PS:STC-ISP串口调试助手可以生成延时代码。要先声明包含用到的函数、寄存器、变量等的头文件。
部分代码如下:
#include <REGX52.H>
void main()
{
while(1)
{
P2=0xFE;
Delay500ms();
P2=0xFF;
Delay500ms();
}
}
2.流水灯
依次循环点亮每一个LED,直接给P2引脚循环、延迟赋值,代码和循环点亮一个LED类似。
PS:刚开始使用STC-ISP生成的固定500ms的延时程序,为了实现可控的延时时间,而不用每次都去另外生成,使用调试助手生成1ms的延迟程序,定义一个参数实现可控的时间,其实就是do_while循环再乘了一个外循环。
部分代码如下:
#include <REGX52.H>
void main()
{
while(1)
{
P2=0xFE; //1111 1110
Delay500ms();
P2=0xFD; //1111 1101
Delay500ms();
P2=0xFB; //1111 1011
Delay500ms();
P2=0xF7; //1111 0111
Delay500ms();
P2=0xEF; //1110 1111
Delay500ms();
P2=0xDF; //1101 1111
Delay500ms();
P2=0xBE; //1011 1111
Delay500ms();
P2=0x7F; //0111 1111
Delay500ms();
}
}
总结
提示:8.1号,每天学习51单片机的第二天,学习一小时。
从生成延时函数这里有点感悟:代码是一点一点可以优化和升级的,先从简单的思维和书写开始。比如这个时间:直接生成,固定的时间——>可控的时间,直接生成“1”,使用“1”×常数,就实现了。