找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

流水灯变速流动问题

[复制链接]
admin 发表于 2012-9-2 14:50:12 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
自动改变速度的流水灯 灯流动方向为从上到下 从下到上。
速度逐渐增加,到底最快,然后逐渐变慢,到达最慢,循环。

功能是实现了,但是程序中红色那部分不是特别满意。
大家帮看看,是否有更好的办法或者是别的思路可以完成这个相同的题目。

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
bit biaozhi=0; //灯流动顺序标记
bit ldelay=0; //长定时溢出标记,预置是0
uchar speed=10; //设置一个变量保存跑马灯的移动速度
uint i,j;
void main(void) // 主程序
{
RCAP2H =0x10; //赋T2的预置值0x1000,溢出30次就是1秒钟
RCAP2L =0x00;
TR2=1; //启动定时器
ET2=1; //打开定时器2中断
EA=1; //打开总中断
P1=0xfe;
while(1) //主程序循环
{
if(ldelay) //发现有时间溢出标记,进入处理
{
ldelay=0; //清除标记
if(biaozhi==0)
{
P1<<=1;
P1=P1|0x01;
}
else
{
P1>>=1;
P1=P1|0x80;
}
if(P1==0x7f)
{ biaozhi=1; }
if(P1==0xfe)
{
biaozhi=0;
if(i!=10) //控制速度改变 先speed--
{
speed--;
i++;
}
if(i==10)
{
speed++; //控制速度改变
j++;
if(j==0)
{
i=0; //i,j纯粹为控制speed而添加
j=0;

}
}

}
}
}
}
//定时器2中断
timer2() interrupt 5
{
static uchar t;
TF2=0;
t++;
if(t==speed) //比较一个变化的数值,以实现变化的时间溢出
{
t=0;
ldelay=1;//每次长时间的溢出,就置一个标记,以便主程序处理
}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-25 04:21 , Processed in 0.054949 second(s), 13 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表