当前位置: 首页 > article >正文

STC8H8K32U工控板 电机正反转

本文摘要 该代码实现了一个基于STC8H单片机的自动化控制系统主要功能包括 通过I2C接口驱动OLED显示屏显示quot;气缸前进/后退quot;、quot;电机前进/停止quot;等状态信息 控制4路气缸(前/后气缸的进/退)和2路电机(前/后电机)的动作 采用按键检测机制实现自动运行控制包含防抖处理 系统具有自动运行模式按预设流程控制气缸和电机顺序动作 包含多种状态显示功能通过自定义字库显示中文状态信息 系统通过多个IO口检测限位开关状态实现精确的位置控制并具备手动操作和自动运/******************************************/#include stc8h.h //包含此头文件后不需要再包含reg51.h头文件#include stdio.h#include intrins.h#define high 1#define low 0#define OPEN 1#define OFF 0typedef unsigned char u8;typedef unsigned int u16;typedef unsigned long u32;sbit OLED_SCLP2^7; //sbit OLED_SDAP2^6; //sbit OUT_AP6^0; //sbit OUT_BP6^1; //sbit OUT_CP6^2; //sbit OUT_DP6^3; //sbit Motora_In1P1^0; // 电机前信号sbit Motora_In2P1^1; // 电机前信号sbit Motorb_In1P1^4; // 电机后信号sbit Motorb_In2P1^5; // 电机后信号sbit INT_1P3^2; // 自动启动sbit INT_2P3^3; // 开模信号sbit INT_3P3^4; // 机械手到位sbit INT_4P3^5; // 气缸前到位sbit INT_5P3^6; // 气缸后到位sbit INT_6P3^7; // 气缸前退停sbit INT_7P4^1; // 气缸后退停sbit INT_8P4^2; // 电机前到位sbit INT_9P4^3; // 电机后到位sbit INT_10P4^4; // 电机前退停sbit INT_11P2^0; // 电机后退停sbit INT_12P2^1; // 手动气缸进sbit INT_13P2^2; // 手动气缸退sbit INT_14P2^3; // 手动电机进sbit INT_15P2^4; // 手动电机退sbit INT_16P2^5; ////输入信号sbit OUT_1P0^6; // 前气缸进sbit OUT_2P0^4; // 前气缸退sbit OUT_3P0^3; // 后气缸进sbit OUT_4P0^2; // 后气缸退sbit OUT_5P0^1; //sbit OUT_6P0^0; //sbit OUT_7P4^6; // 警报sbit OUT_8P4^5; // 动作完成//输出信号sbit KEY_1P0^5; //sbit KEY_2P4^7; //sbit KEY_3P1^6; //sbit KEY_4P1^7; //sbit KEY_5P1^3; //sbit KEY_6P5^4; //sbit KEY_7P4^0; //sbit KEY_8P0^7; ////按键u8 Counter; //步进计数器u8 kcounter,kstatus; //按键计数标志 按键状态标志bit Auto_Flag;bit Cylinder_11,Cylinder_21; //气缸进标志位bit Motor_11,Motor_21; //电机进标志位#define MAIN_Fosc 24000000ULu8 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{iMAIN_Fosc/1000;while(--i);}while(--ms);}/************按键计数器状态寄存器归零************/void key_reset(){kcounter0; //计数器归零kstatus0; //状态计数器归零}/************按键计数器状态寄存器加一************/void Key_ValAdd(){kcounter; //按键计数器加一kstatus; //按键状态标志加一}/***********按键计数器加一状态寄存器归零*********/void Key_Clear(){kcounter; //按键计数器加一kstatus0; //按键状态标志归零}/*************Pin Define***************/void Oled_delay(u16 ms){u16 i,j;for(i0;ims;i)for(j0;j20;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_SCLhigh;Oled_delay(2);OLED_SDAhigh;Oled_delay(2);OLED_SDAlow;Oled_delay(2);OLED_SCLlow;}/*************IIC Stop*************************/void IIC_Stop(){OLED_SDAlow;Oled_delay(2);OLED_SCLhigh;Oled_delay(2);OLED_SDAhigh;}/*****************IIC Write byte***************/bit Write_IIC_Byte(u8 IIC_Byte){unsigned char i;bit Ack_Bit; //应答信号for(i0;i8;i){if(IIC_Byte 0x80) //1?0?OLED_SDAhigh;elseOLED_SDAlow;OLED_SCLhigh;Oled_delay(2);OLED_SCLlow;IIC_Byte1; //loop}OLED_SDAhigh; //释放IIC SDA总线为主器件接收从器件产生应答信号Oled_delay(2);OLED_SCLhigh; //第9个时钟周期Oled_delay(2);Ack_BitOLED_SDA; //读取应答信号OLED_SCLlow;return Ack_Bit;}/*************IIC Write Command*****************/void Write_IIC_Command(u8 IIC_Command){IIC_Start();Write_IIC_Byte(0x78); //Slave address,SA00Write_IIC_Byte(0x00); //write commandWrite_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 dataWrite_IIC_Byte(IIC_Data);IIC_Stop();}/***********************Initial code*********************/void Initial_LY096BG30(){Write_IIC_Command(0xAE); //display offWrite_IIC_Command(0x20); //Set Memory Addressing ModeWrite_IIC_Command(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,InvalidWrite_IIC_Command(0xb0); //Set Page Start Address for Page Addressing Mode,0-7Write_IIC_Command(0xc8); //Set COM Output Scan DirectionWrite_IIC_Command(0x00); //---set low column addressWrite_IIC_Command(0x10); //---set high column addressWrite_IIC_Command(0x40); //--set start line addressWrite_IIC_Command(0x81); //--set contrast control registerWrite_IIC_Command(0x7f);Write_IIC_Command(0xa1); //--set segment re-map 0 to 127Write_IIC_Command(0xa6); //--set normal displayWrite_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 contentWrite_IIC_Command(0xd3); //-set display offsetWrite_IIC_Command(0x00); //-not offsetWrite_IIC_Command(0xd5); //--set display clock divide ratio/oscillator frequencyWrite_IIC_Command(0xf0); //--set divide ratioWrite_IIC_Command(0xd9); //--set pre-charge periodWrite_IIC_Command(0x22); //Write_IIC_Command(0xda); //--set com pins hardware configurationWrite_IIC_Command(0x12);Write_IIC_Command(0xdb); //--set vcomhWrite_IIC_Command(0x20); //0x20,0.77xVccWrite_IIC_Command(0x8d); //--set DC-DC enableWrite_IIC_Command(0x14); //Write_IIC_Command(0xaf); //--turn on oled panel}/***************设置参数显示******************/void dis_Val1(u8 s){u8 x,y;u16 i0;u8 A1,A2,A3;A1s/100;A2(s-A1*100)/10;A3s-A1*100-A2*10;for(y0;y2;y) //百位显示{Write_IIC_Command((u8)(0XB4y)); //纵向页 1011Write_IIC_Command(0X00); //横向离左部边缘开始的距离Write_IIC_Command(0X10); //横向第四个字for(x0;x8;x) //横向像素{Write_IIC_Data(show1[xy*8A1*16]); //0--A字符表}for(x0;x8;x) //横向像素{Write_IIC_Data(show1[xy*8A2*16]);Oled_delay(2);}}for(y0;y2;y) //十位显示{Write_IIC_Command((u8)(0XB4y)); //纵向页Write_IIC_Command(0X00); //横向离左部边缘开始的距离Write_IIC_Command(0X11); //横向第五个字for(x0;x8;x) //横向像素{Write_IIC_Data(show1[xy*8A3*16]);Oled_delay(2);}}}/********************显示待机**********************/void Diswait(){u8 x,y;u16 Cnt32;for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //竖向第一行 待Write_IIC_Command(0x00);Write_IIC_Command(0x10); //横向第一个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*11]); //字符表第7个字}}//for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //竖向第一行 机Write_IIC_Command(0x00);Write_IIC_Command(0x11); //横向第二个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*12]); //字符表第8个字}}for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //竖向第一行 待Write_IIC_Command(0x00);Write_IIC_Command(0x12); //横向第一个字for(x0;x16;x) //横向像素{Write_IIC_Data(0X00); //字符表第7个字}}//for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //竖向第一行 待Write_IIC_Command(0x00);Write_IIC_Command(0x13); //横向第一个字for(x0;x16;x) //横向像素{Write_IIC_Data(0X00); //字符表第7个字}}//}/********************IO_rst**********************/void IO_int(){P_SW2 | 0x80; //扩展寄存器(XFR)访问使能P0M1 0x00; P0M0 0x00; //设置为推挽输出P1M1 0x00; P1M0 0x00; //设置为准双向口P2M1 0x00; P2M0 0x00; //设置为准双向口P3M1 0x00; P3M0 0x00; //设置为准双向口P4M1 0x00; P4M0 0x00; //设置为准双向口P5M1 0x00; P5M0 0x00; //设置为准双向口}/********************picture**********************/void cleardisp(){u8 x,y;for(y0;y8;y){Write_IIC_Command((u8)(0xb0y));Write_IIC_Command(0x00);Write_IIC_Command(0x10);for(x0;x128;x) //横向像素{Write_IIC_Data(0X00);}}}/***************显示计数器值******************/void dis_Val(u8 s){u8 x,y;u16 i0;u8 A1,A2;A1s/10;A2s-A1*10;for(y0;y2;y) //百位显示{Write_IIC_Command((u8)(0XB2y)); //纵向页 1011Write_IIC_Command(0X00); //横向离左部边缘开始的距离Write_IIC_Command(0X10); //横向第四个字for(x0;x8;x) //横向像素{Write_IIC_Data(show1[xy*8A1*16]); //0--A字符表}for(x0;x8;x) //横向像素{Write_IIC_Data(show1[xy*8A2*16]); //0--A字符表}}}/***************显示气缸前进******************/void Cylinder_Forword(){u8 x,y;u16 Cnt32;for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x10); //横向第一个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*13]); //字符表第7个字}}//气for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x11); //横向第二个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*14]); //字符表第8个字}}//缸for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x12); //横向第一个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*16]); //字符表第7个字}}//前for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x13); //横向第二个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*8]); //字符表第8个字}}//进}/***************显示气缸后退******************/void Cylinder_Back(){u8 x,y;u16 Cnt32;for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x10); //横向第一个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*13]); //字符表第7个字}}//气for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x11); //横向第二个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*14]); //字符表第8个字}}//缸for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x12); //横向第一个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*17]); //字符表第7个字}}//后for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x13); //横向第二个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*9]); //字符表第8个字}}//退}/***************显示电机前进******************/void Motor_Forword(){u8 x,y;u16 Cnt32;for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x10); //横向第一个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*18]); //字符表第7个字}}//电for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x11); //横向第二个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*12]); //字符表第8个字}}//机for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x12); //横向第一个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*16]); //字符表第7个字}}//前for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x13); //横向第二个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*8]); //字符表第8个字}}//进}/***************显示电机停止******************/void Motor_Stop(){u8 x,y;u16 Cnt32;for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x10); //横向第一个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*18]); //字符表第7个字}}//电for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x11); //横向第二个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*12]); //字符表第8个字}}//机for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x12); //横向第一个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*2]); //字符表第7个字}}//停for(y0;y2;y){Write_IIC_Command((u8)(0XB0y)); //Write_IIC_Command(0x00);Write_IIC_Command(0x13); //横向第二个字for(x0;x16;x) //横向像素{Write_IIC_Data(show2[xy*16Cnt*3]); //字符表第8个字}}//止}/***************自动运行******************/void Auto_Run(){OUT_10; //前气缸进OUT_30; //后气缸进Cylinder_Forword();do{do{if(Cylinder_11) //前气缸未复位{key_reset();for(;kcounter10;) //输入端口循环5次{if(!KEY_1) //输入端口低电平{Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一}else if(~!KEY_1) //输入端口高电平{ //Key_Clear(); //按键计数器加一 状态标志归零}if(kstatus8) /*按键状态标志大于等于3为有效值*/{dis_Val(2);Cylinder_10;OUT_11; //关前气缸}}}//前气缸进停止if(Cylinder_21) //前气缸未复位{key_reset();for(;kcounter10;) //输入端口循环5次{if(!KEY_2) //输入端口低电平{Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一}else if(~!KEY_2) //输入端口高电平{ //Key_Clear(); //按键计数器加一 状态标志归零}if(kstatus8) /*按键状态标志大于等于3为有效值*/{dis_Val(3);Cylinder_20;OUT_31; //关后气缸}}}//后气缸进停止}while(Cylinder_1||Cylinder_2); // 循环dis_Val(4);Motor_Forword(); // 显示电机前进Motora_In11; // 电机前信号Motora_In20; // 电机前信号Motorb_In11; // 电机后信号Motorb_In20; // 电机后信号Motor_11; //Motor_21; //do{if(Motor_11){key_reset();for(;kcounter10;) //输入端口循环5次{if(!KEY_3) //输入端口低电平{Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一}else if(~!KEY_3) //输入端口高电平{ //Key_Clear(); //按键计数器加一 状态标志归零}if(kstatus8) /*按键状态标志大于等于3为有效值*/{dis_Val(5);Motor_10;Motora_In11; // 电机前信号Motora_In21; // 电机前信号}}}//前电机进停止if(Motor_21){key_reset();for(;kcounter10;) //输入端口循环5次{if(!KEY_4) //输入端口低电平{Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一}else if(~!KEY_4) //输入端口高电平{ //Key_Clear(); //按键计数器加一 状态标志归零}if(kstatus8) /*按键状态标志大于等于3为有效值*/{dis_Val(6);Motor_20;Motorb_In11; // 电机后信号Motorb_In21; // 电机后信号}}}//后电机进停止}while(Motor_1||Motor_2); //或循环dis_Val(7);Motor_Stop(); //显示电机停止delay_ms(200);dis_Val(8);Cylinder_Back(); //显示气缸后退OUT_20; //前气缸退OUT_40; //后气缸退delay_ms(200);key_reset();for(;kcounter10;) //输入端口循环5次{if(~!KEY_5) //输入端口低电平{Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一}else if(!KEY_5) //输入端口高电平{ //Key_Clear(); //按键计数器加一 状态标志归零}if(kstatus8) /*按键状态标志大于等于3为有效值*/{dis_Val(0); //退出自动循环Auto_Flag0;Diswait();}}}while(Auto_Flag);}/******************** 主函数 **************************/void main(void){IO_int();Initial_LY096BG30();cleardisp();Diswait();Counter0;dis_Val1(0X12); //第三行显示十进制数18while(1){//key_reset();for(;kcounter10;) //输入端口循环5次{if(!KEY_5) //输入端口低电平{Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一}else if(~!KEY_5) //输入端口高电平{ //Key_Clear(); //按键计数器加一 状态标志归零}if(kstatus8) /*按键状态标志大于等于3为有效值*/{dis_Val(1);Auto_Run(); //}}}}

