C51-入门第一个点灯程序

C51-入门第一个点灯程序

1 项目需求

基于STC89C52单片机,使用多种方式点亮一个led灯,以led0为例。

2 工程创建

步骤1:新建一个工程,包括新建工程目录和工程文件名。
在这里插入图片描述
步骤2:选择开发所用芯片。没有 STC89C52,选择AT89C51或者AT89C52都可以,不影响开发。
在这里插入图片描述
步骤3:如果出现如下提示框,选择否即可,暂时不需要加载该文件。
在这里插入图片描述
步骤4:按下图所示更改输出的目标文件名,即.hex文件的名字;修改源码组,一般用src来存放*.c文件。后续用到多模块了,会为每一个模块添加一个组,然后每个模块组中添加一个文件夹src放*.c文件,添加一个文件夹include放*.h文件。
在这里插入图片描述
步骤5:设置好芯片时钟频率(和所选的芯片设备一致);打开输出文件.hex
在这里插入图片描述
到此,工程就算是创建完成了。

3 LED硬件原理图分析

开发板的LED0(即发光二极管D1)的负极连接在与单片机的P1.0口;正极通过串联电阻与VCC相连接;所以,当单片机的P1.0口输出低电平时,二极管D1就会导通,点亮LED0,当P1.0口输出高电平,LED0熄灭。
在这里插入图片描述
查看芯片手册,获得信息,单片机P1寄存器的地址为0x90H;默认值8个bit均为1,灯不亮。
在这里插入图片描述

4 项目实施

步骤1:按照下图所示像src组中添加main.c文件,用于代码编写。
在这里插入图片描述

4.1 代码编写

推荐方式2写法,或者方式1写法;方式3是51单片机特有的按位寻址赋值方式。

/************************************
功能:多种方法实现点亮LED0灯

作者:eCoderY  时间:2024.01.14
************************************/

#define SWITCH_CODER (2) /* 控制点亮LED0的方法 */

/* 
 * 如果包含了头文件reg52.h;这一段就可以省略了;
 * 因为reg52.h中定义了P1寄存器
 */
sfr P1 = 0x90;	/* 定义P1寄存器的地址为0x90H */

#if(SWITCH_CODER == 3)
	sbit LED0 = P1^0; /*将P1的bit0定义为LED0 */
#endif


void main(void)
{	
	while(1)
	{
		/* 方式1、直接操作寄存器 */
	#if(SWITCH_CODER == 1)
		P1 = 0xfe;
	#endif
		
		/* 方式2、通过&=~操作对寄存器的某位置0 */
	#if(SWITCH_CODER == 2)
		P1 &= ~(1 << 0); /* 通过位操作对寄存器P1的bit0写0 */
	#endif
		
		/* 方式3、C51还可以直接操作P1.0 */
	#if(SWITCH_CODER == 3)
		LED0 = 0; /* 直接对P1的bit0写0 */
	#endif
		
	}
}

4.2 编译代码

在这里插入图片描述

4.3 烧录代码

打开代码ISP烧录软件,按照如下图所示步骤烧录.hex文件到单片机中;注意,通常点击下载后需要重启一下单片机。
在这里插入图片描述

4.4 实验现象

通过更改SWITCH_CODER的值分别为1、2、3,选择3种方式,然后编译烧录,均能达到如下所示效果,点亮LED0。
在这里插入图片描述

5 问题

存在一个问题,为什么按照stm32的方式,以*((TYPE *)0X90) = 0Xfe;的方式来点亮LED0灯呢?
欢迎各位大佬讨论… …

EOF

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值