完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include #define uchar unsigned char #define uint unsigned int ***it cq2 = P1^0; //控制前后运动的电磁阀 ***it cq1 = P1^1; //控制左右运动的下面电磁阀 ***it cq3 = P1^2; //控制上下运动的电磁阀 ***it cq4 = P1^3; //控制左右运动的上面电磁阀 ***it s1 = P1^4; //第一步按钮开关 ***it s2 = P1^5; //第二步按钮开关 ***it s3 = P1^6; //第三步按钮开关 ***it err = P1^7; //错误判断位 ***it err2 = P3^0; ***it k1 = P3^3; //左右方向下面的磁感应开关 ***it k2 = P3^2; //左右方向上面的磁感应开关 ***it k3 = P3^1; //前后方向磁感应开关 #define OneStep 1 //第一步 #define TwoStep 2 //第二步 #define ThreeStep 3 //第三步 bit EnableTwoStepFlag = 0; //第二步工作允许标志 bit flag = 0; //定时时间标志 uint count = 0; // uchar volatile Status = OneStep; void Timer0Init() { TMOD = 0x21; TH0 = 0xd8; TL0 = 0xf0; TR0 = 1; ET0 = 1; } void Timer0()interrupt 1 using 1 { TH0 = 0xd8; TL0 = 0xf0; TR0 = 1; count++; if(count==200) { count = 0; flag = 1; } } void WaitTime(uchar dat) { uchar i = 0; for( i = 0;i while(flag == 0); flag = 0; } } void OneStepWork() { s1 = 1; while(s1 == 1); //等待S1 =0,按钮1按下 s1 = 1; cq1 = 0; //打开左右向下面电磁阀,推动气缸工作 k1 = 1; while(k1 == 1); //等待左右向下面磁感应开关到位 k1 = 1; cq2 = 0; //打开控制前后向电磁阀,推动前后气缸工作 k3 = 1; while(k3 == 1) { _nop_(); //等待前后向磁感应开关到位。 } k3 = 1; cq3 = 0; //打开上下向电磁阀,推动气缸向下运动 WaitTime(3); //等待1分钟 err = 1; err2 = 1; if( err == 1 && err2 == 1) //判断错误表示. err=1正确,err=0错误 { EnableTwoStepFlag = 1; cq3 = 1; WaitTime(2); cq2 = 1; } else { cq3 = 1; WaitTime(2); cq2 = 1; WaitTime(2); cq1 = 1; } } void TwoStepWork() { s2 = 1; while(s2 == 1); s2 = 1; cq4 = 0; k2 = 1; while(k2 == 1); k2 = 1; } void ThreeStepWork() { s3 = 1; while(s3 == 1); s3 = 1; cq4 = 0; WaitTime(1); cq1 = 0; } void main() { Timer0Init(); EA = 1; while(1) { switch(Status) { case OneStep: OneStepWork(); if(EnableTwoStepFlag) { EnableTwoStepFlag = 0; Status = TwoStep; } else { Status = OneStep; } break; case TwoStep: TwoStepWork(); Status = ThreeStep; break; case ThreeStep: ThreeStepWork(); Status = OneStep; break; default: break; } } } 为什么按s2不起作用啊 |
|
相关推荐
6个回答
|
|
S2不起作用,是不起什么作用,应该怎么样的,把问题说清楚
|
|
|
|
s1按下第一步工作正常,s2键按下程序没反应,不能按照设想的那样进行第二步工作
|
|
|
|
程序运行后,只有S1键能工作,每次都执行到cq3=1,cq2 = 1,即err和err2同时为1这个状态,就不能再往下进行了。就是S2键按下永远不会执行TwoStepWork();
|
|
|
|
在case里面进不了第二个条件,err信号错误
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
828 浏览 0 评论
824 浏览 0 评论
861 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
836 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1292 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11821 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 08:20 , Processed in 0.706180 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号