相关文章:

STC8H8K32U工控板 电机正反转

本文摘要: 该代码实现了一个基于STC8H单片机的自动化控制系统,主要功能包括: 通过I2C接口驱动OLED显示屏,显示"气缸前进/后退"、"电机前进/停止"等状态信息 控制4路气缸(前/后气缸的进/退)和…...

从哈希表到链表:一次搞懂链地址法解决冲突的C++实现细节(含插入与删除操作避坑)

从哈希表到链表:链地址法的C实战精解与避坑指南 在数据结构的世界里,哈希表因其接近O(1)的理想查找效率而备受青睐。但当我们真正动手实现时,特别是采用链地址法解决冲突时,那些看似简单的链表操作却暗藏玄机。本文将带您深入链地…...

比迪丽SDXL模型GPU算力适配:A10/A100/V100/T4多卡实测报告

比迪丽SDXL模型GPU算力适配:A10/A100/V100/T4多卡实测报告 1. 引言 如果你玩过AI绘画,肯定遇到过这样的问题:同一个模型,为什么在别人的电脑上跑得飞快,在自己这儿却慢如蜗牛?生成一张图要等好几分钟&…...

GLM-4.1V-9B-Base企业实操:教育行业试卷图像内容解析落地案例

GLM-4.1V-9B-Base企业实操:教育行业试卷图像内容解析落地案例 1. 教育行业的痛点与解决方案 在教育行业,试卷批改和内容分析一直是耗时费力的工作。传统方式需要教师人工阅卷,不仅效率低下,还容易出现主观偏差。特别是在大规模考…...

