51单片机学习记录(007-LED灯闪烁)

1、新建工程

51单片机学习记录(004-点亮一个灯-1)

2、编写程序

1)引用代码

在点亮一个灯的代码基础上进行修改,点亮一个灯的代码如下:

#include <STC89C5xRC.H>
 
void main()
{
	P2=0xFE;//1111 1110
	while(1)
	{
	
	}
}

2)一亮一灭

如果要让这个LED灯灭,则把P2=0xFF,相当于把所有P2的IO口都是高电平,则灯是熄灭的。

3)一亮一灭循环

要实现亮灭循环,则把P2=0xFE和P2=0xFF放在while循环里:

#include <STC89C5xRC.H>
 
void main()
{	
	while(1)
	{
	    P2=0xFE;//1111 1110
        P2=0xFF;//1111 1111
	}
}

4)引用延时代码

既然要实现亮灭循环,那么亮需要时间,灭也需要时间,我们需要再编制一下亮灭指令的延时,在STC-ISP的绿色软件里,有一个软件延时计算器工具选项(1),这里有延时代码,需要设置晶振频率、时间和8051指令(3):

(1)单片机的晶振频率可以在开发板原理图上查看到,STC89CXX 单片机晶振引脚是18 和19 脚,也可以查阅单片机的相关资料:

这个就是晶振的图标,,C12 和C13 为旁路电容,目的是消除晶振起振时产生的电感干扰。

(2)定时长度,可以根据要求设置,我们设置成500毫秒,即半秒。

(3)8051指令集:选择STC-Y1,适用于STC89CXX系列单片机。

复制代码,粘贴到程序里:

对_nop()函数需要加入头文件#include <INTRINS.H>

5)引用延时函数

要调用Dellay500ms()函数,还需要在语句里引用一下这个函数:

#include <STC89C5xRC.H>
#include <INTRINS.H>

void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{	
	while(1)
	{
	    P2=0xFE;//1111 1110
		Delay500ms();
        P2=0xFF;//1111 1111
		Delay500ms();
	}
}

6)编译、下载

几天没有玩,下载的时候stcisp一直正在检测目标单片机,网上查找了一下原因,感谢网友,原来是以下几个原因引起的:1)连线错误:检查插口是否插好;2) 下载需冷启动(大概率是此问题):利用串口杜邦线给单片机下载时,可能为了方便,断电时,有时候会仅拔掉VCC或GND,但因为电源处电容的原因,此时VCC端口可能还有电压,所以有时候会出现即使拔掉电源下载、再连接电源也会出现一直显示“正在检测目标单片机”的情况。  建议断电时,拔掉所有的连接线,然后点击下载,再连接所有的连接线。

我的原因是冷启动,我一般操作顺序是先开单片机通电,再下载程序,这样是不对的,应该先断电,然后点击下载,再连接所有连接线上电。

下载完成,按下电源按键,成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值