嵌入式作业四

2.

对其定义进行查看

可以看到LIGHT_RED的值为(PTB_NUM|7)和LIGHT_OFF值为1(低电平点亮)

再对PTB_NUM的定义进行查找

可知PTB_NUM为0b100000000 则PTB_NUM|7为0x0b1 0000 0111

3.

根据定义可知红绿蓝引脚分别为7、8、9

对代码进行修改增加如下:

    *gpio_mode &= ~(3<<18);  //0b11111111111100111111111111111111;

    *gpio_mode |=(1<<18);    //0b00000000000001000000000000000000;

    *gpio_mode &= ~(3<<16);

    *gpio_mode |=(1<<16);

    

    *gpio_mode &= ~(3<<14);

*gpio_mode |=(1<<14);

主循环:

uint8_t flag = 0;//判断是否已经亮过

    for(;;)     //for(;;)(开头)

    {

        //(2.1)主循环次数+1,并判断是否小于特定常数

        mMainLoopCount++;                         //+1

        if (mMainLoopCount<=6556677)  continue;   //如果小于特定常数,继续循环

        //(2.2)主循环次数超过特定常数,灯状态进行切换(这样灯会闪烁)

        mMainLoopCount=0;      //清主循环次数

        //切换灯状态

             if(mFlag == 'A' && flag == 0)  //判断mFlag为R时候蓝灯亮

            {

    *gpio_brr|=(1<<9);     //设置灯“亮”

             printf("蓝灯:亮\r\n");  //通过调试串口输出灯的状态

             flag = 1;

             continue;

            }

         if(mFlag == 'A' && flag == 1) //判断mFlag为R时候红灯亮

            {

    *gpio_bsrr|=(1<<9);     //设置灯“灭”

             printf("蓝灯:灭\r\n");  //通过调试串口输出灯的状态

             mFlag='R';             //改变状态标志

             flag = 0;

             continue;

            }

            if(mFlag == 'R' && flag == 0) //判断mFlag为R时候红灯亮

            {

    *gpio_brr|=(1<<7);     //设置红灯“亮”

             printf("红灯:亮\r\n");  //通过调试串口输出灯的状态

             flag = 1;

             continue;

            }

   if(mFlag == 'R' && flag == 1) //判断mFlag为R时候红灯亮

            {

    *gpio_bsrr|=(1<<7);     //设置灯“灭”

             printf("红灯:灭\r\n");  //通过调试串口输出灯的状态

             mFlag='G';             //改变状态标志

             flag = 0;

             continue;

            }

            if(mFlag == 'G' && flag == 0) //判断mFlag为R时候绿灯亮

            {

    *gpio_brr|=(1<<8);     //设置绿灯“亮”

             printf("绿灯:亮\r\n");  //通过调试串口输出灯的状态

             flag = 1;

             continue;

            }

         if(mFlag == 'G' && flag == 1) //判断mFlag为R时候绿灯灭

            {

    *gpio_bsrr|=(1<<8);     //设置灯“灭”

             printf("绿灯:灭\r\n");  //通过调试串口输出灯的状态

             mFlag='A';             //改变状态标志

             flag = 0;

             continue;

            }

    }     //for(;;)结尾

可以三种颜色的灯交替变换。

4.

Main函数修改如下:

uint32_t mMainLoopCount;  //主循环使用的记录主循环次数变量

uint8_t  mFlag;            //主循环使用的临时变量

uint8_t  colornum;        //灯排列组合的编号,一共有八种颜色

//调用gpio_init对灯进行初始化

    gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_ON); //初始化蓝灯

gpio_init(LIGHT_GREEN,GPIO_OUTPUT,LIGHT_ON); //初始化绿灯

gpio_init(LIGHT_RED,GPIO_OUTPUT,LIGHT_ON); //初始化红灯

printf("------------------------广州大学------------------------\r\n");

    printf("32106100049 ---------- zhang jintao\n");

    //(1)======启动部分(结尾)==========================================

    

    //(2)======主循环部分(开头)=========================================

    for(;;)     //for(;;)(开头)

    {

        if(colornum > 7)

        {

         colornum = 0;

        }

        //(2.1)主循环次数+1,并判断是否小于特定常数

        mMainLoopCount++;                         //+1

        if (mMainLoopCount<=6556677)  continue;   //如果小于特定常数,继续循环

        //(2.2)主循环次数超过特定常数,灯状态进行切换(这样灯会闪烁)

        mMainLoopCount=0;      //清主循环次数

        //切换灯状态

if(colornum == 0)//第一种组合

{

colornum++;

gpio_set(LIGHT_RED,LIGHT_OFF);

gpio_set(LIGHT_GREEN,LIGHT_OFF);

gpio_set(LIGHT_BLUE,LIGHT_OFF);

printf("灯的颜色为:黑色\n");

continue;

}

if(colornum == 1)//第二种组合

{

colornum++;

gpio_set(LIGHT_RED,LIGHT_ON);

gpio_set(LIGHT_GREEN,LIGHT_OFF);

gpio_set(LIGHT_BLUE,LIGHT_OFF);

printf("灯的颜色为:红色\n");

continue;

}

if(colornum == 2)//第三种组合

{

      colornum++;

gpio_set(LIGHT_RED,LIGHT_OFF);

gpio_set(LIGHT_GREEN,LIGHT_ON);

gpio_set(LIGHT_BLUE,LIGHT_OFF);

printf("灯的颜色为:绿色\n");

continue;

}

if(colornum == 3)//第四种组合

{

colornum++;

gpio_set(LIGHT_RED,LIGHT_ON);

gpio_set(LIGHT_GREEN,LIGHT_ON);

gpio_set(LIGHT_BLUE,LIGHT_OFF);

printf("灯的颜色为:黄色\n");

continue;

}

if(colornum == 4)//第五种组合

{

colornum++;

gpio_set(LIGHT_RED,LIGHT_OFF);

gpio_set(LIGHT_GREEN,LIGHT_OFF);

gpio_set(LIGHT_BLUE,LIGHT_ON);

printf("灯的颜色为:蓝色\n");

continue;

}

if(colornum == 5)//第六种组合

{

colornum++;

gpio_set(LIGHT_RED,LIGHT_ON);

gpio_set(LIGHT_GREEN,LIGHT_OFF);

gpio_set(LIGHT_BLUE,LIGHT_ON);

printf("灯的颜色为:紫色\n");

continue;

}

if(colornum == 6)//第七种组合

{

colornum++;

gpio_set(LIGHT_RED,LIGHT_OFF);

gpio_set(LIGHT_GREEN,LIGHT_ON);

gpio_set(LIGHT_BLUE,LIGHT_ON);

printf("灯的颜色为:青色\n");

continue;

}

if(colornum == 7)//第八种组合

{

colornum++;

gpio_set(LIGHT_RED,LIGHT_ON);

gpio_set(LIGHT_GREEN,LIGHT_ON);

gpio_set(LIGHT_BLUE,LIGHT_ON);

printf("灯的颜色为:白色\n");

continue;

}

     }     //for(;;)结尾

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值