Qwen3-0.6B-FP8在单片机开发中的启发:生成嵌入式C语言代码片段

Qwen3-0.6B-FP8在单片机开发中的启发:生成嵌入式C语言代码片段 1. 引言 如果你是一位单片机开发者,可能经常遇到这样的场景:面对一个新的外设模块,或者要实现一个不太熟悉的功能,第一反应就是去翻数据手册、找官方例…...

UNIT-00:Berserk Interface 在AI Agent开发中的应用:从规划、工具调用到记忆

UNIT-00:Berserk Interface 在AI Agent开发中的应用:从规划、工具调用到记忆 最近和几个做AI应用的朋友聊天,大家都有个共同的感受:现在的大模型能力确实强,但很多时候还是像个“一问一答”的聊天机器人。你想让它帮你…...

Windows高DPI缩放导致Qt界面崩了?手把手教你用‘高DIP缩放替代’快速修复

Windows高DPI缩放导致Qt界面崩溃?三步搞定“高DPI缩放替代”修复方案 最近几年4K显示器价格越来越亲民,很多用户都升级到了高分辨率屏幕。但随之而来的一个常见问题就是:一些老旧的Qt程序在高分屏上运行时,界面元素变得错乱不堪—…...

快速上手:CYBER-VISION零号协议Node.js后端服务集成指南

