第8课 点亮第一个LED灯

8.1 点亮LED

硬件连接图,

由硬件图可知,当175引脚GPIO[0]输出为0时,LED点亮,当GPIO[0]输出为1时,LED就熄灭,GPIO寄存器的基地址为0x8000d000,下图为用到的几个寄存器的偏移地址

首先,选中GPIO引脚,

*((unsigned short *)(0x8000d000+0x00)) = 0x5555;

*((unsigned short *)(0x8000d000+0x04)) = 0x5555;

然后,GPIO[0]作为输出,其余的引脚置为输入。

*((unsigned short *)(0x8000d000+0x08)) = 0xfffe;

读取当前GPIO的状态,避免在后续操作中改变GPIO的状态,导致其他的问题,

unsigned short val;

val = *((unsigned short *)(0x8000d000+0x10));

最后,在输出寄存器里,将GPIO[0]置为0,具体为将GPIO当前的状态和0xfffe相与,就会将GPIO[0]置为0了,而其他引脚保持不变。并将改变后的值写入GPIO输出寄存器。

*((unsigned short *)(0x8000d000+0x0c)) = (val&0xfffe);

如果要熄灭LED,只需将最后一句换为:

*((unsigned short *)(0x8000d000+0x0c)) = (val|0x0001);

点亮LED的完整程序如下:

给该程序编写一个Makefile文件,可以借用第二课的hello程序的Makefile文件,修改一下,

接下来下载到开发板运行一下,

8.2 按键控制LED的亮灭

由硬件图可知,当按键按下的时候,GPIO[1]引脚的状态为1,当按键松开的时候,GPIO[1]引脚的状态为0,通过读取GPIO[1]引脚的状态就可以知道按键是否按下,通过一个while大循环,不断检测按键的状态。如果按键被按下,就改变一次当前led的状态。具体程序如下:

#include <stdio.h>

void GPIO_Init(void);

void led_on(unsigned short val);

void led_off(unsigned short val);

void main()

{

unsigned short val;

unsigned short flag=0;

GPIO_Init();

while(1)

{

val= *((unsigned short *)(0x8000d000+0x10));

if( (val & 0x02) == 0x02 )

{

if(flag==0)

{

led_on(val);

flag=1;

}

else

{

led_off(val);

flag=0;

}

}

}

}

void GPIO_Init(void)

{

*((unsigned short *)(0x8000d000+0x00)) = 0x5555;

*((unsigned short *)(0x8000d000+0x04)) = 0x5555;

*((unsigned short *)(0x8000d000+0x08)) = 0xfffe;

}

void led_on(unsigned short val)

{

*((unsigned short *)(0x8000d000+0x0c)) = (val&0xfffe);

}

void led_off(unsigned short val)

{

*((unsigned short *)(0x8000d000+0x0c)) = (val|0x0001);

}

8.3 总结

这一课主要是编程的内容,问题不难,一般都是嵌入式入门的第一个程序——点亮发光二极管,通过这一课,对操作寄存器来控制引脚的状态大体有了一些理解。同时也学到了一些嵌入式c语言和标准c语言之间的差异。

原文地址:https://www.cnblogs.com/LiuFarrell/p/9836798.html

时间: 2024-11-05 16:01:13

第8课 点亮第一个LED灯的相关文章

2016.12.12 点亮第一个LED灯

一.keil编译程标准流程 注意事项: 1.建立的 工程 和 .c文件 文件名一样. 二.LED模块图 三.点亮第一个LED灯代码:    

[MSP430DriverLib-1]使用库开发并点亮第一个LED灯

???? MSP430DriverLib库下载地址:http://www.ti.com/tool/MSPDRIVERLIB ???? 下载后进入driverlib文件夹,选择对应的型号,这里我选择的是MSP430F5xx_6xx,进入后将里面的文件都复制到你的msp430工程目录下即可.这里我将要复制的文件都放在DriverLib文件夹里. ???? 这里我用的是TI的MSP430F5529 LaunchPad Evaluation Kit的板子.首先我们来点亮第一个LED,以下为源代码: #i

GPIO接口及点亮第一个LED灯

一.GIPIO介绍 General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C.SMBus或SPI接口简化了I/O口的扩展.当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能. 1.GPIO的优点 低功耗:GPIO具有更低的功率损耗(大约1μA,μC的工作电流则为100μA). 集成IIC从机接口:GPIO内置IIC从机接口,即使在待机模式下也能够全速工作.

BlinkLED 点亮第一个LED灯(C#)

界面: <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBox Name="infoText" Text="Ready" FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center&q

BlinkLED 点亮第一个LED灯

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(25,GPIO.OUT) while True: GPIO.output(25,GPIO.HIGH) time.sleep(0.5) GPIO.output(25,GPIO.LOW) time.sleep(0.5)

ESP8266-12F学习之点亮一个LED灯

点亮一个LED灯     上一篇文章,我们介绍了怎么在Windows系统下搭建一个SEP8266的开发环境,那在这一篇文章中我们要开始来编写一个硬件入门经典小程序,如何点亮一个LED小灯,同时在这一章中我们还会介绍怎么样将编译好的程序下载到ESP8266-12f中.  第一步:下载官方demo框架,从http://wiki.ai-thinker.com/esp8266/examples 下载,当然,也可以在文章最后下载我的附件,下载完后,我们将文件添加到SDK中进行编译,步骤如图: 点开C/C+

nodejs和树莓派开发以及点亮RGB的LED灯代码

前段时间集团举行前端IOT比赛,借此机会熟悉了树莓派相关的东西,特此记录一些相关的文档和开发指南. 先介绍一些树莓派的入门教程 阮一峰的树莓派入门 微雪电子-树莓派硬件中文官网 ssh链接树莓派 ssh [email protected](ip)密码:raspberry 设置显示设备 推荐选购3.5吋或者5吋的HDMI显示设备,我第一次买的3.2吋的串口显示器,占用了我20个串口的针脚. 设备链接见这里 使用3.5吋显示器 cd /boot/LCD-show/./LCD35-show使用HDMI

点亮一个LED灯

设计定义: 二选一多路器 两个输入IO,a.b.可以是高电平, 输入按键按下时,LED灯与a端口状态保持一致, 按键释放时,LED灯与b端口状态保持一致 设计输入:创建一个project 编写功能代码 module LED(a,b,key_in,led_out); input a;//输入端口a,b: input b; input key_in;//按键输入,实现输入通道的选择 output led_out;//led控制端口 assign led_out=(key_in==0)?a:b;//当

在 S5PV210 的 开发板上 点亮 一个 LED 灯

参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用  xshell 工具 连接 开发板  ,winscp 工具 连接 开发板  ,  准备 一个 Ubuntu  32位 ,装上 交叉编译链.. 使用下面 代码 和 Makefile 文件 进行编译  ,生成的  执行 文件  利用 winscp 软件复制到 Linux开发板上 ,利用 xshell 运行 这个可执行文件. 下面    代码的  功能  是   新建 一个 TCP 客户