电梯运行程序
部分源代码
键盘扫描
/************************键盘扫描**************************/
unsigned int keyscan(void)
{
if(P1!=0xff)
{
switch(P1)
{
case 0x7f:{return(8);break;}//switch语句返回键值
case 0xbf:{return(7);break;}
case 0xdf:{return(6);break;}
case 0xef:{return(5);break;}
case 0xf7:{return(4);break;}
case 0xfb:{return(3);break;}
case 0xfd:{return(2);break;}
case 0xfe:{return(1);break;}
default:return(0);
}
}
}
电梯下行
/************************电梯下行**************************/
void downmove(uint m,uint n)
{
uint k,j,i;
for(k=m*8;k>n*8;k--)
{
for(j=0;j<30;j++)
{
for(i=7;i>=0&&i<8;i--)
{
if(P1!=0xff)
{
outset=keyscan();
if((outset>n)&&(outset<m))
{
flag1=outset;
outset=n;
n=flag1;
terminal=n;
}
while(P1!=0xff);
} //在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
P0=scan[i];
P2=~zm[(i+k)%72];
delay(1);
}
}
}
}
主程序
/************************主程序**************************/
void main()
{
p37=0;
P2=0xff;
P0=0x00;
while(1)
{
show(flag); /*显示电梯初始位置,等待键盘动作*/
terminal=keyscan(); /*获取键值*/
if(terminal>flag)
{upmove(flag,terminal); soundandled(terminal);} /*如键值大于初始位置,电梯上行*/
if(terminal<flag)
{downmove(flag,terminal); soundandled(terminal);} /*如键值大于初始位置,电梯下行*/
flag=terminal;
if(outset!=0)
{
if(outset>terminal)
{upmove(terminal,outset); soundandled(outset);}
if(terminal>outset)
{downmove(terminal,outset); soundandled(outset);}
flag=outset;
outset=0;
}
}
}
资料下载地址:https://gitee.com/huananXIA/proteus