完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #define INT8U unsigned char #define INT16U unsigned int ***it SH_CP = P3^4; //移位时钟脉冲 ***it DS = P3^5; //串行数据输入 ***it ST_CP = P3^6; //输出锁存器控制脉冲 code INT8U SEG_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99};//01234 INT16U myData[4] = {1,2,3,4}; //显示1234 INT16U louceng=0,zhangai=0; //louceng按键请求的楼层 INT16U n,lift=0; //n 为所在楼层 lift存储当前楼层 n lift初始为0 INT8U i,t; //i显示第几位 t显示段码第几个 ***it gaowenled=P3^0; ***it zhangailed=P3^1; ***it ledshang=P0^3; ***it ledxia=P0^4; ***it k=P1^0; ***it k1=P1^1; //仿真调试用 ***it k2=P1^2; ***it L0=P0^0; //开关门LED ***it L1=P0^1; ***it L2=P0^2; void delay(); void Serial_Input_595(); void Parallel_Output_595(); void shanglou(); void xialou(); void int_chushi(); void saomiao(); void main() { int_chushi(); while(1) { //zhangai=0; saomiao(); // kai(); // guan(); if((L0==1)&&(L1==1)&&(L2==1)) //关门后才能上下 { if(louceng>lift) { shanglou(); } else if(louceng xialou(); } else { gaowenled=1; //不执行上下时,灯灭 zhangailed=1; } } } } void delay(INT16U ms) { INT8U s; while(ms--) for(s=0;s<121;s++); } // 1字节数据串行输入595子程序 void Serial_Input_595(INT8U d) { INT8U z; for(z=0;z<8;z++) { d=d<<1; DS=CY; SH_CP=1;_nop_(); SH_CP=0;_nop_(); } } void Parallel_Output_595() { ST_CP=0;_nop_(); ST_CP=1;_nop_(); ST_CP=0;_nop_(); } void saomiao() { INT8U key; P1=0X7F; key=P1&0X0F; switch(key) { case 14 :louceng=0;t=t;i=i;n=n;break; //1 case 13 :louceng=5;t=t;i=i;n=n;break; //2 case 11 :louceng=10;t=t;i=i;n=n; break; //3 case 7 :louceng=15;t=t;i=i;n=n; break; //4 default :; } P1=0XbF; key=P1&0X0F; switch(key) { case 14 : if((L0==0)&&(L1==0)&&(L2==0)) { L0=1;L1=0;L2=0;delay(200); L0=1;L1=1;L2=0;delay(200); L0=1;L1=1;L2=1;delay(200); } else { L0=1;L1=1;L2=0;delay(200); L0=1;L1=0;L2=0;delay(200); L0=0;L1=0;L2=0;delay(200); delay(2000); L0=1;L1=0;L2=0;delay(200); L0=1;L1=1;L2=0;delay(200); L0=1;L1=1;L2=1;delay(200); } break; //5 开门 case 13 : {L0=1;L1=1;L2=0;}delay(200); {L0=1;L1=0;L2=0;}delay(200); {L0=0;L1=0;L2=0;}delay(200); if(zhangai==0) { delay(2000); {L0=1;L1=0;L2=0;}delay(200); {L0=1;L1=1;L2=0;}delay(200); {L0=1;L1=1;L2=1;}delay(200); }break; //6 case 11 :louceng=0; break; case 7 :louceng=5;break; default : ; } P1=0XdF; key=P1&0X0F; switch(key) { case 14 :louceng=5;break; case 13 :louceng=10; break; case 11 :louceng=10;break; case 7 :louceng=15;break; default : ; } } void shanglou() //上楼函数 { for(n=lift;n<=louceng;n++) //lift 楼层初始值 { P2=n; delay(200); lift=n; ledshang=0; ledxia=1; {L0=1;L1=1;L2=1;} } ledshang=1; ledxia=1; {L0=1;L1=1;L2=0;}delay(200); {L0=1;L1=0;L2=0;}delay(200); {L0=0;L1=0;L2=0;}delay(200); // if(louceng>lift) if(zhangai==0) //没有障碍时 { delay(2000); {L0=1;L1=0;L2=0;}delay(200); {L0=1;L1=1;L2=0;}delay(200); {L0=1;L1=1;L2=1;}delay(200); } } void xialou() //下楼函数 { for(n=lift;n>=louceng;n--) { P2=n; delay(200); lift=n; ledshang=1; ledxia=0; if(n==0) {L0=1;L1=1;L2=1;n=n+1;break;} //n=0 一直执行向下。 } ledshang=1; ledxia=1; {L0=1;L1=1;L2=0;}delay(200); {L0=1;L1=0;L2=0;}delay(200); {L0=0;L1=0;L2=0;}delay(200); if(zhangai==0) { delay(2000); {L0=1;L1=0;L2=0;}delay(200); {L0=1;L1=1;L2=0;}delay(200); {L0=1;L1=1;L2=1;}delay(200); } } void int_chushi() { EA=1; TMOD=0X11; ET0=1; TR1=1; ET1=1; EX0=1; EX1=1; TR1=0; TR0=1; P2=0X00; } void zhangai2() interrupt 0 // 高温报警函数 { zhangailed=0; zhangai=1; } void gaowen1() interrupt 2 //障碍报警函数 { gaowenled=0; if(louceng>=lift) { if((P2<5)&&(louceng>=5))louceng=5; if((P2<10)&&(louceng>=10))louceng=10; if((P2<=15)&&(louceng>=15))louceng=15; for(n=lift;n<=louceng;n++) //lift 楼层初始值 { P2=n; delay(200); lift=n; ledshang=0; ledxia=1; } t=SEG_CODE[myData]; Serial_Input_595(t); Parallel_Output_595(); ledshang=1; ledxia=1; } else { if((P2>15)&&(louceng<=15))louceng=15; if((P2>10)&&(louceng<=10))louceng=10; if((P2>5)&&(louceng<=5))louceng=5; for(n=lift;n>=louceng;n--) { P2=n; delay(200); lift=n; ledshang=1; ledxia=0; if(n==0) { L0=1;L1=1;L2=1;n=n+1; t=SEG_CODE[myData]; Serial_Input_595(t); Parallel_Output_595(); break; } //n=0 一直执行向下。 } t=SEG_CODE[myData]; Serial_Input_595(t); Parallel_Output_595(); ledshang=1; ledxia=1; } while(n=lift)break; } void temp() interrupt 1 //显示函数 { if(P2==1)i=0; if(P2==5)i=1; if(P2==10)i=2; if(P2==15)i=3; t=SEG_CODE[myData]; Serial_Input_595(t); Parallel_Output_595(); delay(10); } 这是我编的程序来的,但是为什么没有起到优先的作用呢,比如你上4楼的过程中突然有人按2楼的按键时,应该到了4楼后会回到二楼才对的,但我我的程序就是不得的,只能是按下哪个按键就到哪层楼而已,所起求各位大神帮改正来,拜托了。。。 搜索 复制 |
|
相关推荐
6个回答
|
|
还没看明白
|
|
|
|
各位大神请尽快回复啊!!!等着用啊!!!
|
|
|
|
什么都有。有点意思。
|
|
|
|
|
|
|
|
|
|
|
|
怎么没有人会吗????
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之变量
253 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之本地脚本的编写和执行
484 浏览 0 评论
【xG24 Matter开发套件试用体验】深入了解Silicon Labs xG24 Matter开发套件
647 浏览 0 评论
559 浏览 0 评论
587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10919 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-31 05:22 , Processed in 0.550404 second(s), Total 50, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191