清翔零基础教你学51单片机_个人学习笔记(2)_LED闪烁

 

说明

本人使用的是清翔的51单片机开发板,如果型号相同最方便,但是如果型号不同也可以参考,因为芯片都是一样的,只是外设不同而已,使用时只需要对照自己的开发板原理图稍微修改下引脚即可。

本次笔记对应清翔视频教程的第12集 LED闪烁(理论+编程)

一、循环语句

while循环和for循环,多数情况下,while循环在不知道循环次数时使用,for在知道循环次数已知的情况下使用

(1)while循环

while (条件表达式) {语句}

只有当括号内的条件表达式危2真,才会重复执行{}内的语句

(2)for 循环

for([初值设定表达式]; [循环条件表达式]; [更新表达式]) {语句}

只有中间的“循环条件表达式”为真,for循环才会继续下去,每运行完一次“语句”,就会执行一次更新表达式,再去判断“循环条件表达式”是否为真

例如

unsigned char i;
for (i = 0; i <= 100; i++)
{
    //放要循环的语句
}

 二、变量

2.1 变量的定义

变量是在程序执行过程中其值能不断变化的量。在使用一个变量之前必须进行定义,用一个标识符作为变量名,并指出它的数据类型。C语言中每条语句必须用分号结束,并且是英文分号。

格式:数据类型 变量名 ;

例如

unsigned char a;    //char类型占1个字节,最大值b1111 1111,也就是255
unsigned char b;
a = 5;               //给变量a赋初值5
b = 2;               //给变量b赋初值2
b = 5 + a;           //b最终为 5 + 5 = 10

2.2 变量的作用域

全局变量:在函数体外定义的变量通常为全局变量,作用范围:从定义开始的整个程序
局部变量:在函数体内定义的变量通常为局部变量,作用范围:函数体内

 三、软件延时

常用的延时方法:

软件延时定时器延时
优点使用方便不浪费CPU资源,在延时期间可以进行其他操作
缺点浪费CPU资源,实际上是让CPU一直去加减运算需要操作内部寄存器,对初学者来说比较麻烦

四、编写点亮和熄灭全部LED的程序

4.1 创建工程

复制一份工程模板并改名为"2.LED闪烁" 

工程模板的创建详见清翔零基础教你学51单片机_个人学习笔记(1)_点亮开发板上的LED灯http://t.csdn.cn/JgxjD3.1 工程的创建

 4.2 原理图分析

根据原理图,如果我想让所有LED都点亮,只需要设置P1的所有8个引脚都为低电平,在程序中可以直接写

P1 = 0;

 来让整个端口8个引脚都为0,这个0其实是十进制的0,也就是十六进制的0x00,二进制的b00000000,这样就让8个引脚全为0。如果想点亮LED1和LED2,也就是把P1端口的8个引脚中P1^0和P1^1置为0,其余置为1,可以这样写

//方案1
P1 = 0x03    //16进制数 也就是二进制的b0000 0011
//方案2
P1 = 3;    //注意这个3表示十进制3,等同于二进制b0000 0011
//方案3
LED1 = 0;
LED2 = 0;
LED3 = 1;
...
LED8 = 1;

如果想点亮其他位置的LED,可以先写出对应的二进制,再把二进制转换成十六机制或十进制即可,一般用十六进制,因为十六进制与二进制之间的对应关系更简单 

注意:二进从低位到高位对应LED1~LED8,不要把高低位对应搞反了

4.3 代码

4.3.1 点亮全部LED

#include <reg52.h>

void main()
{
    P1 = 0;
}

4.3.2 编译下载程序

打开stc-isp软件,点击“打开程序文件”,在弹出的文件浏览窗口中进入“2.LED闪烁”,在Objects文件夹下选中.hex文件,再点击下载即可,详见清翔零基础教你学51单片机_个人学习笔记(1)_点亮开发板上的LED灯

3.3 点击编译 3.4 下载 这两个章节的内容

4.3.3 现象

 4.3.4 熄灭全部LED

根据 4.2 原理图分析 中,可以知道,要想熄灭全部LED,需要把P1端口8个引脚全部设置为高电平

#include <reg52.h>

void main()
{
    //方案1
    P1 = 255;   //十进制255,相当于二进制b1111 1111
    //方案2
    P1 = 0xff;   //十六进制0xff,相当于二进制b1111 1111
}

4.3.5 编译下载程序

打开stc-isp软件,点击“打开程序文件”,在弹出的文件浏览窗口中进入“2.LED闪烁”,在Objects文件夹下选中.hex文件,再点击下载即可,详见清翔零基础教你学51单片机_个人学习笔记(1)_点亮开发板上的LED灯

3.3 点击编译 3.4 下载 这两个章节的内容

4.3.6 现象

五、软件延时的LED闪烁程序

5.1 直接在main函数内写延时

#include <reg52.h>

unsigned int i;
void main()
{
    //点亮全部LED并延时一会儿
    P1 = 0;
    i = 65535;
    while(i--);
    //熄灭全部LED并延时一会儿
    P1 = 0xff;
    i = 65535;
    while(i--);
}

 i = 65535;

while (i--);

这两句代码就是让芯片一直去计算65535减到0,在这期间不能去干其他的事。

main函数会自动循环,但是一般写程序还是会写一个while(1)来表示循环

5.2 封装延时函数

延时函数无返回值,用void定义

void delay(unsigned int i)
{
    while(i--);
}

最终的山闪烁代码

#include <reg52.h>

void delay(unsigned int i)
{
    while(i--);
}


unsigned int i;
void main()
{
    //点亮全部LED并延时一会儿
    P1 = 0;
    delay(65535);
    //熄灭全部LED并延时一会儿
    P1 = 0xff;
    delay(65535);
}

延时代码其实是可以通过keil的debug功能查看到具体的延时时间的,这个以后再说

本次笔记对应清翔视频教程的第12集,到此结束。下一个笔记将对应视频的13集:流水灯(理论+编程)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值