51单片机c语言点亮LED,点亮LED

1.硬件连接

了解了上一讲的一些元器件的使用原理,那么使用本教程的开发板点亮最右端的LED2的硬件连接简化为如下所示

fea4ce5f472894c07e901dc1b16c6d02.png

2.软件分析

我们知道74HC138要想正常工作,单片机的P1.4要输出0,P1.3输出1。接着要想三极管导通,IO6需要输出低电平,也就是P1.2必须输出1,P1.1输出1, P1.0输出0。

有了这些条件之后,要想点亮LED2还差最后一步,那就是P0.0须输出0才可点亮。

接着我们根据宋老师的例程代码给单片机的几个IO端口命名一下

sbit  LED2  = P0^0;

sbit  ADDR2 = P1^2;

sbit  ADDR1 = P1^1;

sbit  ADDR0 = P1^0;

sbit  ENLED = P1^4;

sbit  ADDR3 = P1^3;

大家根据宋老师的教程步骤创建好工程文件和“.c”文件。笔者这里把工程文件名字命名为“LESSON”

fd05f40df121abb285a243e8ada345f4.png

创建第一个“.c”文件命名为“main.c”,以后我们都用这个工程作教程的例程测试

49157812c25e8a84adce01fdce18e278.png

把以下代码复制到"main.c"文件中,编译好生成HEX文件然后下载进开发板就可看到最右端的LED2被点亮。

3.代码#include 

sbit LED2  = P0^0;

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;

void main()

{

ADDR3 = 1;//使能三八译码器

ENLED = 0;//

ADDR2 = 1;//**************************

ADDR1 = 1;//让三八译码器的IO6输出低电平

ADDR0 = 0;//**************************

LED2=0;//点亮最右端的灯

while (1);//程序执行到此处语句,则不再往下执行下面的语句,相当于程序运行停在了此处,前面完成了把IO端口输出低电平的任务就死循环在这里不执行下去了

}

4.改变字体

如果把代码复制粘贴到编译环境中时发现注释部分显示乱码的话是因为软件没有设置字体为 Chinese GB2312(Simplified)。设置如下

f04f246460c773a957b924c6d3bfae6a.png

5.补充

本讲的原理图对于我们的开发板其实还不完整,板子的P0.0是和74HC245元器件连接之后,这个器件的一个引脚再和R1端相连的,关于这个器件《手把手教你学51单片机》文档的3.3.3节已有详细说明。我们这讲画原理图默认单片机端口P0.0是和R1端直接相连的,这么讲是为了大家赶紧入门点亮一盏灯,如果我们为了点亮一盏灯这样的简单功能而大费笔墨去把每一处理论都说清,那都把读者学习的信心打击没了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很高兴为您解答。关于您的问题,可以使用以下代码来实现循环点亮LED: #include<reg51.h>void main(){ while(1){ P0=0xFF; //点亮所有LED delay(); //延时 P0=0x00; //熄灭所有LED delay(); //延时 } } ### 回答2: 要用C语言编写一个51单片机循环点亮LED的程序,可以按照以下步骤: 1. 首先,需要定义与单片机硬件相关的引脚和端口。根据51单片机的硬件设计,选择一个GPIO引脚作为控制LED的输出引脚,定义好该引脚对应的端口。 2. 在程序的主函数中,初始化所需要的引脚和端口。通过设置相应的寄存器,将对应的引脚配置为输出模式。 3. 在无限循环中,循环控制LED点亮与熄灭。可以使用一个变量来记录LED的状态,例如0表示灭,1表示亮。在每次循环中,通过设置或清除GPIO引脚的电平状态,控制LED点亮或熄灭。 4. 可以通过控制LED的时间间隔来实现闪烁的效果。这可以使用延时函数来实现。在每次切换LED状态之后,使用延时函数暂停一段时间,然后再进入下一次循环。 以下是一个简单的示例代码来实现循环点亮LED的功能: ```c #include <reg51.h> // 定义LED所使用的引脚和端口 sbit led = P0^0; void delay() { unsigned int i, j; for(i = 0; i < 50000; i++) { for(j = 0; j < 10; j++) { // 空循环一段时间来实现延时 } } } int main() { // 初始化LED引脚为输出模式 led = 0; // 低电平点亮LED while(1) { // 点亮LED led = 1; delay(); // 熄灭LED led = 0; delay(); } return 0; } ``` 以上就是一个简单的用C语言编写的51单片机循环点亮LED的程序。通过循环控制LED点亮和熄灭,再结合延时函数来实现闪烁的效果。 ### 回答3: 要使用C语言来编写51单片机循环点亮LED,你需要使用相关的编程工具和环境,如Keil C51等。 以下是一个基本的C语言代码示例,用于循环点亮LED灯: ```c #include <reg51.h> // 包含相关的寄存器定义文件 void delay(unsigned int time) { unsigned int i, j; for (i = 0; i < time; i++) for (j = 0; j < 1275; j++); // 延时函数的实现,根据实际情况调整延时时间 } void main() { while (1) { P1 = 0xFF; // 将P1口输出高电平,点亮LED delay(1000); // 延时1000ms,即1秒 P1 = 0x00; // 将P1口输出低电平,熄灭LED delay(1000); // 延时1000ms,即1秒 } } ``` 在该代码中,首先定义了一个延时函数`delay`,用于实现软件延时。然后在`main`函数中,通过不断循环,将P1口设置为高电平(`0xFF`)以点亮LED,并延时1秒;然后再将P1口设置为低电平(`0x00`)以熄灭LED,并再次延时1秒。这样就可以实现循环点亮LED的效果。 注意,以上代码仅为基本示例,具体的使用可能需要根据实际硬件环境和引脚连接情况进行相应的修改和调整。另外,为了编译和下载代码51单片机,你可能需要使用特定的编译工具和下载软件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值