要求:
- 用GPIO端口的直接地址编程方式,实现红绿蓝三灯轮流闪烁。
- 用调用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'; //切换灯的状态标志
}
运行结果: