嵌入式作业3

要求:

  1. 用GPIO端口的直接地址编程方式,实现红绿蓝三灯轮流闪烁。
  2. 用调用GPIO构件方式,实现红绿蓝的八种组合轮流闪烁。

 1.

for(;;)     //for(;;)(开头)
    {
        
        //(2.1)主循环次数+1,并判断是否小于特定常数
        mMainLoopCount++;                         //+1
        if (mMainLoopCount<=6556677)  continue;   //如果小于特定常数,继续循环
        //(2.2)主循环次数超过特定常数,灯状态进行切换(这样灯会闪烁)
        mMainLoopCount=0;      //清主循环次数
        //切换灯状态
        if (mFlag=='A')   //若灯状态标志为'A'
        {
		    *gpio_brr|=(1<<9);     //设置灯“亮”
            printf("红灯:亮\r\n");  //通过调试串口输出灯的状态
             *gpio_bsrr|=(1<<9);     //设置灯“暗”
            mFlag='B';             //改变状态标志
        }
        else if (mFlag=='B')   //若灯状态标志为'B'
        {
		    *gpio_brr|=(1<<8);     //设置灯“亮”
            printf("绿灯:亮\r\n");  //通过调试串口输出灯的状态
             *gpio_bsrr|=(1<<9);     //设置灯“暗”
            mFlag='C';             //改变状态标志
        } 
        else if (mFlag=='C')   //若灯状态标志为'C'
        {
		    *gpio_brr|=(1<<7);     //设置灯“亮”
            printf("蓝灯:亮\r\n");  //通过调试串口输出灯的状态
             *gpio_bsrr|=(1<<9);     //设置灯“暗”
            mFlag='A';             //改变状态标志
        }
 
    }     //for(;;)结尾

运行结果 :

 

 2.

//for(;;) {  }     //在此打桩,理解蓝色发光二极管为何亮起来了?
    
        
	for(;;)   //for(;;)(开头)
	{
//(2.1)主循环次数变量+1
        mMainLoopCount++;
//(2.2)未达到主循环次数设定值,继续循环
		if (mMainLoopCount<=12888999)  continue;
//(2.3)达到主循环次数设定值,执行下列语句,进行灯的亮暗处理
//(2.3.1)清除循环次数变量
		mMainLoopCount=0; 
//亮灯循
		if (mPoint==0)                    //判断灯的状态标志
		{
			mLightCount++;//次数记录
			mPoint++;
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);		
			gpio_set(LIGHT_RED,LIGHT_ON);  //红灯“亮”
			gpio_set(LIGHT_GREEN,LIGHT_ON);  //绿灯“亮”
			gpio_set(LIGHT_BLUE,LIGHT_ON);  //蓝灯“亮”
			printf(" 红灯“亮” 绿灯“亮” 蓝灯“亮”--\n");   //串口输出灯的状态
            mFlag='B';                       //切换灯的状态标志
		}
		else if (mPoint==1)                    //判断灯的状态标志
		{
			mLightCount++;  
			mPoint++;
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			gpio_set(LIGHT_RED,LIGHT_OFF);  //红灯“暗”
			gpio_set(LIGHT_GREEN,LIGHT_ON);  //绿灯“亮”
			gpio_set(LIGHT_BLUE,LIGHT_ON);  //蓝灯“亮”
			printf(" 红灯“暗” 绿灯“亮” 蓝灯“亮”--\n");   //串口输出灯的状态
            mFlag='C';                       //切换灯的状态标志
		}
		else if (mPoint==2)                    //判断灯的状态标志
		{
			mLightCount++;  
			mPoint++;
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			gpio_set(LIGHT_RED,LIGHT_ON);  //红灯“亮”
			gpio_set(LIGHT_GREEN,LIGHT_OFF);  //绿灯“暗”
			gpio_set(LIGHT_BLUE,LIGHT_ON);  //蓝灯“亮”
			printf(" 红灯“亮” 绿灯“暗” 蓝灯“亮”--\n");   //串口输出灯的状态
			mFlag='D';                       //切换灯的状态标志
		}
		else if (mPoint==3)                    //判断灯的状态标志
		{
			mLightCount++;  
			mPoint++;
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			gpio_set(LIGHT_RED,LIGHT_ON);  //红灯“亮”
			gpio_set(LIGHT_GREEN,LIGHT_ON);  //绿灯“亮”
			gpio_set(LIGHT_BLUE,LIGHT_OFF);  //蓝灯“暗”
			printf(" 红灯“亮” 绿灯“亮” 蓝灯“暗”--\n");   //串口输出灯的状态
			mFlag='E';                       //切换灯的状态标志
		}
		else if (mPoint==4)                    //判断灯的状态标志
		{
			mLightCount++;  
			mPoint++;
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			gpio_set(LIGHT_RED,LIGHT_OFF);  //红灯“暗”
			gpio_set(LIGHT_GREEN,LIGHT_OFF);  //绿灯“暗”
			gpio_set(LIGHT_BLUE,LIGHT_ON);  //蓝灯“亮”
			printf(" 红灯“暗” 绿灯“暗” 蓝灯“亮” --\n");   //串口输出灯的状态
			mFlag='F';                       //切换灯的状态标志
		}
		else if (mPoint==5)                    //判断灯的状态标志
		{
			mLightCount++;  
			mPoint++;
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			gpio_set(LIGHT_RED,LIGHT_OFF);  //红灯“暗”
			gpio_set(LIGHT_GREEN,LIGHT_ON);  //绿灯“亮”
			gpio_set(LIGHT_BLUE,LIGHT_OFF);  //蓝灯“暗”
			printf(" 红灯“暗” 绿灯“亮” 蓝灯“暗”--\n");   //串口输出灯的状态
			mFlag='G';                       //切换灯的状态标志
		}
		else if (mPoint==6)                    //判断灯的状态标志
		{
			mLightCount++;  
			mPoint++;
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			gpio_set(LIGHT_RED,LIGHT_ON);  //红灯“亮”
			gpio_set(LIGHT_GREEN,LIGHT_OFF);  //绿灯“暗”
			gpio_set(LIGHT_BLUE,LIGHT_OFF);  //蓝灯“暗”
			printf(" 红灯“亮” 绿灯“暗” 蓝灯“暗” --\n");   //串口输出灯的状态
			mFlag='H';                       //切换灯的状态标志
		}
		else if (mPoint==7)                    //判断灯的状态标志
		{
			mLightCount++;  
			mPoint=0;
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			gpio_set(LIGHT_RED,LIGHT_OFF);  //红灯“暗”
			gpio_set(LIGHT_GREEN,LIGHT_OFF);  //绿灯“暗”
			gpio_set(LIGHT_BLUE,LIGHT_OFF);  //蓝灯“暗”
			printf(" 红灯“暗” 绿灯“暗” 蓝灯“暗”--\n");   //串口输出灯的状态
			mFlag='A';                       //切换灯的状态标志
		}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值