当前位置: 首页 > news >正文

红绿蓝灯闪烁

要完成红绿蓝灯闪烁,注意调整灯的状态标志和灯的控制逻辑。

//======================================================================
//文件名称: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='R';           //灯的状态标志,初始为红灯mLightCount=0;       //灯的闪烁次数//(1.4)给全局变量赋初值//(1.5)用户外设模块初始化gpio_init(LIGHT_RED,GPIO_OUTPUT,LIGHT_ON);	//初始化红灯gpio_init(LIGHT_GREEN,GPIO_OUTPUT,LIGHT_OFF); //初始化绿灯gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_OFF);  //初始化蓝灯//(1.6)使能模块中断//(1.7)【不变】开总中断ENABLE_INTERRUPTS;printf("------------------------------------------------------\n");   printf("金葫芦提示:构件法输出控制小灯亮暗   \n");printf("    交通灯依次闪烁:红灯、绿灯、蓝灯。\n");printf("------------------------------------------------------\n"); //asm ("bl .");//for(;;) {  }     //在此打桩,理解交通灯为何亮起来了?//(1)======启动部分(结尾)==========================================//(2)======主循环部分(开头)========================================for(;;)   //for(;;)(开头){
//(2.1)主循环次数变量+1mMainLoopCount++;
//(2.2)未达到主循环次数设定值,继续循环if (mMainLoopCount<=12888999)  continue;
//(2.3)达到主循环次数设定值,执行下列语句,进行灯的亮暗处理
//(2.3.1)清除循环次数变量mMainLoopCount=0; 
//(2.3.2)根据灯状态标志mFlag控制灯的状态if (mFlag=='R')                    //判断灯的状态标志{mLightCount++;  printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);mFlag='G';                       //改变状态为绿灯gpio_set(LIGHT_RED,LIGHT_OFF);  //红灯“灭”gpio_set(LIGHT_GREEN,LIGHT_ON);  //绿灯“亮”printf(" LIGHT_GREEN:ON--\n");   //串口输出灯的状态}else if(mFlag=='G'){mFlag='B';                       //改变状态为蓝灯gpio_set(LIGHT_GREEN,LIGHT_OFF); //绿灯“灭”gpio_set(LIGHT_BLUE,LIGHT_ON);   //蓝灯“亮”printf(" LIGHT_BLUE:ON--\n");    //串口输出灯的状态}else {mFlag='R';                       //改变状态为红灯gpio_set(LIGHT_BLUE,LIGHT_OFF);  //蓝灯“灭”gpio_set(LIGHT_RED,LIGHT_ON);     //红灯“亮”printf(" LIGHT_RED:ON--\n");      //串口输出灯的状态}}
//(2)======主循环部分(结尾)====================================//main函数(//======以下为主函数调用的子函数===========================================//========================================================================
/*知识要素:(1)main.c是一个模板,该文件所有代码均不涉及具体的硬件和环境,通过调用构件实现对硬件的干预。(2)本文件中对宏GLOBLE_VAR进行了定义,所以在包含"includes.h"头文件时,定义全局变量,在其他文件中包含"includes.h"头文件时,编译时会自动增加extern*/

看清楚在for(;;)循环里:

#include "includes.h"int main(void)
{uint32_t mMainLoopCount = 0;uint8_t mFlag = 'R';DISABLE_INTERRUPTS;gpio_init(LIGHT_RED, GPIO_OUTPUT, LIGHT_ON);gpio_init(LIGHT_GREEN, GPIO_OUTPUT, LIGHT_OFF);gpio_init(LIGHT_BLUE, GPIO_OUTPUT, LIGHT_OFF);ENABLE_INTERRUPTS;for (;;){mMainLoopCount++;if (mMainLoopCount <= 12888999) continue;mMainLoopCount = 0;if (mFlag == 'R'){gpio_set(LIGHT_RED, LIGHT_OFF);gpio_set(LIGHT_GREEN, LIGHT_ON);mFlag = 'G';}else if (mFlag == 'G'){gpio_set(LIGHT_GREEN, LIGHT_OFF);gpio_set(LIGHT_BLUE, LIGHT_ON);mFlag = 'B';}else{gpio_set(LIGHT_BLUE, LIGHT_OFF);gpio_set(LIGHT_RED, LIGHT_ON);mFlag = 'R';}}
}


http://www.mrgr.cn/news/52974.html

相关文章:

  • 基恩士读取2个二维码
  • 世人尽知雄鸡图,谁人犹记海棠泪?
  • Android实战之如何快速实现自动轮播图
  • Axure横向菜单高级交互
  • 微服务架构与物联网深度融合,从理论到实践助力企业数字化转型
  • 南京观海微电子---多路降压稳压DC-DC开关电源电路设计(3.3V、5V、12V、ADJ)
  • map和set的模拟实现
  • 如何做好私域精准引流
  • SpringBoot中的对象
  • 跳跃表详解及案例
  • 掌控板读取板载光线传感器数值
  • kubernetes安装web界面
  • MFC中多线程进度条的简单代码实现
  • 中英互译大比拼,这5款工具随心选!
  • 上海桶饭配送中腾食品:资源整合与一站式服务典范
  • 四步向gem5中添加用户自定义的分支预测器
  • vue综合指南(六)
  • springboot033小徐影城管理系统(论文+源码)_kaic
  • 复现EfficientNet
  • 平台上新 | 智能分析——你的智能体调优工具已上线!