找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 23|回复: 1
打印 上一主题 下一主题
收起左侧

STC8H8K32U 机械手辅助控制板输入输出动作调试

[复制链接]
跳转到指定楼层
楼主

/******************************************/
              #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*/
};
//==========================================================================
              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个字
                }
               }
//

              }        
/********************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个字
                }
               }
//进
              }        
/***************显示电机停止******************/
              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()
              {
               OUT_1=0;                             //前气缸进
               OUT_3=0;                             //后气缸进
               Cylinder_Forword();
               do
               {
                Cylinder_1=1;
                Cylinder_2=1;
                do
                {
                if(Cylinder_1==1)                 //前气缸未复位
                {
                 key_reset();
                 for(;kcounter<10;)               //输入端口循环5次
                 {
                  if(!KEY_1)                    //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_1)                //输入端口高电平
                  {                              //
                  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(!KEY_2)                    //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_2)                //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(3);
                  Cylinder_2=0;
                  OUT_3=1;                         //关后气缸
                  }
                 }
                }
//后气缸进停止        
                }
               while(Cylinder_1||Cylinder_2);             // 循环
               dis_Val(4);
               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(!KEY_3)                    //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_3)                //输入端口高电平
                  {                              //
                  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(!KEY_4)                    //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_4)                //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(6);
                  Motor_2=0;
                  Motorb_In1=1;                  // 电机后信号
                  Motorb_In2=1;                  // 电机后信号
                  }
                 }
                }
//后电机进停止        
               }
               while(Motor_1||Motor_2);             //或循环
               dis_Val(7);
               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(!KEY_6)                    //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_6)                //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(2);
                  Cylinder_3=0;
                  OUT_2=1;                         //关前气缸
                  }
                  }
                 }
//前气缸退停止        
                if(Cylinder_2==1)                 //前气缸未复位
                {
                 key_reset();
                 for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!KEY_7)                    //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_7)                //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(3);
                  Cylinder_4=0;
                  OUT_4=1;                         //关后气缸
                  }
                 }
                }
                }
//后气缸退停止
               while(Cylinder_3||Cylinder_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(!KEY_5)                     //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_5)               //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(1);
                  Auto_Run();                    //   
                  }
                 }
//自动
                key_reset();
                for(;kcounter<10;)               //输入端口循环5次
                 {
                  if(!INT_1)                     //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_1)               //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(20);
                  OUT_1=0;                       // 前气缸进 //
                  }
                 }
//前气缸进
                key_reset();
                for(;kcounter<10;)               //输入端口循环5次
                 {
                  if(!INT_2)                     //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_2)               //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(21);
                  OUT_1=1;                       // 前气缸进 //   
                  }
                 }
//前气缸停
                key_reset();
                for(;kcounter<10;)               //输入端口循环5次
                 {
                  if(!INT_3)                     //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_3)               //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(22);
                  OUT_2=0;                       //   
                  }
                 }
//后气缸进
                key_reset();
                for(;kcounter<10;)               //输入端口循环5次
                 {
                  if(!INT_4)                     //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_4)               //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(23);
                  OUT_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(24);
                  Motora_In1=1;                  // 电机前信号
                  Motora_In2=0;                  // 电机前信号   
                  }
                 }
//前电机进
                key_reset();
                for(;kcounter<10;)               //输入端口循环5次
                 {
                  if(!INT_6)                     //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_6)               //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(25);
                  Motora_In1=1;                  // 电机前信号
                  Motora_In2=1;                  // 电机前信号   
                  }
                 }
//前电机停
                key_reset();
                for(;kcounter<10;)               //输入端口循环5次
                 {
                  if(!INT_7)                     //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_7)               //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(26);
                  Motorb_In1=1;                  // 电机后信号
                  Motorb_In2=0;                  // 电机后信号   
                  }
                 }
//后电机进
                key_reset();
                for(;kcounter<10;)               //输入端口循环5次
                 {
                  if(!INT_8)                     //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_8)               //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(27);
                  Motorb_In1=1;                  // 电机后信号
                  Motorb_In2=1;                  // 电机后信号  
                  }
                 }
//后电机停
               }
              }


2019 年 12 月STM32F103最小系统.rar

299.75 KB, 下载次数: 0, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:140644 发表于 2026-4-8 17:06 | 只看该作者
继续改进 输入口按动作顺序排列
/******************************************/
              #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();                    //   
                  }
                 }
//开自动
               }
              }



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表