我的工控
不积跬步,无以至千里,不积小流,无以成江海。
级别: 略有小成
精华主题: 0
发帖数量: 115 个
工控威望: 287 点
下载积分: 424 分
在线时间: 53(小时)
注册时间: 2010-12-20
最后登录: 2024-09-14
查看我的工控的 主题 / 回贴
楼主  发表于: 2010-12-21 22:14
#include <reg52.h>
void delay(int t){ //时间延迟子函数
unsigned int i,j;
for(j=0;j<30;j++)
for(i=0;i<t;i++);
}
void putOne(int n,char a){ //定义变量函数
unsigned int m = n%8, k = n/8, b;
if(k==0) b=P0; if(k==1) b=P1; if(k==2) b=P2; if(k==3) b=P3;
if(a) b = b & (~(1<<m));
else b = b | (1<<m) ;
if(k==0) P0=b; if(k==1) P1=b; if(k==2) P2=b; if(k==3) P3=b;
}
void liu(int n1,int n2){ //流水灯子程序
int i;
for(i=n1; i<=n2; i++ ) {
putOne(i,1);
delay(2000);
putOne(i,0);
}
}
main() //流水灯主程序
{
unsigned int k;
while(1)
{
P0 = P1 = P2 =P3 = 0;
for(k=31;k>-1;k--)
{
liu(0, k); putOne(k,1);

}

P0 = P1 = P2 =P3 =0; delay(2000);
P0 = P1 = P2 =P3 =255; delay(2000);
P0 = P1 = P2 =P3 =0; delay(2000);
}
}


希望此帖能抛砖引玉.
[ 此帖被我的工控在2020-03-01 01:29重新编辑 ]
这无尽的雨丝,有没有勾起你的回忆?对你来说,也许我不再重要。但只要你能记得我,我就已经无比欣慰。知道这雨让我想起了什么吗?你的眼泪。一滴滴的,晶莹如珠,包裹着过去岁月的沙粒,在我的心头滚动。
crgtom
人生三宝:家庭,事业,健康。
级别: 网络英雄

精华主题: 0
发帖数量: 1385 个
工控威望: 9664 点
下载积分: 96498 分
在线时间: 931(小时)
注册时间: 2009-09-21
最后登录: 2024-11-25
查看crgtom的 主题 / 回贴
1楼  发表于: 2010-12-23 17:02
学习了
技术是有时效性的,一旦错过了时效性,昔日人人求之不得的技术,最终会变成没有多少作用的垃圾!
zsb2010
级别: 工控侠客
精华主题: 0
发帖数量: 117 个
工控威望: 2362 点
下载积分: 4026 分
在线时间: 340(小时)
注册时间: 2009-09-02
最后登录: 2024-01-21
查看zsb2010的 主题 / 回贴
2楼  发表于: 2010-12-24 15:50
结构上分的不够清晰,主函数中的LIU,和PUT ONE的子函数调用写的太罗嗦,可以用FOR循环来做这样就简洁多了
zsb2010
级别: 工控侠客
精华主题: 0
发帖数量: 117 个
工控威望: 2362 点
下载积分: 4026 分
在线时间: 340(小时)
注册时间: 2009-09-02
最后登录: 2024-01-21
查看zsb2010的 主题 / 回贴
3楼  发表于: 2010-12-24 15:59
如主函数改成:
main() //流水灯主程序
{
unsigned int k;
while(1)
{
P0 = P1 = P2 =P3 = 0;
for(k=31;k>-1;k--)
{
liu(0, k); putOne(k,1);

}

P0 = P1 = P2 =P3 =0; delay(2000);
P0 = P1 = P2 =P3 =255; delay(2000);
P0 = P1 = P2 =P3 =0; delay(2000);
}
}
这样就可以代替你的主程序了