自己编写的程序!大伙进来看看!找找错!

[复制链接]
4572|23
 楼主| zzj137 发表于 2007-8-8 20:14 | 显示全部楼层 |阅读模式
p1.5       p1.4      p1.3            p1.2     p1.1      p1.0
红灯       黄灯       绿灯           红灯     黄灯      绿灯
k           l         m               n       o         p


51单片机p1口控制~
模拟交通灯程序



#include<REGX51.H>
void delay (void)
{
unsigned char i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++)
;
}
main()
{
bit  k=P1^5,l=p1^4,m=p1^3,n=p1^2,o=p1^1,p=1^0;
int x,y;
while(1)
{
k=0,l=1,m=1,n=1,o=1,p=0;
x=0,y=0;
delay();
loop1:
p=1,o=0;
delay();
x++;
if(x<4) goto loop1;
k=1,l=1,m=0,n=0,o=1,p=1;
delay();
loop2:
m=1,l=0;
delay();
m=1,l=1;
delay();
y++;
if(y<4) goto loop2;
k=0,l=1,m=1,n=1,o=1,p=0;
}
}
 
lsfsxfljj 发表于 2007-8-8 20:17 | 显示全部楼层

错得一踏糊涂

 楼主| zzj137 发表于 2007-8-8 20:19 | 显示全部楼层

我知道!能具体点吗?先谢了!

stycx 发表于 2007-8-8 21:19 | 显示全部楼层

天下程序一大抄

建议先看懂别人的程序再修改成自己的程序
birenai 发表于 2007-8-8 21:35 | 显示全部楼层

把X Y定义成char能节省内存

虽然对你这个程序没什么影响,但大点的程序这可以节省内存,也减少了单片机的计算时间
hzqsaint 发表于 2007-8-8 22:08 | 显示全部楼层

一点建议

没有注释,可读性差了点。
所有goto都可以用for或者while替代。
每种灯变化没有延时参数控制,可移植性差,适应性差。
ayb_ice 发表于 2007-8-9 07:33 | 显示全部楼层

编译都不能通过吧...

ddh1129 发表于 2007-8-9 10:05 | 显示全部楼层

最简单的定义都不会!

bit  k=P1^5,l=p1^4,m=p1^3,n=p1^2,o=p1^1,p=1^0;
这是什么乱七八糟的语句,编译能通过吗?
dallxl 发表于 2007-8-9 10:11 | 显示全部楼层

都不想看了

我以为我是初学者~~~~~~~~~~哈哈,结果~~~~~…………
etual 发表于 2007-8-9 11:07 | 显示全部楼层

汇编思想太明显了....

硬套一个C的外壳而已.
这类死循环的 delay 延时还是不要学为好
以后做项目的时候就知错的了 ......
 楼主| zzj137 发表于 2007-8-9 14:16 | 显示全部楼层

谢谢个位的指点!我确实是个比初学者还初学的!

正在学习中!
不会放弃的!学的东西都是自己的!
古道热肠 发表于 2007-8-9 14:35 | 显示全部楼层

变量命名很不好。

    真想学好编程,就得养成好习惯。
 楼主| zzj137 发表于 2007-8-9 14:46 | 显示全部楼层

根据进一步的学习程序改成这样!大家再看看!


p1.5       p1.4      p1.3            p1.2     p1.1      p1.0
红灯       黄灯       绿灯           红灯     黄灯      绿灯
k           l         m               n       o         p


51单片机p1口控制~



#include<REGX51.H>
void delay (void)                                 /*延时程序*/
{
unsigned char i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++)
;
}
main()
{
sbit  k=P1^5,l=p1^4,m=p1^3,n=p1^2,o=p1^1,p=1^0;    /*声明k,l,m,n,o,p
                                             对p1.5-p1.0进行位操作*/  
int x,y;                                           
while(1)                   /*无穷循环*/             
{
k=0,l=1,m=1,n=1,o=1,p=0;   /*一组红灯亮,二组绿灯亮*/            
delay();
for(x=0;x<4;x++);         /*二组绿灯灭,黄灯闪烁四次*/     
{
p=1,o=0;
delay();
p=1,o=1;
delay();
}
k=1,l=1,m=0,n=0,o=1,p=1;     /*一组绿灯亮,二组红灯亮*/
delay();
for(y=0;y<4;y++);          /*一组绿灯灭,黄灯闪烁四次*/
{
m=1,l=0;
delay();
m=1,l=1;
delay();
}
k=0,l=1,m=1,n=1,o=1,p=0;     /*返回原始状态的一组红灯亮,二组绿灯亮*/
}
}
 
birenai 发表于 2007-8-9 17:11 | 显示全部楼层

改一下

for(x=0;x<4;x++);         /*二组绿灯灭,黄灯闪烁四次*/     
{
p=1,o=0;
delay();
p=1,o=1;
delay();
}
请问你闪烁几S?


for(x=0;x<4;x++);         /*二组绿灯灭,黄灯闪烁四次*/     
{
o=~o;
delay();
}
birenai 发表于 2007-8-9 17:13 | 显示全部楼层

补充

如果0.5S闪烁则把for(x=0;x<4;x++);改成
for(x=0;x<8;x++);                  
 楼主| zzj137 发表于 2007-8-9 17:37 | 显示全部楼层

至于时间问题!得通过反汇编看!我也不知道有多长时间!

这里的时间问题,我也搞不清楚!
我问过大虾,说是得看反汇编!我也头疼这个问题呢!
q223490115 发表于 2007-8-9 20:42 | 显示全部楼层

123321

   嘎嘎   不知道这位兄弟学了C多久啦    
 楼主| zzj137 发表于 2007-8-10 16:18 | 显示全部楼层

回楼上

谢谢!各位大虾! 

我刚学C有一个星期了吧!
大一学过点!不过纯粹的基础,都忘了差不多了!哈哈!
听个位的解释又有点收获!
 
 
birenai 发表于 2007-8-11 18:03 | 显示全部楼层

对不起

对不起了
我是复制的没看清,是多了
tjsheep 发表于 2007-8-12 09:58 | 显示全部楼层

楼主的是程序么?真的是程序么?真的是程序么?真的是程序

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

本版积分规则

15

主题

45

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部