快速上手:CYBER-VISION零号协议Node.js后端服务集成指南 你是不是已经部署好了CYBER-VISION零号协议模型,看着那个命令行界面,心里琢磨着:“这玩意儿怎么才能接到我的Web应用里去?” 别急,这正是我们今天要…...

OpenClaw+Phi-3-vision-128k-instruct:自动化儿童教育素材生成

OpenClawPhi-3-vision-128k-instruct:自动化儿童教育素材生成 1. 为什么选择这个组合? 去年夏天,我女儿开始对恐龙产生浓厚兴趣,每天晚上都要我讲不同的恐龙故事。作为程序员父亲,我最初尝试手动编写故事&#xff0c…...

Pixel Aurora Engine应用场景:像素字体生成与游戏文本资源自动化生产

Pixel Aurora Engine应用场景:像素字体生成与游戏文本资源自动化生产 1. 像素艺术生成新纪元 在独立游戏开发领域,像素艺术始终保持着独特的魅力。传统像素画制作需要艺术家逐帧绘制,耗时耗力。Pixel Aurora Engine的出现,为游戏…...

丹青识画完整体验:铺卷、参详、点睛、获墨,四步感受AI艺术

丹青识画完整体验:铺卷、参详、点睛、获墨,四步感受AI艺术 1. 艺术与科技的完美邂逅 当人工智能遇上东方美学,会碰撞出怎样的火花?「丹青识画」智能影像雅鉴系统给出了令人惊艳的答案。这款融合深度学习技术与传统书画艺术的产品…...

