最近因单片机课设临近,看到电梯控制系统的设计要求,突然灵光乍现,便有了这个板子和控制系统优化代码。
希望大家看后可以得到相应的学习体会,并能带给你们帮助,感谢
目录
一、设计思路
1、KeilC51代码编写
矩阵键盘,上升、下降和目标楼层数组控制。
//显示楼层
void disp()
{
uchar i=0;
i=key_scan();//按键检测
switch(i)
{
case 1:flag1[0]=1;break;
case 2:flag1[1]=1;break;
case 3:flag2[1]=1;break;
case 4:flag1[2]=1;break;
case 5:flag2[2]=1;break;
case 6:flag1[3]=1;break;
case 7:flag2[3]=1;break;
case 8:flag1[4]=1;break;
case 9:flag2[4]=1;break;
case 10:flag2[5]=1;break;
case 11:flag3[0]=1;break;
case 12:flag3[1]=1;break;
case 13:flag3[2]=1;break;
case 14:flag3[3]=1;break;
case 15:flag3[4]=1;break;
case 16:flag3[5]=1;
}
P0=smgduan[floor];//当前楼层
smg1=1;
delay(100);
smg1=0;
//目标楼层
if(direction>0)
{
P0=smgduan[next];
smg3=1;
delay(100);
smg3=0;
}
switch(direction)
{
case 0:P0=0x8c;break;//上升下降
case 1:P0=0xc1;break;
case 2:P0=0xa1;
}
smg5=1;
delay(100);
smg5=0;
switch(direction)
{
case 0:P0=0x8c;break;//上升下降
case 1:P0=0x8c;break;
case 2:P0=0xab;
}
smg6=1;
delay(100);
smg6=0;
}
uchar key=0;
uchar key_scan()//按键检测
{
uchar i;
i=0;
P1=0x7f;//使能01111111
switch(P1)//检测第1行
{
case 0x7e:i=4;break;
case 0x7d:i=3;break;
case 0x7b:i=2;break;
case 0x77:i=1;
}
P1=0xBf;//使能10111111
switch(P1)//检测第2行
{
case 0xBe:i=8;break;
case 0xBd:i=7;break;
case 0xBb:i=6;break;
case 0xB7:i=5;
}
P1=0xDf;//使能11011111
switch(P1)//检测第3行
{
case 0xDe:i=12;break;
case 0xDd:i=11;break;
case 0xDb:i=10;break;
case 0xD7:i=9;
}
P1=0xEf;//使能11101111
switch(P1)//检测第4行
{
case 0xEe:i=16;break;
case 0xEd:i=15;break;
case 0xEb:i=14;break;
case 0xE7:i=13;
}
if(key==i)//判断是否按键状态相同
return 0;
else
{
key=i;
return(key);
}
}
矩阵键盘的知识可以看这位博主的介绍(十分清晰):51单片机---矩阵键盘(含源码、小白可入)_普中51实验板原理图-CSDN博客
2、单片机最小系统设计
(1)、复位电路
(2)、晶振电路
3、降压模块设计(因51单片机供电是5V)
这里我本来想着把12V降压5V的模块和总体设计一起,但后续考虑到初版想用的是直插式的51单片机(STC89C52RC-40I-PDIP40),体积较大,于是我拆分成两个,一个降压模块,一个系统板,用Type-C口连接供电。
使用MP2315GJ-Z芯片做的降压电路:
(1)、原理图和PCB图
4、6位数码管显示加数码管驱动系统板
5、proteus仿真搭建:
二、实物测试
1、降压模块:
2、系统板:
因为这几天在优化设计,加上有比赛,所以就没有时间对这个模块录视频等,但实测可用
后续会更新
三、资料分享:
PCB、Proteus仿真等文件请一键三连私信我,即可获得哦!!