单片机C程序的问题

[复制链接]
查看11 | 回复3 | 2009-7-23 17:42:09 | 显示全部楼层 |阅读模式
#include
#include
#define uchar unsigned char
sbit s1=P1^4;
sbit s2=P1^5;
sbit s3=P1^6;
sbit s4=P1^7;
uchary,flag1,flag2,flag3,flag4;
void delay(uchar z);
void main()
{
P0=0;
P1=0xff;
flag1=flag2=flag3=flag4=1;
while(1)
{
if(s4==1) delay(25);
else if(s3==1)delay(20);
else if(s2==1)delay(15);
else if(s1==1)delay(10);
else
continue;
//开关控制延时
switch(P1&0x0f)
{
case15: flag3=flag2=flag1=1;

if(flag4){y=4;flag4=0;}


else y=_crol_(y,1);

break;
case7: flag4=flag2=flag1=1;

if(flag3){y=3;flag3=0;}

elsey=_crol_(y,1);

break;
case3: flag4=flag3=flag1=1;

if(flag2) { y=2;flag2=0;}

elsey=_crol_(y,1);

break;
case1: flag4=flag3=flag2=1;

if(flag1) { y=1;flag1=0;}

else y=_crol_(y,1);

break;
case0: flag4=flag3=flag2=flag1=1;

y=0;
//开关控制灯亮的个数
}
P0=y;
}
}
void delay(uchar z)//延时程序,z=1时,延时0.1s
{
uchar j,k;
for(;z>0;z--)
for(j=120;j>0;j--)
for(k=0;k<137;k++);
}
p1.0----1.3确定灯亮的个数,p1.4----1.7确定灯亮的速度,p0口接的是8个二极管,上拉电阻300也接了,限流30也接了,在proteus仿真,每个灯闪了一下,就都不亮了,控制开关完全不起作用。我用汇编编的的运行良好,可就是c改来该去都看不到效果,小弟初次接触单片机,跪求高人指点迷津啊!答的好的有加分!
在大家的热心帮助下,我终于将错误找出来了,非常感谢大家!
在此将正确程序给出激励后来者。
http://user.qzone.qq.com/272279012/infocenter?ptlang=2052

回复

使用道具 举报

千问 | 2009-7-23 17:42:09 | 显示全部楼层
不太了解_crol_(y,1)这个函数,switch(P1&0x0f)函数里面要得到case15 7 3 必须分别同时按下4 3 2 个按键,建议改成case8 4 2,只按一个按键就可以了。其它的我也没看出什么毛病来,等待高手。 //////////////////////////////////////////////////////////////////////另外continue语句供你参考:continue;其语义是:结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环条件的判断与执行。应注意的是, 本语句只结束本层本次的循环,并不跳出循环。既,如果P1.4~1.5键都不按,后面的语句就不执行...
回复

使用道具 举报

千问 | 2009-7-23 17:42:09 | 显示全部楼层
switch(P1&0x0f){case15: flag3=flag2=flag1=1;
if(flag4){y=4;flag4=0;}
y=_crol_(y,1);
break;case7: flag4...
回复

使用道具 举报

千问 | 2009-7-23 17:42:09 | 显示全部楼层
改了,改不了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行