【2026知网预警】不想论文被直接退稿?10款降AI工具实测红黑榜,带你避开90%的坑

说真的,现在写论文难,改论文更难。交稿前一查,心都凉半截。AI痕迹动不动就飘红,导师那边没法交代,系统检测也过不了关。为了找出靠谱的降AI法子,我也是折腾了好几天。 我把以下10个降AI工具一个个试过来了…...

Flux Sea Studio 海景摄影生成工具:LaTeX技术文档编写——生成高质量海景插图与科研论文配图实践

Flux Sea Studio 海景摄影生成工具:LaTeX技术文档编写——生成高质量海景插图与科研论文配图实践 写论文、编教材,最头疼的事情之一就是找配图。要么是找不到合适的,要么是找到了但版权不明晰,要么就是风格不统一,七拼…...

Zynq XADC测量电压从配置到换算:DRP接口实战与AXI4-Lite选择指南

Zynq XADC电压测量全解析:DRP与AXI4-Lite接口深度对比与实战指南 在嵌入式系统设计中,精确的模拟信号监测往往是实现智能控制的关键环节。Xilinx Zynq系列芯片内置的XADC(Xilinx Analog-to-Digital Converter)模块,为工…...

一键生成九宫格:用yz-bijini-cosplay快速制作社交媒体宣传素材

