标题:
C语言switch语句问题,请单片机大虾门帮忙看看代码
[打印本页]
作者:
leng
时间:
2019-3-1 09:58
标题:
C语言switch语句问题,请单片机大虾门帮忙看看代码
#include "reg52.h"
typedef unsigned char u8 ; //定义变量参//
typedef unsigned int u16 ;
sbit RED_A=P0^2; //A方向红灯
sbit YELLOW_A=P0^3;//A方向黄灯
sbit GREEN_A=P0^4;//A方向绿灯
sbit REDC_A=P0^0; //A方向人行道红灯
sbit GREENC_A=P0^1; //A方向人行道绿灯
sbit RED_B=P0^5;
sbit YELLOW_B=P0^6;
sbit GREEN_B=P0^7;
sbit REDC_B=P2^0;
sbit GREENC_B=P2^1;
void delay5s(void) //误差 0us
{
unsigned char a,b,c;
for(c=165;c>0;c--)
for(b=100;b>0;b--)
for(a=150;a>0;a--);
}
void delay30s(void) //误差 0us
{
unsigned char a,b,c,n;
for(c=254;c>0;c--)
for(b=232;b>0;b--)
for(a=253;a>0;a--);
for(n=2440;n>0;n--);
}
void jiaotongdeng()
{
switch()
{
case1 RED_A=1;GREEN_B=1;GREENC_B=1;REDC_A=0;
//A方向红灯 B向绿灯 B向人行道绿灯 A向行道红灯 亮灯
RED_B=0;YELLOW_B=0;REDC_B=0;GREEN_A=0;GREENC_A=0; YELLOW_A=0 ;
//B向红灯 B黄灯 B向行道红灯 A向绿灯 A向黄灯 A向行道绿灯 熄灯
delay30s;
RED_A=~RED_A;GREEN_B=~GREEN_B;GREENC_B=~GREENC_B;REDC_A=~REDC_A
//A方向红灯 B向绿灯 B向人行道绿灯 A向行道绿灯 闪亮灯
YELLOW_A=0;GREEN_A=0;GREENC_A= 0;RED_B=0;YELLOW_B=0;REDC_B=0
//A方向黄灯 绿灯 行道绿灯 B方向红灯 黄灯 行道红灯 熄灯
delay5s;
break;
case2 RED_B=1;GREEN_A=1;GREENC_A=1;REDC_B=0; //B向红灯亮灯
RED_A=0;YELLOW_B=0;REDC_A=0;GREEN_B=0;GREENC_B=0; YELLOW_B=0 ; //熄灯
delay30s;
RED_B=~RED_B;GREEN_A=~GREEN_A;GREENC_A=~GREENC_A;REDC_B=~REDC_B;
//A方向红灯 B向绿灯 B向人行道绿灯 A向行道绿灯 闪亮灯
YELLOW_B=0;GREEN_B=0;GREENC_B= 0;RED_A=0;YELLOW_A=0;REDC_A=0
//A方向黄灯 绿灯 行道绿灯 B方向红灯 黄灯 行道红灯 熄灯
delay5s;
break;
}
}
void main()
{
while(1)
{
jiaotongdeng();
}
}
这个是简单交通灯实验 在开发板上没有现象 请大虾们指点指点不胜感激
作者:
xuyaqi
时间:
2019-3-1 11:33
switch()括号里要有判断的变量名。
作者:
wc86110
时间:
2019-3-1 11:52
没电路图怎么知道哪错
作者:
aybco
时间:
2019-3-1 11:57
switch(表达式) case 值
作者:
yoxi
时间:
2019-3-1 14:10
看看这个,简单明了
http://www.51hei.com/bbs/dpj-146299-1.html
作者:
a89588038
时间:
2019-3-1 14:28
switch的一般形式如下:
switch (表达式)
{
case 常量表达式1: 语句1
case 常量表达式2: 语句2
┇
case 常量表达式n: 语句n
default: 语句n+1
}
说明:
1) switch 后面括号内的“表达式”必须是整数类型。也就是说可以是 int 型变量、char 型变量,也可以直接是整数或字符常量,哪怕是负数都可以。但绝对不可以是实数,float 型变量、double 型变量、小数常量通通不行,全部都是语法错误。
2) switch 下的 case 和 default 必须用一对大括号{}括起来。
3) 当switch后面括号内“表达式”的值与某个case后面的“常量表达式”的值相等时,就执行此case后面的语句。执行完一个case后面的语句后,流程控制转移到下一个case继续执行。如果你只想执行这一个case语句,不想执行其他case,那么就需要在这个case语句后面加上break,跳出switch语句。
再重申一下:switch是“选择”语句,不是“循环”语句。很多新手看到break就以为是循环语句,因为break一般给我们的印象都是跳出“循环”,但break还有一个用法,就是跳出switch。
4) 若所有的 case 中的常量表达式的值都没有与 switch 后面括号内“表达式”的值相等的,就执行 default 后面的语句,default 是“默认”的意思。如果 default 是最后一条语句的话,那么其后就可以不加 break,因为既然已经是最后一句了,则执行完后自然就退出 switch 了。
5) 每个 case 后面“常量表达式”的值必须互不相同,否则就会出现互相矛盾的现象,而且这样写造成语法错误。
6) “case常量表达式”只是起语句标号的作用,并不是在该处进行判断。在执行 switch 语句时,根据 switch 后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。
7) 各个 case 和 default 的出现次序不影响执行结果。但从阅读的角度最好是按字母或数字的顺序写。
8) 当然你也可以不要 default 语句,就跟 if…else 最后不要 else 语句一样。但最好是加上,后面可以什么都不写。这样可以避免别人误以为你忘了进行 default 处理,而且可以提醒别人 switch 到此结束了。
但是需要注意的是,default 后面可以什么都不写,但是后面的冒号和分号千万不能省略,省略了就是语法错误。很多新手在这个地方很容易出错,要么忘了分号,要么忘了冒号,所以要注意!
作者:
远征之路
时间:
2019-3-1 14:48
你所用的switch()语句中并无具体参数变量,无法进行case判断
作者:
#include51.h
时间:
2019-3-1 21:58
这是调好的,拿去吧
#include "reg52.h"
typedef unsigned char u8 ; //定义变量参//
typedef unsigned int u16 ;
sbit RED_A=P0^2; //A方向红灯
sbit YELLOW_A=P0^3;//A方向黄灯
sbit GREEN_A=P0^4;//A方向绿灯
sbit REDC_A=P0^0; //A方向人行道红灯
sbit GREENC_A=P0^1; //A方向人行道绿灯
sbit RED_B=P0^5;
sbit YELLOW_B=P0^6;
sbit GREEN_B=P0^7;
sbit REDC_B=P2^0;
sbit GREENC_B=P2^1;
u8 i=1;
void delay5s(void) //误差 0us
{
u8 a,b,c;
for(c=165;c>0;c--)
for(b=100;b>0;b--)
for(a=150;a>0;a--);
}
void delay30s(void) //误差 0us
{
u8 a,b,c;
for(c=254;c>0;c--)
for(b=232;b>0;b--)
for(a=253;a>0;a--);
}
void jiaotongdeng()
{
switch(i)
{
case 1: RED_A=1;GREEN_B=1;GREENC_B=1;REDC_A=0;
//A方向红灯 B向绿灯 B向人行道绿灯 A向行道红灯 亮灯
RED_B=0;YELLOW_B=0;REDC_B=0;GREEN_A=0;GREENC_A=0; YELLOW_A=0 ;
//B向红灯 B黄灯 B向行道红灯 A向绿灯 A向黄灯 A向行道绿灯 熄灯
delay30s();
RED_A=~RED_A;GREEN_B=~GREEN_B;GREENC_B=~GREENC_B;REDC_A=~REDC_A;
//A方向红灯 B向绿灯 B向人行道绿灯 A向行道绿灯 闪亮灯
YELLOW_A=0;GREEN_A=0;GREENC_A= 0;RED_B=0;YELLOW_B=0;REDC_B=0;
//A方向黄灯 绿灯 行道绿灯 B方向红灯 黄灯 行道红灯 熄灯
delay5s();
break;
case 2: RED_B=1;GREEN_A=1;GREENC_A=1;REDC_B=0; //B向红灯亮灯
RED_A=0;YELLOW_B=0;REDC_A=0;GREEN_B=0;GREENC_B=0; YELLOW_B=0 ; //熄灯
delay30s();
RED_B=~RED_B;GREEN_A=~GREEN_A;GREENC_A=~GREENC_A;REDC_B=~REDC_B;
//A方向红灯 B向绿灯 B向人行道绿灯 A向行道绿灯 闪亮灯
YELLOW_B=0;GREEN_B=0;GREENC_B= 0;RED_A=0;YELLOW_A=0;REDC_A=0;
//A方向黄灯 绿灯 行道绿灯 B方向红灯 黄灯 行道红灯 熄灯
delay5s();
break;
if(i==2) i=0;
}
}
void main()
{
while(1)
{
jiaotongdeng();
if(i==2)i=1;
else i++;
}
}
作者:
#include51.h
时间:
2019-3-1 22:09
这里还改一下if(i==2)i=1;改为if(i==3)i=1;
作者:
shuisheng60
时间:
2019-3-2 11:24
这个不是很难咯,怎么就迷糊了呢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1