这一次的项目是前阵子发布的Altium designer ERROR系列链接
第一篇的项目,实现了51单片机控制电机,从而控制一台六层电梯。
具体说明:系统启动后自动定位到一楼。当外部按键按动时,电梯前往该楼层;内部按键共七个,其中六个对应六层,第七个为报警按键,按下后电梯停止工作,蜂鸣器鸣响报警,同时上行下行显示灯关闭,再次按下恢复正常。为保证电机运行正常和电梯舒适感,每层楼运行时间间隔为三秒。
原理图如下:
这里采用了L298来驱动电机,使用74LS164驱动数码管显示楼层。在层与层之间默认了电梯运行三秒钟,但是在具体实践中应根据现实楼层高度而定。
同时,由于这次项目更多的是模拟电梯运行,所以,我在PCB设计并没有把各个按键分开,而是画到了一块板子上,如下图:
在ad中,我并没有找到74LS164的芯片原理图,只有芯片封装,所以自己画了个164的芯片。
部分代码如下所示:
void shangsheng()
{
int i;
t=11;
ledup=0;
leddown=1;
for(i=0;i<10;i++)
{
stop();
d11=1,d12=0,d21=0,d22=0;
delay(5);
d11=1,d12=1,d21=0,d22=0;
delay(5);
d11=0,d12=1,d21=0,d22=0;
delay(5);
d11=0,d12=1,d21=1,d22=0;
delay(5);
d11=0,d12=0,d21=1,d22=0;
delay(5);
d11=0,d12=0,d21=1,d22=1;
delay(5);
d11=0,d12=0,d21=0,d22=1;
delay(5);
d11=1,d12=0,d21=0,d22=1;
delay(5);
}
t=0;
leddown=1;
ledup=1;
}
void xiajiang()
{
int i;
t=10;
ledup=1;
leddown=0;
for(i=0;i<10;i++)
{
stop();
d11=0,d12=0,d21=0,d22=1;
delay(5);
d11=0,d12=0,d21=1,d22=1;
delay(5);
d11=0,d12=0,d21=1,d22=0;
delay(5);
d11=0,d12=1,d21=1,d22=0;
delay(5);
d11=0,d12=1,d21=0,d22=0;
delay(5);
d11=1,d12=1,d21=0,d22=0;
delay(5);
d11=1,d12=0,d21=0,d22=0;
delay(5);
d11=1,d12=0,d21=0,d22=1;
delay(5);
}
t=0;
leddown=1;
ledup=1;
}
void go()
{
char temp;
if(keyvalue!=keyvalue01d)
{
keyvalue01d=keyvalue;
temp=nowfloor-keyvalue;
if(t==0)
{
if(temp>0)
{
while(temp>0)
{
shangsheng();
num++;
if(gofloor[num]!=0)
{
if(((gofloor[num]&0x01)+(gofloor[num]&0x04))>0);
}
temp--;
SBUF=play[--nowfloor];
while(!TI);
TI=0;
}
nowfloor=keyvalue;
}
if(temp<0)
{
while(temp<0)
{
xiajiang();
temp++;
SBUF=play[++nowfloor];
while(!TI);
TI=0;
}
nowfloor=keyvalue;
}
}
}
}
富文本编辑器对于edge的适应和shit一模一样,上面三块代码整块粘贴就会卡死,也是醉了。
资源包含:proteus仿真+原理图;keil编写的C语言程序;ad原理图+PCB;产品说明书。
资源链接详见评论区
知识无价,开源万岁!!!