一键生成九宫格:用yz-bijini-cosplay快速制作社交媒体宣传素材 1. 项目简介:Cosplay内容创作新范式 在社交媒体运营中,视觉内容的重要性不言而喻。对于动漫展会、Cosplay摄影棚等内容创作者而言,如何快速产出高质量的九宫格宣传…...

Z-Image-Turbo_UI界面惊艳效果:多风格AI绘画作品真实分享

Z-Image-Turbo_UI界面惊艳效果:多风格AI绘画作品真实分享 1. 开篇:当AI绘画遇上专业级UI界面 想象一下,你只需要在浏览器中输入一个地址,就能拥有一个功能强大、操作简单的AI绘画工作室。这正是Z-Image-Turbo_UI界面带来的神奇体…...

清音刻墨Qwen3部署到使用:一条命令搭建,五分钟出成果

清音刻墨Qwen3部署到使用:一条命令搭建,五分钟出成果 1. 引言:重新定义字幕制作体验 在视频内容爆炸式增长的今天,字幕制作成为了许多创作者的心头之痛。传统的手动打字对时间轴不仅耗时耗力,而且很难达到专业级的精…...

Janus-Pro-7B惊艳效果:艺术风格迁移(梵高笔触/水墨晕染/像素风)精准控制

Janus-Pro-7B惊艳效果:艺术风格迁移(梵高笔触/水墨晕染/像素风)精准控制 1. 开篇:当AI遇见艺术,一场视觉革命正在发生 想象一下,你手头有一张普通的风景照片,但你想让它变成梵高笔下的星空&am…...

Qwen3-4B-Instruct-2507保姆级部署教程:3步免费玩转256K长文本AI

Qwen3-4B-Instruct-2507保姆级部署教程:3步免费玩转256K长文本AI 1. 引言:为什么选择Qwen3-4B-Instruct-2507 如果你正在寻找一个能处理超长文本的开源大模型,Qwen3-4B-Instruct-2507绝对值得关注。这个由阿里开源的40亿参数模型&#xff0…...

MinimalUltrasonic:超声波ToF测距库的极简主义实践

1. 项目概述MinimalUltrasonic 是一款专为嵌入式微控制器设计的极简主义超声波测距库,面向 Arduino 生态系统深度优化。其核心设计哲学是“以最小资源开销实现最大功能覆盖”,在保持接口简洁性的同时,提供工业级的鲁棒性、多单位支持与多传感…...

