本帖最后由 daming 于 2014-12-29 20:41 編輯
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define jian P1
- sbit bf=P0^7;
- sbit lcd_rs=P2^6;
- sbit lcd_rw=P2^5;
- sbit lcd_e=P2^4;
- sbit lcd_reset=P2^7;
- sbit lihe=P2^0;
- sbit shache=P2^1;
- sbit ge=P3^2;
- sbit sj_p33=P3^3;
- sbit zhengfan=P3^4;
- bit aj_1,zd_1,jin_1,song_1,ti_1,tj_1;
- uint gaodu_0,gaodu_1,shiji_0,cishu;
- uchar shiling,ms,sj_s,sj_j;
- uchar code hz_bj1[]={"計數傳感器無信號"};
- uchar code hz_bj2[]={"方向傳感信號無 "};
- uchar code hz_bj3[]={"檢測到反轉超限 "};
- uchar code hz_bj4[]={"檢測到正轉超限 "};
- uchar code hz_bj5[]={"過緊或傳感器失靈"};
- uchar code hz_kong[]={" "};
- uchar code zzzk[]={"歡迎使用職專智控"};
- uchar code csh[]={"正在初始化。。。"};
- uchar code qqh[]={"qq:000000"};
- uchar code hz_t[]={"態:"};
- uchar code hz_gs[]={"過松"};
- uchar code hz_gj[]={"過緊"};
- uchar code hz_tz[]={"停"};
- uchar code hz_z[]={"智"};
- uchar code hz_jing[]={"警"};
- uchar code hz_tg[]={"提高"};
- uchar code hz_lh[]={"離合"};
- uchar code tb_1[]={"●"};
- uchar code tb_2[]={"○ "};
- uchar code hz_sheng[]={"升"};
- uchar code hz_jiang[]={"降"};
- uchar code hz_sc[]={"剎車"};
- uchar rem[]={0,0,1,0};
- uchar rem_cs[]={0,0,0,0};
- uchar rem_1[]={0,0};
- uchar rem_sj[]={0,0};
- uchar rem_gd1[]={0,0,0,0};
- uchar code bcd[]={"0123456789"};
- /////////////
- yanshi(uint t)
- {
- uint i,j;
- for(i=0;i<t;i++)
- {
- for(j=0;j<110;j++);
- }
- }
- //////////////////////
- yanshi1(uint t)
- {
- while(t--);
- }
- ///////////////////////////
- fuwei()
- {yanshi(5);
- lcd_reset=0;
- yanshi(5);
- lcd_reset=1;
- }
- ///////////////////////////
- xie_lcd(bit ly,uchar shuju_lcd)
- {
- lcd_rs=ly;
- lcd_rw=0;
- lcd_e=0;
- P0=shuju_lcd;
- yanshi(5);
- lcd_e=1;
- yanshi(5);
- lcd_e=0;
- }
- /////////////////////////////
- /////////////////////////////
- lcd_zuobiao(uchar x,uchar y)
- {
- uchar temp;
- if(x==0)
- {x=0x80;}
- if(x==1)
- {x=0x90;}
- if(x==2)
- {x=0x88;}
- if(x==3)
- {x=0x98;}
- temp=x+y;
- xie_lcd(0,temp);
- }
- ///////////////////////////
- xiehz(uchar xx,uchar yy,uchar code *chn)
- {
- uchar i;
- lcd_zuobiao(xx,yy);
- i=0;
- while(chn[i]!='\0')
- {
- xie_lcd(1,chn[i]);
- i++;
- }
- }
- ///////////////////////////
- xiesz(uchar xx,uchar yy,uchar wei,uchar *chn)
- {
- uchar i;
- lcd_zuobiao(xx,yy);
- for(i=0;i<wei;i++)
- {
- xie_lcd(1,bcd[chn[i]]);
- }
- }
- ///////////////////////////
- ///////////////////////////
- xieping_1()
- {
- xiehz(0,0,hz_t);
- xiehz(0,4,hz_tg);
- xiehz(1,0,hz_lh);
- xiehz(2,0,hz_sc);
- }
- ///////////////////////////
- chushihua_p()
- {
- xie_lcd(0,0x30);
- xie_lcd(0,0x0c);
- xie_lcd(0,0x01);
- xiehz(0,0,zzzk);
- //xiehz(2,0,csh);
- xiehz(3,2,qqh);
- yanshi(2000);
- xie_lcd(0,0x01);
- xieping_1();
- xiehz(0,2,hz_tz);
- xiesz(0,6,4,rem);
- }
- ///////////////////////////
- ////////////////////停機,離合器離開,同時剎車剎住
- ting()
- {
- fuwei();
- chushihua_p();
- lihe=1;
- EA=0;
- TR1=0;
- EX0=0;EX1=0;
- zd_1=0;
- ms=0;
- xiehz(0,2,hz_tz);
- xiehz(1,2,tb_2);
- xiehz(2,2,tb_2);
- //shache=0;//xiesz(3,0,4,rem_gd1);shiling=0;
- }
- ///////////////////
- sd_lh()
- {
- if(~zd_1)
- {
- while(jian==0xf7)lihe=0;
- lihe=1;
- }
- }
- ///////////////
- sd_sc()
- {
- if(~zd_1)
- {
- while(jian==0xfb)shache=0;
- shache=1;
- }
- }
- /////////////////////
- shujuchuli_0()
- {
- uint shuju;
- shuju=gaodu_0-200;
- rem[1]=shuju%1000/100;
- rem[2]=shuju%100/10;
- rem[3]=shuju%10;
- xiesz(0,6,4,rem);
- //if(gaodu_1>=200)
- //{
- shuju=gaodu_1;//-200;
- rem_gd1[1]=shuju%1000/100;
- rem_gd1[2]=shuju%100/10;
- rem_gd1[3]=shuju%10;
- xiesz(3,0,4,rem_gd1);
- // }
- shuju=cishu;
- rem_cs[1]=shuju%1000/100;
- rem_cs[2]=shuju%100/10;
- rem_cs[3]=shuju%10;
- xiesz(3,6,4,rem_cs);
- }
- /////////////////////
- /////////////提低//////////////////////////////////
- tidi()
- {
- if(gaodu_0>210)gaodu_0--;
- }
- //////提高
- tigao()
- {
- gaodu_0++;
- }
- ///////////////
- ///////////////////
- ///////////////////自動
- zidong()
- {
- if(ms==0)if(zd_1==0)
- {
- ms=1;
- xiehz(0,2,hz_z);
- shiling=0;
- gaodu_1=200;
- TMOD=0x10;
- ET1=1;
- TH1=0;TL1=0;TR1=1;
- zd_1=1;
- shache=1;
- lihe=0;
- ti_1=1; // //提升標志致一
- IT0=1;//負跳變有效
- EX0=1;//開外int0中斷
- IT1=1;//負跳變有效
- //EX1=1;//開外int1中斷
- EA=1;
- }
- }
- ///////////////////鍵盤
- jianpan()
- {
- uchar jianma;
- jian=0xff;
- if(jian==0xff)aj_1=1;
- else{
- yanshi1(50);
- if(jian==0xff)return;
- if(aj_1)
- {
- jianma=jian&0xff;
- aj_1=0;
- switch(jianma)
- {
- case 0x7f:
- {
- zd_1=0;
- if(ms==2)ting();
- }
- break;
- case 0xbf:zidong();break;
- case 0xdf:tidi();break;
- case 0xef:tigao();break;
- case 0xf7:sd_lh();break;
- case 0xfb:sd_sc();break;
- case 0xfd:jin_1=1;break;
- case 0xfe:song_1=1;break;
- }
- }
-
- }
- }
- ///////////////////////////
- chushihua_jiqi()
- {
- lihe=1;
- shache=1;
- gaodu_0=230;
- gaodu_1=200;
- shiji_0=203;
- cishu=0;
- PX0=1;
- shujuchuli_0();
- }
- ///////////////////////////////////
- jing()
- {
- ms=2;
- shiling=0;
- gaodu_1=200;
- xiehz(0,2,hz_jing);
- xiehz(1,2,tb_2);
- while(ms==2)
- {
- EX0=0;
- lihe=1;
- jianpan();
- }
- xieping_1();
- ting();
- xiehz(3,0,hz_kong);
- }
- ///////////////////////////////////
- guole()
- {
- EA=0;TR1=0;EX0=0;EX1=0;lihe=1;zd_1=0;
- jing();
- }
- ////////////////////////////////
- baoxian() interrupt 3
- {
- TH1=0;
- TL1=0;
- shiling++;
- if(shiling>200)
- {
- EA=0;TR1=0;EX0=0;EX1=0;lihe=1;zd_1=0;
- xiehz(3,0,hz_bj1);
- jing();
- }
- }
- //////////////////////////
- ///////////////////////////
- void main(void)
- {
- lihe=1;shache=1; //
- fuwei(); //屏幕復位
- chushihua_p(); //初始化屏
- chushihua_jiqi(); ///初始化機器
- while(1)
- {
- if(~zd_1)lihe=1; //不是自動模式離合松
- shujuchuli_0(); //數據處理
- jianpan();
- if(lihe){xiehz(1,2,tb_2);xiehz(1,4,hz_jiang);} //松開時寫實心球寫降字
- else {xiehz(1,2,tb_1);xiehz(1,4,hz_sheng);} //結合時寫升
- jianpan();
- if(shache)xiehz(2,2,tb_2); //
- else xiehz(2,2,tb_1); //
- jianpan();
- if(jin_1)xiehz(2,4,hz_gs); //
- else xiehz(2,4,hz_gj); //
- if(sj_s>20){EX0=0;xiehz(3,0,hz_bj5);guole();sj_s=0;} //
- }
- }
- ///////////////////查磁片程序/////////////
- jishu1() interrupt 0
- {
- EX0=0;
- yanshi1(20); ///消除線路干擾,消抖
- if(~ge) ///消抖
- {
- shiling=0; ///防止計數傳感器失靈,或機器不轉
- if(zhengfan)
- { if(~ti_1)lihe=1; //提起標志為零時離合器松開
- else
- { //提起標志1時
- while((zhengfan)&&(~ge)); //等待方向傳感器被觸發,
- if(ge)
- { //方向傳感器沒有被觸發時
- EA=0;EX0=0; //總中斷為零不再計數
- lihe=1;zd_1=0; //離合松,自動標志為0
- xiehz(3,0,hz_bj2); //寫方向傳感器失靈漢字
- jing(); //進入警狀態
- }
- }
- if(tj_1) //調節標志為一時進行調節
- {
- tj_1=0; ///置零調節標志,只進行一次調節
- EX1=0; //關閉過松觸發中斷
- song_1=1; //松標志置一,
- }
- gaodu_1++; //提升高度計數加加
-
- ////////////////////////////////////////////////////////////////
- if(zd_1)
- { // 是自動模式判斷高度
- if(gaodu_1>=gaodu_0)/// ///高度到否判斷
- { //到了
- if(~jin_1)
- { //緊標志零時
- ti_1=0; //提升標志置零
- lihe=1; //離合斷開
- yanshi1(40); //延時防干擾
- }
- else
- { //進標志一時
- jin_1=0; // 置零,只緊一次
- song_1=0; //松標志為零,不松了
- gaodu_1--; //高度計數器減減,讓提升數值不變。
- sj_j++; //緊的次數加加
- if(sj_j>4)gaodu_1--; //連續緊超過4次了,多緊一個磁片
- }
- }
- }
- else {
- lihe=1;ti_1=0; //落錘停車
- yanshi1(40);
- }
- }
- ///////////////////////////////////////////////////////////////////////////////////
- else
- {
- gaodu_1--; //落錘時高度減減
- if(gaodu_1<=shiji_0)
- { //落到底了
- if(zd_1) ///
- {
- if(~song_1)
- { //松標志為零時提升
- if(~ti_1)cishu++; //打夯次數加一
- ti_1=1; //提升標志
- tj_1=1; //調節標志
- lihe=0; ///結合離合顯示上橫
- EX1=1; //開外中斷1,檢查是否松,
- yanshi1(40); //延時
- }
- else
- {
- song_1=0; //松標志置零
- gaodu_1++; //松一個磁片
- sj_j=0; //緊次數置零
- sj_s++; // 松的次數加加
- if(sj_s>4)gaodu_1++; //連續松了超4次了,多松一個
- }
- }
- else ting(); //停車
- }
- }
- }
- EX0=1;
- }
- ////////////////////////////////////////
- songle() interrupt 2
- {yanshi(30);
- if(~sj_p33)
- {
- jin_1=1;
- sj_s=0; //碰到鋼絲繩時松計數置零,防止過松。
- EX1=0;
- }
- }
復制代碼
|