韦东山嵌入式第一期学习笔记DAY_5——8_10完善LED程序_编写按键程序

这篇博客记录了作者GWD在2019.7.6的学习笔记,主要涉及韦东山嵌入式课程的第一期内容。文章介绍了如何改进LED灯程序,包括关闭看门狗、自动识别启动类型以及引入宏定义头文件。此外,还讲解了如何通过按键控制LED灯,按一个亮一个,并分析了按键控制程序中三盏灯上电常亮的原因。文中给出了led改进代码和按键控制LED的代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:GWD 时间:2019.7.6

一、课程内容
1、改进上一节的LED灯程序,改进内容如下1)、关闭看门狗防止程序终止死循环;2)、程序自动识别nor启动或者nand启动,烧写代码进不同的存储器;3)、引入宏定义头文件;
1)、问:如何关闭看门狗?
答:在这里插入图片描述
2)、问:如何实现代码自动判断nor或者nand启动,将程序烧写进不同的地址?
答:nor时不可以直接写入的,利用这个特点写入一个值给地址0,然后判断与之前的值一样否?若一样就是nand否则是nor。
在这里插入图片描述
2.使用按键控制LED灯程序,按一个亮一个。
二、学习要点:
1、问:在按键控制程序中为什么三盏灯上电就常亮?
答:在引脚做输出时要在程序中做高电平初始化。
三、代码:
(一)led改进代码
1、代码功能;
2、代码:
1)、查询手册,和原理图确定LED引脚
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Led.c

#include "s3c2440_soc.h"

int led_on(unsigned int num)
{


	if(0 == num )
		{
		GPFCON = 0x100;
		GPFDAT &= ~(1<<4);
		}
	if(1 == num )
		{
		GPFCON = 0x400;
		GPFDAT &= ~(1<<5);
		}
	if(2 == num )
		{
		GPFCON = 0x1000;
		GPFDAT &= ~(1<<6);
		}
	return 0;
}

int delay(unsigned int timer)
{
	while(timer--);
}

Start.S

.text
.global _start

_start:

	/*关闭看门狗*/
	ldr r0,=0x53000000
	mov r1,#0;
	str r1,[r0]

	//设置nor或者nand
	mov r0,#0
	ldr r1,[r0]//立即数加取地址符
	str r0,[r0]
	ldr r2,[r0]//外人,邻居的角色
	cmp r0,r2
	ldr sp,=0x40000000+4096
	moveq sp,#4096
	streq r0,[r1]
		
	mov r0,#0
	bl led_on
	ldr r0,=100000
	bl delay
	mov r0,#1
	bl led_on
	ldr r0,=100000
	bl delay
	mov r0,#2
	bl led_on
	
LOOP:
	b LOOP

(二)、按键点亮LED灯泡代码
1、代码功能:使用按键控制LED灯程序,按一个亮一个
2、代码
1)、查询原理图,找到三个按键的引脚;
在这里插入图片描述
在这里插入图片描述
2)、EINT0控制LED0, EINT2控制LED1, EINT11控制LED2
3)、代码
Led.c

#include "s3c2440_soc.h"

int main(void)
{
	 int val ;
	GPFCON &= ~((3<<8) | (3<<10) | (3<<12));
	GPFCON |=  ((1<<8) | (1<<10) | (1<<12));

	GPFCON &= ~((3<<0) | (3<<4));  /* gpf0,2 */
	GPGCON &= ~((3<<6));  /* gpg3 */
	while(1)
	{
	if( GPFDAT &(1<<0) ) 
		{
		GPFDAT |= (1<<6);
		}
	else
		{
		GPFDAT &= ~(1<<6);
		}
	if( GPFDAT &(1<<2) )  
		{
		GPFDAT |= (1<<5);
		}
	else
		{
		GPFDAT &= ~(1<<5);
		}
	if( GPGDAT &(1<<3) ) 
		{
		val = 0;
		GPFDAT |= (1<<4);
		}
	else
		{
	     val = 3;
		}
	if( val == 3 ) 
		{
		GPFDAT &= ~(1<<4);
		}
	}
	return 0;

start.S

.text
.global _start
_start:
	/*关闭看门狗*/
	ldr r0,=0x53000000
	mov r1,#0;
	str r1,[r0]
	//设置nor或者nand
	mov r0,#0
	ldr r1,[r0]//立即数加取地址符
	str r0,[r0]
	ldr r2,[r0]//外人,邻居的角色
	cmp r0,r2
	ldr sp,=0x40000000+4096
	moveq sp,#4096
	streq r0,[r1]
	bl main
LOOP:
	b LOOP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值