收藏 分销(赏)

机车刮雨刷控制程序讲解学习.doc

上传人:精**** 文档编号:3921258 上传时间:2024-07-23 格式:DOC 页数:9 大小:29.50KB 下载积分:6 金币
下载 相关
机车刮雨刷控制程序讲解学习.doc_第1页
第1页 / 共9页
机车刮雨刷控制程序讲解学习.doc_第2页
第2页 / 共9页


点击查看更多>>
资源描述
机车刮雨刷控制程序 精品文档 /******************************************** CPU==AT89C2051 F==11.0592MHZ WXQ20160714 用于刮雨刷电机控制 ********************************************/ //#include <public.h> #include <REG2051.h> #include <absacc.h> #include <intrins.h> //数据类型定义 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //试验模式 #define TingZhi 0 #define JianXie 1 #define DiSu 2 #define GaoSu 3 #define NOP2 _nop_(); _nop_(); #define NOP4 _nop_(); _nop_(); _nop_(); _nop_(); //输入引脚定义 sbit dog = P3^0; //喂狗信号 sbit J_X = P3^1; //间歇位 sbit Z_X = P3^2; //正向脉冲检测 sbit F_X = P3^3; //负向脉冲检测 sbit T_Z = P3^4; //停止位 sbit D_S = P3^5; //低速位 sbit G_S = P3^7; //高速位 //输出引脚定义 sbit HX_KZ = P1^0; //换向控制 sbit TJ_DD = P1^1; //停机断电 sbit GS_KZ = P1^2; //高速控制 sbit DS_KZ = P1^3; //低速控制 sbit ResetPLC = P1^4; //复位PLC编码器 sbit L_R = P1^5; //电机复位时在左OR右 默认1=左 sbit KG2_KZ = P1^6; //开关2 IRF840 sbit V110_KZ = P1^7; //110V开关1 IRF840 uchar data t1s; //1秒钟计时寄存器 uint data Work_Mode; //工作模式寄存器 uchar data Y_zt,X_zt; //原状态,新状态 uchar bdata flg; sbit zxmc = flg^0; //正向脉冲标志位 sbit fxmc = flg^1; //负向脉冲标志位 sbit reset = flg^6; //复位编码器标志位 sbit t1sflg = flg^7; //1s定时标志 //*************以下为子程序***************** //延时10ms //****************************************** void delay10ms(void) { uchar i,j; for(i=0;i<24;i++) { dog = ~dog; for(j=0;j<250;j++) { ; } } } /******************************** CPU初始化程序 *********************************/ void Init_Mcu(void) { PCON=0; //DPS=0x00; TCON=0x00; TMOD=0x11; TH1=0x4C; TL1=0x00; TH0=0x4C; TL0=0x00; TR0 = 1; //t1定时方式1 16位定时用 50ms ET0 = 1; //PT0 = 1; //T0中断级别为高 //TR1 = 1; //ET1 = 1; //定时器1中断使能 //外部INT0 IT0 = 1; //Int0为下降沿触发 //PX0 = 1; //Int0中断级别为高 EX0 = 1; //Int0中断允许 测量步进电机频率信号 //外部INT1 IT1 = 1; //Int1为下降沿触发 20120920修正初始化值, //PX1 = 1; //Int1中断级别为高 EX1 = 1; //Int1中断中断禁止,实际用到时再打开 P1 = 0xFF; //开机所有输出关闭 flg = 0; //标志位清零 EA = 1; } //T0 50ms中断 void timer0() interrupt 1 { TH0=0x4C; //50ms中断一次 TL0=0x11; t1s++; if(t1s>=20) { t1sflg = 1; t1s = 0 ; } } //延时N秒函数 void delNs(uchar s) { do { t1sflg = 0; while(t1sflg==0); s--; }while(s); } /************************************************************* void timer1() interrupt 3 //50ms定时中断 { TH1=0x4C; TL1=0x00; } ***************************************************************/ //外中断0,用来检测正向脉冲 void int0() interrupt 0 { zxmc = 1; //正向到位 //fxmc = 0; //清楚负向脉冲 //if(Work_Mode>0) //{ //V110_KZ = 1; //关闭MOS //} } //外中断1,用来检测反向脉冲 void int1() interrupt 2 { fxmc = 1; //负向到位 //zxmc = 0; //清楚正向脉冲 //if(Work_Mode>0) //{ //V110_KZ = 1; //关闭MOS //} } //高低速控制 void GDS_KZ(uchar gds) { uchar jc=0; zxmc = 0; fxmc = 0; //高低速判断 V110_KZ = 1;//MOS关闭 if(gds) { GS_KZ = 0; DS_KZ = 1; } else { GS_KZ = 1; DS_KZ = 0; } HX_KZ = 0; //切换为正向 TJ_DD = 0; //停机开关闭合 V110_KZ = 0; //接通110V电源 while(zxmc==0); //等待正向到位信号 zxmc = 0; HX_KZ = 1; //切换为负向 V110_KZ = 0; //反向动作 while(fxmc==0); //等待反向到位信号 fxmc = 0; } //间歇控制程序 void JianX_KZ(void) { uchar jc=0; zxmc = 0; //标志位清零 fxmc = 0; //高低速判断 V110_KZ = 1;//MOS关闭 GS_KZ = 1; DS_KZ = 0; HX_KZ = 1; //切换为正向 TJ_DD = 0; //停机开关闭合 delNs(3); zxmc = 0; //标志位清零 do { V110_KZ = 0; //接通110V电源 } while(zxmc==0); //等待正向到位信号 V110_KZ = 1; //接通110V电源 zxmc = 0; HX_KZ = 0; //切换为负向 delNs(3); zxmc = 0; //标志位清零 do { V110_KZ = 0; } while(fxmc==0); //等待正向到位信号 V110_KZ = 1; fxmc = 0; } /********************************************************** 主程序代码 **********************************************************/ void main(void) { uchar key =0; Init_Mcu(); Y_zt = 0; X_zt = 0; Work_Mode = 0; ResetPLC = 0; // 复位PLC编码器 delay10ms(); // delay10ms(); // ResetPLC = 1; // zxmc = 0; //标志位清零 fxmc = 0; delNs(2); //延时1秒 EX0 = 0; EX1 = 0; while(1) { if(J_X) { GS_KZ = 1; DS_KZ = 0; HX_KZ = 0; //切换为正向 TJ_DD = 0; //停机开关闭合 delNs(1); //延时1秒 V110_KZ = 0; //接通110V电源 } else { V110_KZ = 1; //接通110V电源 } //=======KEY检测========== //key = P3&0xB2; //if(key!=0) //{ //delay10ms(); //延时10MS去抖动,判断开关位置 //key = P3&0xB2; //if(key!=0) //工作模式判断 //{ if(J_X) { Work_Mode = 1; if(reset==0) { ResetPLC = 0; // 复位PLC编码器 delay10ms(); // delay10ms(); // ResetPLC = 1; reset = 1; } } if(D_S) { Work_Mode = 2; if(reset==0) { ResetPLC = 0; // 复位PLC编码器 delay10ms(); // delay10ms(); // ResetPLC = 1; reset = 1; } } if(G_S) { Work_Mode = 3; if(reset==0) { ResetPLC = 0; // 复位PLC编码器 delay10ms(); // delay10ms(); // ResetPLC = 1; reset = 1; } } if(T_Z) { Work_Mode = 0; reset = 0; ResetPLC = 0; // 复位PLC编码器 } // } // } dog = ~dog; //=======工作模式实现部分========== switch(Work_Mode) { case JianXie: //间歇模式1 //JianX_KZ(); Work_Mode = 0; break; case DiSu: //低速模式2 //GDS_KZ(0); Work_Mode = 0; break; case GaoSu: //高速模式3 //GDS_KZ(1); Work_Mode = 0; break; case TingZhi: //停止模式0 P1 = 0xEF; Work_Mode = 0; break; default: P1 = 0xEF; Work_Mode = 0; break; } } } 收集于网络,如有侵权请联系管理员删除
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服