STC89C52开发学习(二)

单片机上手第一个项目(LED灯)

注:这一章分几个部分讲解
(1)点亮第一盏灯
(2)LED闪烁
(3)LED流水灯
(4)LED+震动传感器模块的震动小灯(涉及一点定时器)

最小系统原理图

点亮第一盏LED

#include <reg52.h>	
sbit led = P2^0;
void main()
{
	led=0;//设置低电平
	while(1);
}

看到以上短短七行代码就可以实现,一盏LED灯的点亮,有人说这是51单片机入门的开始,然而我并不这样认为,因为我个人认为,学会点亮LED灯也只是停留在认识单片机层面。

OK,我们先来解释一下上面的代码,首先如果有C语言基础的人,会有一个疑惑,这个reg52.h是什么东西,为什么不是我们平时常用到的stdio.h,stdlib.h。当然以上两个头文件在后面的学习中会有使用,但对52单片机来说,它需要一个头文件来包含一些特殊功能寄存器的定义,位寄存器定义,以及地址的映射,当然如果你功力深厚也是可以自己写一个头文件的。

接下来就是sbit led = P2^0;到这里如果没有接触过51系列单片机的,就算C语言功底很深,依然会一头雾水。首先你可以打开reg52.h这个头文件进行查找,实际上sbit是一个特殊功能位声明,也就是可以声明某一个特殊寄存器中的某一位。通俗点来说,你拿到51最小系统板,会看到上面有两列排针,当把单片机插进去后,每个引脚就可以用外面的排针来控制,然后一般情况,厂家会很贴心的在板子上印有P10,P20的字样,那么“声明某一个特殊寄存器中的某一位”这一句话就可以理解为。

进入main的主函数后,对P20口来操作。然后我们上一章讲过,在单片机中只有高低电平之分,0为低电平,一盘情况含上拉电阻的IO口,电平默认为高电平也就是1。大家初中都学过,电流从高电势流向低电势,所以想要点亮LED就必须让该引脚置为0。

最后由于单片机执行速率很快,如果让他执行完就退出了,很有可能我们连一闪而过的灯光都看不见,所以这里加入一个while(1)死循环,让程序无法退出。

LED闪烁

#include <reg52.h>
typedef unsighed int u16;
typedef unsighed char u8;

sbit led = P2^0;

void delay(u16 i)
{
	while(i--);
}
void main()
{
	while(1)
	{
		led = 0;
		delay(500000);//通过仿真测试得这里是软件延时450ms
		led = 1;
		delay(500000);//通过仿真测试得这里是软件延时450ms
	}
}

以上的闪烁实验,有C语言基础的一眼就能看懂,这里不多做赘述。在这里强调的是,一般我们自己写的delay函数都是软件延时,无论你用什么形式甚至你用_nop_();延时一个机器周期函数,来编写一样会误差巨大。所以就会有一种东西叫做定时器,也就是我们会常用硬件延时来保证精确度。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值