一、给出 gpio_set(LIGHT_RED,LIGHT_OFF); 语句中, LIGHT_RED和LIGHT_OFF的值是多少?贴出每一步的查找截图
①导入工程文件GPIO-BlueLight_20230328:
②在主函数中找到gpio_set(LIGHT_RED,LIGHT_OFF)语句:
③点击查看定义后跳转到user.h中,可以看到LIGHT_RED的值为PTB_NUM|7,而LIGHT_OFF的值为1:
④查看PTB_NUM的定义:
⑤跳转到gpio.h文件中,可以看到PTB_NUM的值为1<<8,即是0000 0001 0000 0111:
综上,LIGHT_RED的值为0000 0001 0000 0111,LIGHT_OFF的值为1。
二、用直接地址编程方式,实现红绿蓝三灯轮流闪烁
①导入直接地址编程文件:
②编写三灯轮流闪烁程序:
③编译文件查看运行结果:
三.用调用构件方式,实现红绿蓝的八种组合轮流闪烁
①导入构件工程文件:
②增加灯光颜色交换变量:
③初始化红绿蓝灯:
④编写八种组合灯光闪烁程序:
if (mColorCount=='0') //判断灯的颜色组合情况
{
mLightCount++;
mColorCount++;
printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
mFlag='A'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_ON); //红灯亮
gpio_set(LIGHT_GREEN,LIGHT_OFF); //绿灯暗
gpio_set(LIGHT_BLUE,LIGHT_OFF); //蓝灯暗
printf(" 红灯:亮\n 绿灯:暗\n 蓝灯:暗\n"); //串口输出灯的状态
continue;
}
//(2.3.3)如灯状态标志mFlag为'A',改变灯状态及标志
if(mColorCount=='1')
{
mLightCount++;
mColorCount++;
printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
mFlag='A'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_OFF); //红灯暗
gpio_set(LIGHT_GREEN,LIGHT_ON); //绿灯亮
gpio_set(LIGHT_BLUE,LIGHT_OFF); //蓝灯暗
printf(" 红灯:暗\n 绿灯:亮\n 蓝灯:暗\n"); //串口输出灯的状态
continue;
}
if(mColorCount=='2')
{
mLightCount++;
mColorCount++;
printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
mFlag='A'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_OFF); //红灯暗
gpio_set(LIGHT_GREEN,LIGHT_OFF); //绿灯暗
gpio_set(LIGHT_BLUE,LIGHT_ON); //蓝灯亮
printf(" 红灯:暗\n 绿灯:暗\n 蓝灯:亮\n"); //串口输出灯的状态
}
if(mColorCount=='3')
{
mLightCount++;
mColorCount++;
printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
mFlag='A'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_ON); //红灯亮
gpio_set(LIGHT_GREEN,LIGHT_ON); //绿灯亮
gpio_set(LIGHT_BLUE,LIGHT_OFF); //蓝灯暗
printf(" 红灯:亮\n 绿灯:亮\n 蓝灯:暗\n"); //串口输出灯的状态
continue;
}
if(mColorCount=='4')
{
mLightCount++;
mColorCount++;
printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
mFlag='A'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_OFF); //红灯暗
gpio_set(LIGHT_GREEN,LIGHT_ON); //绿灯亮
gpio_set(LIGHT_BLUE,LIGHT_ON); //蓝灯亮
printf(" 红灯:暗\n 绿灯:亮\n 蓝灯:亮\n"); //串口输出灯的状态
continue;
}
if(mColorCount=='5')
{
mLightCount++;
mColorCount++;
printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
mFlag='A'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_ON); //红灯亮
gpio_set(LIGHT_GREEN,LIGHT_OFF); //绿灯暗
gpio_set(LIGHT_BLUE,LIGHT_ON); //蓝灯亮
printf(" 红灯:亮\n 绿灯:暗\n 蓝灯:亮\n"); //串口输出灯的状态
continue;
}
if(mColorCount=='6')
{
mLightCount++;
mColorCount++;
printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
mFlag='L'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_ON); //红灯暗
gpio_set(LIGHT_GREEN,LIGHT_ON); //绿灯暗
gpio_set(LIGHT_BLUE,LIGHT_ON); //蓝灯暗
printf(" 红灯:暗\n 绿灯:暗\n 蓝灯:暗\n"); //串口输出灯的状态
continue;
}
if(mColorCount=='7')
{
mLightCount++;
mColorCount++;
printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
mFlag='A'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_ON); //红灯亮
gpio_set(LIGHT_GREEN,LIGHT_ON); //绿灯亮
gpio_set(LIGHT_BLUE,LIGHT_ON); //蓝灯亮
printf("红灯:亮\n绿灯:亮\n蓝灯:亮\n"); //串口输出灯的状态
continue;
}
⑤编译文件查看结果: