|
|
继续改进 输入口按动作顺序排列 /******************************************/ #include "stc8h.h" //包含此头文件后,不需要再包含"reg51.h"头文件 #include "stdio.h" #include "intrins.h" #define high 1 #define low 0 #define OPEN 1 #define OFF 0 typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32; sbit OLED_SCL=P2^7; // sbit OLED_SDA=P2^6; // sbit OUT_A=P6^0; // sbit OUT_B=P6^1; // sbit OUT_C=P6^2; // sbit OUT_D=P6^3; // sbit Motora_In1=P1^0; // 电机前信号 sbit Motora_In2=P1^1; // 电机前信号 sbit Motorb_In1=P1^4; // 电机后信号 sbit Motorb_In2=P1^5; // 电机后信号 sbit INT_1=P3^2; // 自动启动 sbit INT_2=P3^3; // 开模信号 sbit INT_3=P3^4; // 机械手到位 sbit INT_4=P3^5; // 气缸前到位 sbit INT_5=P3^6; // 气缸后到位 sbit INT_6=P3^7; // 电机前到位 sbit INT_7=P4^1; // 电机后到位 sbit INT_8=P4^2; // 气缸前退停 sbit INT_9=P4^3; // 气缸后退停 sbit INT_10=P4^4; // 电机前退停 sbit INT_11=P2^0; // 电机后退停 sbit INT_12=P2^1; // 手动气缸进 sbit INT_13=P2^2; // 手动气缸退 sbit INT_14=P2^3; // 手动电机进 sbit INT_15=P2^4; // 手动电机退 sbit INT_16=P2^5; // //输入信号 sbit OUT_1=P0^6; // 前气缸进 sbit OUT_2=P0^4; // 前气缸退 sbit OUT_3=P0^3; // 后气缸进 sbit OUT_4=P0^2; // 后气缸退 sbit OUT_5=P0^1; // sbit OUT_6=P0^0; // sbit OUT_7=P4^6; // 警报 sbit OUT_8=P4^5; // 动作完成 //输出信号 sbit KEY_1=P0^5; // sbit KEY_2=P4^7; // sbit KEY_3=P1^6; // sbit KEY_4=P1^7; // sbit KEY_5=P1^3; // sbit KEY_6=P5^4; // sbit KEY_7=P4^0; // sbit KEY_8=P0^7; // //按键 u8 Counter; //步进计数器 u8 kcounter,kstatus; //按键计数标志 按键状态标志 bit Auto_Flag; bit Cylinder_1,Cylinder_2; //气缸进标志位 bit Cylinder_3,Cylinder_4; //气缸进标志位 bit Motor_1,Motor_2; //电机进标志位 bit Motor_3,Motor_4; //电机进标志位 #define MAIN_Fosc 24000000UL u8 code show1[]= { 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",0*/ 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"1",1*/ 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",2*/ 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*"3",3*/ 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*"4",4*/ 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*"5",5*/ 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"6",6*/ 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*"7",7*/ 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",8*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*"9",9*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x1F,0x01,0x01,0x01,0x01,0x1F,0x00,/*"A",10*/ 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",11*/ 0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00,/*"W",12*/ 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,/*"O",13*/ 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,/*"N",14*/ }; u8 code show2[]= { 0x08,0x08,0x08,0x08,0x88,0x78,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00, 0x20,0x10,0x48,0x46,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00,/*"左",0*/ 0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00, 0x08,0x04,0x02,0x01,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00,0x00,/*"右",1*/ 0x80,0x60,0xF8,0x07,0x00,0x04,0x74,0x54,0x55,0x56,0x54,0x54,0x74,0x04,0x00,0x00, 0x00,0x00,0xFF,0x00,0x03,0x01,0x05,0x45,0x85,0x7D,0x05,0x05,0x05,0x01,0x03,0x00,/*"停",2*/ 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"止",3*/ 0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x45,0x46,0x44,0x44,0x44,0x44,0x7C,0x00,0x00, 0x40,0x20,0x18,0x07,0x00,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFC,0x00,0x00,/*"启",4*/ 0x40,0x44,0xC4,0x44,0x44,0x44,0x40,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00, 0x10,0x3C,0x13,0x10,0x14,0xB8,0x40,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00,/*"动",5*/ 0x00,0x04,0x84,0x84,0x94,0xE4,0x85,0x86,0x84,0xC4,0xB4,0x84,0x84,0x84,0x80,0x00, 0x80,0x60,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"产",6*/ 0x20,0x20,0x20,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x20,0x20,0x20,0x00, 0x00,0x80,0x80,0xAF,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAF,0x80,0x80,0x00,0x00,/*"量",7*/ 0x40,0x40,0x42,0xCC,0x00,0x80,0x88,0x88,0xFF,0x88,0x88,0xFF,0x88,0x88,0x80,0x00, 0x00,0x40,0x20,0x1F,0x20,0x40,0x50,0x4C,0x43,0x40,0x40,0x5F,0x40,0x40,0x40,0x00,/*"进",8*/ 0x40,0x40,0x42,0xCC,0x00,0x00,0xFF,0x49,0x49,0xC9,0x49,0x49,0x7F,0x80,0x00,0x00, 0x00,0x40,0x20,0x1F,0x20,0x40,0x5F,0x48,0x44,0x40,0x41,0x42,0x45,0x58,0x40,0x00,/*"退",9*/ 0x00,0x00,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x00, 0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,/*"刀",10*/ 0x00,0x10,0x88,0xC4,0x33,0x40,0x48,0x48,0x48,0x7F,0x48,0xC8,0x48,0x48,0x40,0x00, 0x02,0x01,0x00,0xFF,0x00,0x02,0x0A,0x32,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x00,/*"待",11*/ 0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00, 0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00,/*"机",12*/ 0x20,0x10,0x4C,0x47,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0xD4,0x04,0x04,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x40,0xF0,0x00,/*"气",13*/ 0x50,0x48,0x47,0x44,0xFC,0x44,0x44,0x44,0x00,0x04,0x04,0xFC,0x04,0x04,0x04,0x00, 0x00,0x3E,0x20,0x20,0x3F,0x10,0x10,0x7E,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x00,/*"缸",14*/ 0x80,0x80,0x88,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0x88,0x80,0x80,0x00, 0x20,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,0x01,0x02,0x04,0x08,0x10,0x20,0x20,0x00,/*"未",15*/ 0x08,0x08,0xE8,0x29,0x2E,0x28,0xE8,0x08,0x08,0xC8,0x0C,0x0B,0xE8,0x08,0x08,0x00, 0x00,0x00,0xFF,0x09,0x49,0x89,0x7F,0x00,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00,/*"前",16*/ 0x00,0x00,0x00,0xFC,0x24,0x24,0x24,0x24,0x22,0x22,0x22,0x23,0x22,0x20,0x20,0x00, 0x40,0x20,0x18,0x07,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,/*"后",17*/ 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00, 0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00,/*"电",18*/ 0x08,0x04,0x23,0x22,0x26,0x2A,0x22,0xFA,0x24,0x23,0x22,0x26,0x2A,0x02,0x02,0x00, 0x01,0x09,0x09,0x09,0x19,0x69,0x09,0x09,0x49,0x89,0x7D,0x09,0x09,0x09,0x01,0x00,/*"等",19*/ 0x10,0x10,0xD0,0xFF,0x90,0x00,0x10,0xD0,0x10,0xD0,0x10,0xFF,0x10,0x92,0x14,0x00, 0x04,0x03,0x00,0xFF,0x00,0x41,0x31,0x0F,0x01,0xBF,0x41,0x27,0x38,0x47,0xF0,0x00,/*"械",20*/ 0x00,0x00,0x24,0x24,0x24,0x24,0x24,0xFC,0x22,0x22,0x22,0x23,0x22,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,/*"手",21*/ }; //========================================================================== void delay_ms(u8 ms) { u16 i; do { i=MAIN_Fosc/1000; while(--i); } while(--ms); } /************按键计数器状态寄存器归零************/ void key_reset() { kcounter=0; //计数器归零 kstatus=0; //状态计数器归零 } /************按键计数器状态寄存器加一************/ void Key_ValAdd() { kcounter++; //按键计数器加一 kstatus++; //按键状态标志加一 } /***********按键计数器加一状态寄存器归零*********/ void Key_Clear() { kcounter++; //按键计数器加一 kstatus=0; //按键状态标志归零 } /*************Pin Define***************/ void Oled_delay(u16 ms) { u16 i,j; for(i=0;i<ms;i++) for(j=0;j<20;j++); } /*************Pin Define***************/ void Initial_LY096BG30(); void Delay_50ms(u16 Del_50ms); void fill_picture(u8 fill_Data); void IIC_Start(); void IIC_Stop(); void Write_IIC_Command(u8 IIC_Command); void Write_IIC_Data(u8 IIC_Data); bit Write_IIC_Byte(u8 IIC_Byte); /*******************IIC Start******************/ void IIC_Start() { OLED_SCL=high; Oled_delay(2); OLED_SDA=high; Oled_delay(2); OLED_SDA=low; Oled_delay(2); OLED_SCL=low; } /*************IIC Stop*************************/ void IIC_Stop() { OLED_SDA=low; Oled_delay(2); OLED_SCL=high; Oled_delay(2); OLED_SDA=high; } /*****************IIC Write byte***************/ bit Write_IIC_Byte(u8 IIC_Byte) { unsigned char i; bit Ack_Bit; //应答信号 for(i=0;i<8;i++) { if(IIC_Byte & 0x80) //1?0? OLED_SDA=high; else OLED_SDA=low; OLED_SCL=high; Oled_delay(2); OLED_SCL=low; IIC_Byte<<=1; //loop } OLED_SDA=high; //释放IIC SDA总线为主器件接收从器件产生应答信号 Oled_delay(2); OLED_SCL=high; //第9个时钟周期 Oled_delay(2); Ack_Bit=OLED_SDA; //读取应答信号 OLED_SCL=low; return Ack_Bit; } /*************IIC Write Command*****************/ void Write_IIC_Command(u8 IIC_Command) { IIC_Start(); Write_IIC_Byte(0x78); //Slave address,SA0=0 Write_IIC_Byte(0x00); //write command Write_IIC_Byte(IIC_Command); IIC_Stop(); } /****************IIC Write Data*****************/ void Write_IIC_Data(u8 IIC_Data) { IIC_Start(); Write_IIC_Byte(0x78); Write_IIC_Byte(0x40); //write data Write_IIC_Byte(IIC_Data); IIC_Stop(); } /***********************Initial code*********************/ void Initial_LY096BG30() { Write_IIC_Command(0xAE); //display off Write_IIC_Command(0x20); //Set Memory Addressing Mode Write_IIC_Command(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid Write_IIC_Command(0xb0); //Set Page Start Address for Page Addressing Mode,0-7 Write_IIC_Command(0xc8); //Set COM Output Scan Direction Write_IIC_Command(0x00); //---set low column address Write_IIC_Command(0x10); //---set high column address Write_IIC_Command(0x40); //--set start line address Write_IIC_Command(0x81); //--set contrast control register Write_IIC_Command(0x7f); Write_IIC_Command(0xa1); //--set segment re-map 0 to 127 Write_IIC_Command(0xa6); //--set normal display Write_IIC_Command(0xa8); //--set multiplex ratio(1 to 64) Write_IIC_Command(0x3F); // Write_IIC_Command(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content Write_IIC_Command(0xd3); //-set display offset Write_IIC_Command(0x00); //-not offset Write_IIC_Command(0xd5); //--set display clock divide ratio/oscillator frequency Write_IIC_Command(0xf0); //--set divide ratio Write_IIC_Command(0xd9); //--set pre-charge period Write_IIC_Command(0x22); // Write_IIC_Command(0xda); //--set com pins hardware configuration Write_IIC_Command(0x12); Write_IIC_Command(0xdb); //--set vcomh Write_IIC_Command(0x20); //0x20,0.77xVcc Write_IIC_Command(0x8d); //--set DC-DC enable Write_IIC_Command(0x14); // Write_IIC_Command(0xaf); //--turn on oled panel } /***************设置参数显示******************/ void dis_Val1(u8 s) { u8 x,y; u16 i=0; u8 A1,A2,A3; A1=s/100; A2=(s-A1*100)/10; A3=s-A1*100-A2*10; for(y=0;y<2;y++) //百位显示 { Write_IIC_Command((u8)(0XB4+y)); //纵向页 1011 Write_IIC_Command(0X00); //横向离左部边缘开始的距离 Write_IIC_Command(0X10); //横向第四个字 for(x=0;x<8;x++) //横向像素 { Write_IIC_Data(show1[x+y*8+A1*16]); //0--A字符表 } for(x=0;x<8;x++) //横向像素 { Write_IIC_Data(show1[x+y*8+A2*16]); Oled_delay(2); } } for(y=0;y<2;y++) //十位显示 { Write_IIC_Command((u8)(0XB4+y)); //纵向页 Write_IIC_Command(0X00); //横向离左部边缘开始的距离 Write_IIC_Command(0X11); //横向第五个字 for(x=0;x<8;x++) //横向像素 { Write_IIC_Data(show1[x+y*8+A3*16]); Oled_delay(2); } } } /********************显示待机**********************/ void Diswait() { u8 x,y; u16 Cnt=32; for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 待 Write_IIC_Command(0x00); Write_IIC_Command(0x10); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*11]); //字符表第7个字 } } // for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 机 Write_IIC_Command(0x00); Write_IIC_Command(0x11); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*12]); //字符表第8个字 } } for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 清空 Write_IIC_Command(0x00); Write_IIC_Command(0x12); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(0X00); //字符表第7个字 } } // for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 清空 Write_IIC_Command(0x00); Write_IIC_Command(0x13); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(0X00); //字符表第7个字 } } // for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 清空 Write_IIC_Command(0x00); Write_IIC_Command(0x14); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(0X00); //字符表第7个字 } } // } /****************显示等待机械手****************/ void Wait_Machine() { u8 x,y; u16 Cnt=32; for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 等 Write_IIC_Command(0x00); Write_IIC_Command(0x10); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*19]); //字符表第7个字 } } // for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 待 Write_IIC_Command(0x00); Write_IIC_Command(0x11); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*11]); //字符表第8个字 } } for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 机 Write_IIC_Command(0x00); Write_IIC_Command(0x12); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*12]); //字符表第7个字 } } // for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 械 Write_IIC_Command(0x00); Write_IIC_Command(0x13); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*20]); //字符表第7个字 } } // for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 手 Write_IIC_Command(0x00); Write_IIC_Command(0x14); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*21]); //字符表第7个字 } } // } /********************显示启动**********************/ void DiStart() { u8 x,y; u16 Cnt=32; for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 启 Write_IIC_Command(0x00); Write_IIC_Command(0x16); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*4]); //字符表第7个字 } } // for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 动 Write_IIC_Command(0x00); Write_IIC_Command(0x17); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*5]); //字符表第8个字 } } // } /********************IO_rst**********************/ void IO_int() { P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能 P0M1 = 0x00; P0M0 = 0x00; //设置为推挽输出 P1M1 = 0x00; P1M0 = 0x33; //设置1.0 1.1 1.4 1.5强推挽 P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口 P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口 P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口 P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口 } /********************picture**********************/ void cleardisp() { u8 x,y; for(y=0;y<8;y++) { Write_IIC_Command((u8)(0xb0+y)); Write_IIC_Command(0x00); Write_IIC_Command(0x10); for(x=0;x<128;x++) //横向像素 { Write_IIC_Data(0X00); } } } /***************显示计数器值******************/ void dis_Val(u8 s) { u8 x,y; u16 i=0; u8 A1,A2; A1=s/10; A2=s-A1*10; for(y=0;y<2;y++) //百位显示 { Write_IIC_Command((u8)(0XB2+y)); //纵向页 1011 Write_IIC_Command(0X00); //横向离左部边缘开始的距离 Write_IIC_Command(0X10); //横向第四个字 for(x=0;x<8;x++) //横向像素 { Write_IIC_Data(show1[x+y*8+A1*16]); //0--A字符表 } for(x=0;x<8;x++) //横向像素 { Write_IIC_Data(show1[x+y*8+A2*16]); //0--A字符表 } } } /***************显示气缸前进******************/ void Cylinder_Forword() { u8 x,y; u16 Cnt=32; for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x10); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*13]); //字符表第7个字 } } //气 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x11); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*14]); //字符表第8个字 } } //缸 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x12); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*16]); //字符表第7个字 } } //前 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x13); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*8]); //字符表第8个字 } } //进 } /***************显示气缸后退******************/ void Cylinder_Back() { u8 x,y; u16 Cnt=32; for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x10); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*13]); //字符表第7个字 } } //气 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x11); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*14]); //字符表第8个字 } } //缸 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x12); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*17]); //字符表第7个字 } } //后 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x13); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*9]); //字符表第8个字 } } //退 } /***************显示电机前进******************/ void Motor_Forword() { u8 x,y; u16 Cnt=32; for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x10); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*18]); //字符表第7个字 } } //电 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x11); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*12]); //字符表第8个字 } } //机 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x12); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*16]); //字符表第7个字 } } //前 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x13); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*8]); //字符表第8个字 } } //进 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x14); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(0X00); //字符表第8个字 } } //清空 } /***************显示电机后退******************/ void Motor_Back() { u8 x,y; u16 Cnt=32; for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x10); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*18]); //字符表第7个字 } } //电 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x11); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*12]); //字符表第8个字 } } //机 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x12); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*17]); //字符表第7个字 } } //后退 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x13); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*9]); //字符表第8个字 } } //退 } /***************显示电机停止******************/ void Motor_Stop() { u8 x,y; u16 Cnt=32; for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x10); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*18]); //字符表第7个字 } } //电 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x11); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*12]); //字符表第8个字 } } //机 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x12); //横向第一个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*2]); //字符表第7个字 } } //停 for(y=0;y<2;y++) { Write_IIC_Command((u8)(0XB0+y)); // Write_IIC_Command(0x00); Write_IIC_Command(0x13); //横向第二个字 for(x=0;x<16;x++) //横向像素 { Write_IIC_Data(show2[x+y*16+Cnt*3]); //字符表第8个字 } } //止 } /***************自动运行******************/ void Auto_Run() { DiStart(); Cylinder_Forword(); do { kstatus=0; for(;kstatus<10;) //输入端口循环5次 { if(!INT_2) //输入端口低电平 { kstatus++; //输入端口低电平 计数器加一状态标志加一 } else if(~!INT_2) //输入端口高电平 { // kstatus=0; //按键计数器加一 状态标志归零 } } //开模信号 OUT_1=0; //前气缸进 OUT_3=0; //后气缸进 Cylinder_1=1; Cylinder_2=1; do { if(Cylinder_1==1) //前气缸未复位 { key_reset(); for(;kcounter<10;) //输入端口循环5次 { if(!INT_4) //输入端口低电平 { Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一 } else if(~!INT_4) //输入端口高电平 { // Key_Clear(); //按键计数器加一 状态标志归零 } if(kstatus>=8) /*按键状态标志大于等于3为有效值*/ { dis_Val(2); Cylinder_1=0; OUT_1=1; //关前气缸 } } } //前气缸进停止 if(Cylinder_2==1) //前气缸未复位 { key_reset(); for(;kcounter<10;) //输入端口循环5次 { if(!INT_5) //输入端口低电平 { Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一 } else if(~!INT_5) //输入端口高电平 { // Key_Clear(); //按键计数器加一 状态标志归零 } if(kstatus>=8) /*按键状态标志大于等于3为有效值*/ { dis_Val(3); Cylinder_2=0; OUT_3=1; //关后气缸 } } } //后气缸进停止 } while(Cylinder_1||Cylinder_2); // 循环 Wait_Machine(); // kstatus=0; for(;kstatus<10;) //输入端口循环5次 { if(!INT_3) //输入端口低电平 { kstatus++; //输入端口低电平 计数器加一状态标志加一 } else if(~!INT_3) //输入端口高电平 { // kstatus=0; //按键计数器加一 状态标志归零 } } //等待机械手信号 Motor_Forword(); // 显示电机前进 Motora_In1=1; // 电机前信号 Motora_In2=0; // 电机前信号 Motorb_In1=1; // 电机后信号 Motorb_In2=0; // 电机后信号 Motor_1=1; // Motor_2=1; // do { if(Motor_1==1) { key_reset(); for(;kcounter<10;) //输入端口循环5次 { if(!INT_6) //输入端口低电平 { Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一 } else if(~!INT_6) //输入端口高电平 { // Key_Clear(); //按键计数器加一 状态标志归零 } if(kstatus>=8) /*按键状态标志大于等于3为有效值*/ { dis_Val(5); Motor_1=0; Motora_In1=1; // 电机前信号 Motora_In2=1; // 电机前信号 } } } //前电机进停止 if(Motor_2==1) { key_reset(); for(;kcounter<10;) //输入端口循环5次 { if(!INT_7) //输入端口低电平 { Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一 } else if(~!INT_7) //输入端口高电平 { // Key_Clear(); //按键计数器加一 状态标志归零 } if(kstatus>=8) /*按键状态标志大于等于3为有效值*/ { dis_Val(6); Motor_2=0; Motorb_In1=1; // 电机后信号 Motorb_In2=1; // 电机后信号 } } } //后电机进停止 } while(Motor_1||Motor_2); //或循环 Motor_Stop(); //显示电机停止 delay_ms(200); dis_Val(8); Cylinder_Back(); //显示气缸后退 OUT_2=0; //前气缸退 OUT_4=0; //后气缸退 Cylinder_3=1; Cylinder_4=1; do { if(Cylinder_3==1) //前气缸未复位 { key_reset(); for(;kcounter<10;) //输入端口循环5次 { if(!INT_8) //输入端口低电平 { Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一 } else if(~!INT_8) //输入端口高电平 { // Key_Clear(); //按键计数器加一 状态标志归零 } if(kstatus>=8) /*按键状态标志大于等于3为有效值*/ { Cylinder_3=0; OUT_2=1; //关前气缸 } } } //前气缸退停止 if(Cylinder_4==1) //前气缸未复位 { key_reset(); for(;kcounter<10;) //输入端口循环5次 { if(!INT_9) //输入端口低电平 { Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一 } else if(~!INT_9) //输入端口高电平 { // Key_Clear(); //按键计数器加一 状态标志归零 } if(kstatus>=8) /*按键状态标志大于等于3为有效值*/ { Cylinder_4=0; OUT_4=1; //关后气缸 } } } } //后气缸退停止 while(Cylinder_3||Cylinder_4); //检测运行气缸退两个标志位 Motor_Back(); // 显示电机退 Motora_In1=0; // 电机前信号 Motora_In2=1; // 电机前信号 Motorb_In1=0; // 电机后信号 Motorb_In2=1; // 电机后信号 Motor_3=1; // Motor_4=1; // do { if(Motor_3==1) //前气缸未复位 { key_reset(); for(;kcounter<10;) //输入端口循环5次 { if(!INT_10) //输入端口低电平 { Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一 } else if(~!INT_10) //输入端口高电平 { // Key_Clear(); //按键计数器加一 状态标志归零 } if(kstatus>=8) /*按键状态标志大于等于3为有效值*/ { Motor_3=0; Motora_In1=1; // 电机前信号 Motora_In2=1; // 电机前信号 } } } //电机前退停止 if(Motor_4==1) //前气缸未复位 { key_reset(); for(;kcounter<10;) //输入端口循环5次 { if(!INT_11) //输入端口低电平 { Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一 } else if(~!INT_11) //输入端口高电平 { // Key_Clear(); //按键计数器加一 状态标志归零 } if(kstatus>=8) /*按键状态标志大于等于3为有效值*/ { Motor_4=0; Motorb_In1=1; // 电机后信号 Motorb_In2=1; // 电机后信号 } } } } //电机后退停止 while(Motor_3||Motor_4); //检测运行气缸退两个标志位 delay_ms(200); key_reset(); for(;kcounter<10;) //输入端口循环5次 { if(~!KEY_5) //输入端口低电平 { Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一 } else if(!KEY_5) //输入端口高电平 { // Key_Clear(); //按键计数器加一 状态标志归零 } if(kstatus>=8) /*按键状态标志大于等于3为有效值*/ { dis_Val(0); //退出自动循环 Auto_Flag=0; Diswait(); } } } while(Auto_Flag); } /******************** 主函数 **************************/ void main(void) { IO_int(); Initial_LY096BG30(); cleardisp(); Diswait(); Counter=0; dis_Val1(0X12); //第三行显示十进制数18 while(1) { // key_reset(); for(;kcounter<10;) //输入端口循环5次 { if(!INT_1) //输入端口低电平 { Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一 } else if(~!INT_1) //输入端口高电平 { // Key_Clear(); //按键计数器加一 状态标志归零 } if(kstatus>=8) /*按键状态标志大于等于3为有效值*/ { dis_Val(1); Auto_Run(); // } } //开自动 } } |