完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #define INT8U unsigned char #define INT16U unsigned int ***it SH_CP = P2^4; //移位时钟脉冲 ***it DS = P2^5; //串行数据输入 ***it ST_CP = P2^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显示段码第几个 INT8U flag=0; ***it gaowenled=P3^0; ***it zhangailed=P3^1; ***it ledshang=P0^3; ***it ledxia=P0^4; ***it led22=P0^5; ***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; unsigned char kk; void delay(); void Serial_Input_595(); void Parallel_Output_595(); void shanglou(); void xialou(); void int_chushi(); void key_scanf(); void main() { int_chushi(); while(1) { // zhangai=0; key_scanf(); 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 key_scanf() { 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(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() { TMOD=0X11; EA=1; TH1=(65535-50000)/256; TL1=(65535-50000)%256; ET0=1; TR1=1; ET1=1; EX0=1; EX1=1; TR1=1; TR0=1; P2=0X00; } void zhangai2() interrupt 0 // 高温报警函数 { zhangailed=0; zhangai=1; } void gaowen1() interrupt 2 //障碍报警函数 { gaowenled=0; zhangailed=1; 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); } void timer1() interrupt 3 { TH1=(65535-50000)/256; TL1=(65535-50000)%256; kk++; if(kk==5) { kk=0; key_scanf(); } } 这是我编的程序的,但是出现问题了,就是体现不出优先级别来的,比如在上楼的过程中有人去4楼的,但是中途有人在二楼按了二楼按键了,应该是先到四楼后再下来二楼执行才对的。但是现在的问题是只要我一按另外的一个按键的话,就会马上执行了。 搜索 复制
|
|
相关推荐
2个回答
|
|
|
|
|
|
过来学习的哦
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
464 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
496 浏览 0 评论
634 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1322 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
555 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11752 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 11:52 , Processed in 0.426402 second(s), Total 45, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号