嵌入式作业4

1、学习CH04示例程序,包括gpio.c和4个工程中的main.c。

文件1主要实现功能为点亮蓝灯

文件2的是main.c是点亮蓝灯

文件3是控制闪烁

文件4是控制开关

2、给出gpio_set (LIGHT_RED,LIGHT_OFF);语句中LIGHT_RED和LIGHT_OFF的值是多少?贴出每一步的查找截图

结果如下:

3、用直接地址编程方式,实现红绿蓝三灯轮流闪烁

通过查看user.h文件,可以看到红绿蓝三种灯的引脚号分别为7、8、9

//======================================================================
//文件名称:main.c(应用工程主函数)
//框架提供:SD-Arm(sumcu.suda.edu.cn)
//版本更新:20191108-20200419
//功能描述:见本工程的..\01_Doc\Readme.txt
//移植规则:【固定】
//======================================================================
#define GLOBLE_VAR
#include "includes.h"      //包含总头文件
 
//----------------------------------------------------------------------
//声明使用到的内部函数
//main.c使用的内部函数声明处
 
//----------------------------------------------------------------------
//主函数,一般情况下可以认为程序从此开始运行(实际上有启动过程,参见书稿)
int main(void)
{
//(1)======启动部分(开头)==========================================
//(1.1)声明main函数使用的局部变量
	uint32_t mMainLoopCount;  //主循环次数变量
	uint8_t  mFlag;           //灯的状态标志
	uint32_t mLightCount;     //灯的状态切换次数
 
//(1.2)【不变】关总中断
	DISABLE_INTERRUPTS;
 
//(1.3)给主函数使用的局部变量赋初值
    mMainLoopCount=0;    //主循环次数变量
	mFlag='B';           //灯的状态标志
	mLightCount=0;       //灯的闪烁次数
 
//(1.4)给全局变量赋初值
   
//(1.5)用户外设模块初始化
	gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_ON);	//初始化红灯
	
 
   
//(1.6)使能模块中断
    
   
//(1.7)【不变】开总中断
	ENABLE_INTERRUPTS;
    
    //asm ("bl .");
    
    //for(;;) {  }     //在此打桩,理解蓝色发光二极管为何亮起来了?
    
        
//(1)======启动部分(结尾)==========================================
 
//(2)======主循环部分(开头)========================================
	for(;;)   //for(;;)(开头)
	{
//(2.1)主循环次数变量+1
        mMainLoopCount++;
//(2.2)未达到主循环次数设定值,继续循环
		if (mMainLoopCount<=12888999)  continue;
//(2.3)达到主循环次数设定值,执行下列语句,进行灯的亮暗处理
//(2.3.1)清除循环次数变量
		mMainLoopCount=0; 
//(2.3.2)如灯状态标志mFlag为'R',灯的闪烁次数+1并显示,改变灯状态及标志
		// 红色
		if (mFlag=='R')                    //判断灯的状态标志
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='G';                       //灯的状态标志
			gpio_set(LIGHT_RED,LIGHT_ON);  //灯“亮”
			printf("标志为R  LIGHT_RED=%d ,LIGHT_ON = %d\n",LIGHT_RED,LIGHT_ON);
			printf(" 红灯:ON--\n\n");   //串口输出灯的状态
		}
//(2.3.3)如灯状态标志mFlag为'G',改变灯状态及标志
		// 绿色
		else if (mFlag=='G')                    //判断灯的状态标志
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='B';                       //灯的状态标志
			gpio_set(LIGHT_RED,LIGHT_OFF);  //灯“暗”
			gpio_set(LIGHT_GREEN,LIGHT_ON);  //灯“亮”
			printf("标志为G  LIGHT_GREEN=%d ,LIGHT_ON = %d\n",LIGHT_GREEN,LIGHT_ON);
			printf(" 绿灯:ON--\n\n");   //串口输出灯的状态
		}
		// 蓝色
		else if (mFlag=='B')                    //判断灯的状态标志
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='Y';                       //灯的状态标志
			
			gpio_set(LIGHT_GREEN,LIGHT_OFF);  //灯“暗”
			gpio_set(LIGHT_BLUE,LIGHT_ON);  //灯“亮”
			gpio_set(LIGHT_RED,LIGHT_OFF);  //灯“暗”
			printf("标志为B  LIGHT_BLUE=%d ,LIGHT_ON = %d\n",LIGHT_BLUE,LIGHT_ON);
			printf(" 蓝灯:ON--\n\n");   //串口输出灯的状态
		}
		// 黄色(红绿)
		else if (mFlag=='Y')                    //判断灯的状态标志
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='P';                       //灯的状态标志
			
			gpio_set(LIGHT_RED,LIGHT_ON);  
			gpio_set(LIGHT_BLUE,LIGHT_OFF);  
			gpio_set(LIGHT_GREEN,LIGHT_ON);  
			printf(" 黄灯:ON--\n\n");   //串口输出灯的状态
		}
		// 紫色(红蓝)
		else if (mFlag=='P')                    //判断灯的状态标志
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='C';                       //灯的状态标志
			
			gpio_set(LIGHT_RED,LIGHT_ON); 
			gpio_set(LIGHT_GREEN,LIGHT_OFF);
			gpio_set(LIGHT_BLUE,LIGHT_ON);   
			printf(" 紫灯:ON--\n\n");   //串口输出灯的状态
		}
		// 青色(蓝绿)
		else if (mFlag=='C')                    //判断灯的状态标志
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='W';                       //灯的状态标志
			gpio_set(LIGHT_BLUE,LIGHT_ON);   
			gpio_set(LIGHT_RED,LIGHT_OFF);
			gpio_set(LIGHT_GREEN,LIGHT_ON);
			printf(" 青灯:ON--\n\n");   //串口输出灯的状态
		}
		// 白色(红绿蓝)
		else if (mFlag=='W')                    //判断灯的状态标志
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='D';                       //灯的状态标志
			gpio_set(LIGHT_BLUE,LIGHT_ON);   
			gpio_set(LIGHT_GREEN,LIGHT_ON);
			gpio_set(LIGHT_RED,LIGHT_ON);  
			printf(" 白灯:ON--\n\n");   //串口输出灯的状态
		}
		// 暗色
		else if (mFlag=='D')                    //判断灯的状态标志
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='R';                       //灯的状态标志
			gpio_set(LIGHT_GREEN,LIGHT_OFF);
			gpio_set(LIGHT_BLUE,LIGHT_OFF); 
			gpio_set(LIGHT_RED,LIGHT_OFF);  
			printf(" 暗灯:ON--\n\n");   //串口输出灯的状态
		}
		
		
	}  //for(;;)结尾
//(2)======主循环部分(结尾)========================================
}   //main函数(结尾)
 
 
//======以下为主函数调用的子函数===========================================
 
 
//========================================================================
/*
 知识要素:
 (1)main.c是一个模板,该文件所有代码均不涉及具体的硬件和环境,通过调用构件
      实现对硬件的干预。
 (2)本文件中对宏GLOBLE_VAR进行了定义,所以在包含"includes.h"头文件时,会定
      义全局变量,在其他文件中包含"includes.h"头文件时,
      编译时会自动增加extern
 */

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值