基于c8051之点亮led灯

c8051f020有按8位组织的64位数字io引脚,低端口(P0,P1,P2,P3)既可以按位寻址,也可以按字节寻址高端口(P4,P5,P6,P7)只能按字节寻址

例如 sbit LED1 =P0^0;//按位寻址正确

sfr LEDPORT=P0;//按字节寻址正确

sbit LED2=P4^0;//按位寻址不可以所以这种表达错误

sfr LEDPORT=P4;//按字节寻址正确

注意sbit是按位赋值的,sfr是按字节寻址的,所以

  1.     P0~P3都可以用sbit ,sfr.   
  2.     P4~P7只能用sfr 不可以用sbit

这时候就出现一个问题,当我们想操作P4~P7其中某一位的时候,只能一次性改变一位的数据,这样可能导致,其他位数据改变,这时候我们用下面方法

假如我们想把P4口的第3位置1,而不改变其他位,我们可以用

P4 |= 00001000;

假如我们想把P4口的第3位置0,而不改变其他位我们可以用

P4 &=11110111;

下面我们可以知道c8051有的交叉开关(是对于P0-P3) 而我们此次实验用的是P5口则用不到分配交叉开关,那样我们就不用设置交叉开关寄存器XBR

下面我们看一下,端口得输出方式

 

默认我们不设置的话,为漏极开路。 

我们可以看到推挽输出是我们需要得,那么把端口设置为推挽输出呢?下面我们看一下输出方式寄存器

从图中我们可以看出P74OUT的一位是控制代表P4-P7中的高或者低四位的输出方式,加入我们想

P5口设置为推挽输出那么我们可以这样

P74OUT=00001100;  或者P74OUT=0x0c;//设置P5口为推挽输出

此时我们设置好输出方式,那么怎么样让端口输出高电平或者低电平呢?

此时我们需要看一下端口数据寄存器

 如果我们想P5口的第2位为高电平我们可以这样

                                P5=00000100;

   ·                            或者P5=0x04;

端口初始化的总结

                        1.设置交叉开关寄存器XBR(如果用不到就不同设置,P4-P7用不到就不需要设置)

                         2.设置输出方式寄存器

                             

接下来我们来看一下如何让c8051020上点亮led灯的连接图

  经过分析我们看出P5口输出低电平led灯亮,那我们下面来点亮LED29,对应的是P5.7口

下面我们可以看一下代码

 以及实验现象

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这是用 C 语言写出点亮 LED 的程序的一个示例: ``` #include <stdio.h> #include <wiringPi.h> int main(void) { // 初始化 WiringPi wiringPiSetup(); // 设置管脚为输出模式 pinMode(0, OUTPUT); // 点亮 LED digitalWrite(0, 1); return 0; } ``` 需要注意的是,在使用本程序之前,你需要安装 WiringPi 库。此外,在程序中,"0" 表示使用的管脚编号,你可以根据你所使用的开发板或者硬件平台修改此处的管脚编号。 ### 回答2: 点亮LED的程序可以使用C语言来编写。在C语言中,可以使用GPIO库来控制硬件端口,并设置为输出模式以点亮LED。 以下是一个简单的C语言程序示例,展示如何点亮LED: ```c #include <stdio.h> #include <stdlib.h> #include <wiringPi.h> // 引用wiringPi库 #define LED_PIN 0 // 使用GPIO引脚0 int main(void) { if (wiringPiSetup() == -1) { // 初始化wiringPi库,并检查是否成功 printf("无法初始化wiringPi库\n"); return 1; } pinMode(LED_PIN, OUTPUT); // 设置GPIO引脚为输出模式 while(1) { // 无限循环 digitalWrite(LED_PIN, HIGH); // 设置GPIO引脚输出高电平,点亮LED delay(1000); // 延时1秒 digitalWrite(LED_PIN, LOW); // 设置GPIO引脚输出低电平,熄灭LED delay(1000); // 延时1秒 } return 0; } ``` 以上程序使用了`wiringPi`库来控制GPIO引脚。首先,我们使用`wiringPiSetup()`来初始化wiringPi库。然后,使用`pinMode()`函数将GPIO引脚设置为输出模式。在无限循环中,我们使用`digitalWrite()`函数将GPIO引脚设置为高电平以点亮LED,并使用`delay()`函数延时1秒。之后,将GPIO引脚设置为低电平以熄灭LED,并再次使用`delay()`函数延时1秒。程序会一直运行下去,从而实现了点亮和熄灭LED的效果。 需要注意的是,具体的GPIO引脚号可能与不同的硬件平台有关。在此示例中,我使用的是GPIO引脚0,可根据实际硬件连接情况进行相应的修改。 ### 回答3: 要使用C语言编写点亮LED的程序,首先需要连接一个可以控制LED的硬件设备,如Arduino开发板。 以下是一个简单的C语言程序示例,用于点亮连接到Arduino开发板上的LED。 ```c #include <stdio.h> #include <wiringPi.h> #define LED_PIN 0 // 设置LED连接的引脚编号,可以根据实际连接的引脚进行修改 int main() { // 初始化wiringPi库 if (wiringPiSetup() == -1) { printf("无法初始化wiringPi库\n"); return 1; } // 设置引脚模式为输出模式 pinMode(LED_PIN, OUTPUT); // 循环点亮LED while(1) { digitalWrite(LED_PIN, HIGH); // 设置引脚输出高电平,点亮LED delay(1000); // 延迟1秒 digitalWrite(LED_PIN, LOW); // 设置引脚输出低电平,熄灭LED delay(1000); // 延迟1秒 } return 0; } ``` 在以上程序中,我们使用了wiringPi库来控制引脚的状态。首先通过`wiringPiSetup()`来初始化wiringPi库。然后,使用`pinMode()`将LED引脚设置为输出模式。在`while`循环中,使用`digitalWrite()`语句将引脚的状态设置为高电平(即点亮LED),延迟1秒,然后将引脚状态设置为低电平(熄灭LED),再延迟1秒。这样就实现了周期性地点亮和熄灭LED的效果。 当然,具体的程序代码可能会因为所使用的硬件平台不同而有所不同。上述代码示例是基于Arduino开发板使用wiringPi库的情况,如果你使用其他硬件平台或者其他开发库,代码会有所不同。同时,还需要注意正确连接硬件设备,并根据连接的引脚进行相应的修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值