80%大模型落地成本优化:RAG缓存+量化压缩方案

80%大模型落地成本优化:RAG缓存量化压缩方案 随着大模型在企业级场景的落地加速,推理成本过高已成为制约规模化应用的核心痛点。据某云厂商公开数据,单条大模型API调用成本是传统NLP服务的5-10倍,而RAG(检索增强生成&a…...

阿里Live Avatar数字人:从部署到生成视频的完整流程

阿里Live Avatar数字人:从部署到生成视频的完整流程 1. 引言:认识Live Avatar数字人 Live Avatar是阿里巴巴联合高校开源的一款先进数字人视频生成模型。这个强大的工具可以将静态图片、音频和文字描述转化为生动的数字人视频,实现逼真的口…...

MacOS下Homebrew国内源配置全攻略:阿里、清华、中科大镜像一键切换

1. 为什么需要切换Homebrew国内镜像源? 如果你经常在MacOS上使用Homebrew安装软件,大概率遇到过下载速度慢到让人抓狂的情况。我刚开始用brew安装Python时,眼睁睁看着进度条像蜗牛爬行,一个200MB的包下了半小时还没完。后来才发现…...

StructBERT情感分类实战:基于Flask API构建企业级情绪分析微服务

StructBERT情感分类实战:基于Flask API构建企业级情绪分析微服务 1. 为什么你需要一个真正好用的情感分析服务 你有没有遇到过这些场景? 客服团队每天要读上千条用户反馈,却只能靠人工翻看关键词判断情绪; 电商运营想快速知道新…...

3天掌握Agent架构从设计到生产环境部署实战

3天掌握Agent架构从设计到生产环境部署实战 随着大语言模型技术的普及,单纯的模型调用已无法满足复杂业务场景的需求——企业需要能自主规划任务、调用工具、迭代执行的智能系统,Agent架构正是解决这一痛点的核心方案。本文将以3天为周期,从原…...

SOONet企业私有化部署:Kubernetes Helm Chart编排+PV持久化模型存储

SOONet企业私有化部署:Kubernetes Helm Chart编排PV持久化模型存储 1. 项目概述 SOONet(Scanning Only Once Network)是一款基于自然语言输入的长视频时序片段定位系统,能够通过单次网络前向计算精确定位视频中的相关片段。对于…...

nli-distilroberta-base部署教程:Docker镜像免配置运行DistilRoBERTa NLI API

nli-distilroberta-base部署教程:Docker镜像免配置运行DistilRoBERTa NLI API 1. 项目介绍 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务。它能帮你快速判断两个句子之间的关系,特别适合需要分析文本逻辑关系的应用场…...

OpenClaw故障排查:Qwen3.5-9B接口响应超时解决方案

OpenClaw故障排查:Qwen3.5-9B接口响应超时解决方案 1. 问题背景与现象描述 上周我在本地部署了Qwen3.5-9B-AWQ-4bit模型,并通过OpenClaw对接使用时,突然遭遇了接口响应超时问题。具体表现为:当发送包含长文本或图片base64编码的…...

Nunchaku-flux-1-dev在网络安全领域的应用:威胁检测与防御

Nunchaku-flux-1-dev在网络安全领域的应用:威胁检测与防御 1. 引言 网络安全问题越来越复杂,传统的防护手段常常力不从心。每天都有新的攻击手法出现,企业安全团队疲于应对。有没有一种更智能的方式,能够自动识别威胁、快速响应…...

【量子计算C++实战指南】:20年专家亲授,从零搭建Shor算法仿真器(含完整可运行代码)

第一章:量子计算与C编程的融合基础量子计算正从理论走向工程实践,而C凭借其零开销抽象、内存可控性与高性能特性,成为量子软件栈底层实现的关键语言。现代量子开发框架(如QPP、Q、XACC)普遍提供C原生API,使…...