嵌入式系统-第四章作业

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

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

GPIO-BlueLight_20230328/_AppPrg/main.c

GPIO-BlueLight_20230328/05_UserBoard/user.h

GPIO-BlueLight_20230328/03_MCU/MCU_drivers/gpio.h

LIGHT OFF的值是1

LIGHT_RED的值是((1<<8)|7)=263

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

修改代码

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

四、用调用构件方式,实现红绿蓝的八种组合轮流闪烁

//(1)======启动部分(结尾)==========================================
	gpio_init(LIGHT_RED,GPIO_OUTPUT,LIGHT_ON);
//(2)======主循环部分(开头)========================================
	for(;;)   //for(;;)(开头)
	{
//(2.1)主循环次数变量+1
        mMainLoopCount++;
//(2.2)未达到主循环次数设定值,继续循环
		if (mMainLoopCount<=12888999)  continue;
//(2.3)达到主循环次数设定值,执行下列语句,进行灯的亮暗处理
//(2.3.1)清除循环次数变量
		mMainLoopCount=0; 
//(2.3.2)如灯状态标志mFlag为'L',灯的闪烁次数+1并显示,改变灯状态及标志
		if (mFlag=='R')		// 红色
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='G';                       //灯的状态标志
			gpio_set(LIGHT_RED,LIGHT_ON);  //灯“亮”
			printf(" LIGHT_RED: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(" LIGHT_GREEN: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);  //灯“亮”
			printf(" LIGHT_BLUE:ON--\n\n");   //串口输出灯的状态
		}
		else if (mFlag=='Y')		// 黄色(红绿)
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='P';                       //灯的状态标志
			gpio_set(LIGHT_BLUE,LIGHT_OFF); 
			gpio_set(LIGHT_RED,LIGHT_ON);   
			gpio_set(LIGHT_GREEN,LIGHT_ON);  
			printf(" LIGHT_YELLOW:ON--\n\n");   //串口输出灯的状态
		}
		else if (mFlag=='P')		// 紫色(红蓝)
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='C';                       //灯的状态标志
			gpio_set(LIGHT_GREEN,LIGHT_OFF);
			gpio_set(LIGHT_RED,LIGHT_ON); 
			gpio_set(LIGHT_BLUE,LIGHT_ON);   
			printf(" LIGHT_PURPLE:ON--\n\n");   //串口输出灯的状态
		}
		else if (mFlag=='C')		// 青色(蓝绿)
		{
			mLightCount++;  
			printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
			mFlag='W';                       //灯的状态标志
			gpio_set(LIGHT_RED,LIGHT_OFF);
			gpio_set(LIGHT_BLUE,LIGHT_ON);   
			gpio_set(LIGHT_GREEN,LIGHT_ON);
			printf(" LIGHT_CYAN: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(" LIGHT_WHITE: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(" DARK:ON--\n\n");   //串口输出灯的状态
		}
	}  //for(;;)结尾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值