单片机自动排列上料控制程序

/****L2233 CODE11549 2025 4 18 08:53*******/

/***轴承上料机控制 提升 摇摆 光电检测***/

/***2025 3 21 电机控制PCB板 PAST ***/

/*2.3 2.2 1.2 1.3 1.4 1.5 1.6 1.7 5.3 3.2 ***/

/*启动 解锁 光电 接近 前停 后停 电机前 电机后*/

#include "REG52.h" //

#include "intrins.h" //

#define FOSC 11059200L

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

#define IAP_ADDRESS 0x31FF //EEPROM首地址

#define IAP_ADDRESSS 0x33FF //EEPROM首地址

bit MOTORRUN_L; //电机正转标志

bit MOTORRUN_R; //电机反转标志

bit dis_Flag=0; //光电显示刷新标志

bit Key_Flag;

bit Photoele_Flag; //光电 标志

bit Switch_Flag; //开关闸 标志

bit Time_Flag; //

bit Run_Flag; //排列电机开启运行标志 开机后关闭 避免电机重复开启

uchar func; /*功能标志*/

bit Sign,adddecbit; /*功能设置运行标志 加减位标志01*/

sbit L_PWM=P1^7; //

sbit L_EN=P3^3; // 高电平使能 低电平关闭

sbit R_PWM=P3^0; //

sbit R_EN=P3^1; //

sbit OUT1=P3^6; //

sbit OUT2=P3^5; //

sbit LED=P3^4; //EEPROM写指示

sbit MOTORA_CW=P3^7; //上料电机

sbit MOTORB_CW=P2^1; //排列电机

sbit MOTORB_CCW=P2^0; //

sbit StartD1=P2^3; //启动自动

sbit INTPUTD2=P2^2; //光电输入信号

sbit INTPUT0=P1^2; //排列电机停机

sbit INTPUT1=P1^3; //电机前限位

sbit INTPUT2=P1^4; //电机后限位

sbit INTPUT3=P1^5; //

sbit INTPUT4=P1^6; //

sbit INTPUT5=P1^7; //

sbit INTPUT6=P5^4; //

sbit EXIT_0=P3^2; //

sbit Funkey=P1^0; //功能键

sbit Quitkey=P1^1;

sbit KEY_ADD=P2^6;

sbit KEY_DEC=P2^7;

bit Start_Flag;

uchar Valve_Time;

typedef uchar BYTE; //

typedef uint WORD; //

uchar RunTime_A; //上料延时

uchar RunTime_B; //光电延时

uchar RunTime_C; //停顿时间

uchar RunTime_D; //电机速度

uint RunTime_E; //运行频率

uchar Time_A; //

uchar Time_B; //

uchar RunTime; //

uchar vala,valb; //

uchar kcounter,kstatus; //按键计数标志 按键状态标志

bdata char com_data; /****暂用 ****/

WORD IAPEEPROMADD; //

#define CMD_IDLE 0 //空闲模式

#define CMD_READ 1 //IAP字节读命令

#define CMD_PROGRAM 2 //IAP字节编程命令

#define CMD_ERASE 3 //IAP扇区擦除命令

#define ENABLE_IAP 0x82 //if SYSCLK<20MHz

void IapIdle();

BYTE IapReadByte(WORD addr);

void IapProgramByte(WORD addr, BYTE dat);

void IapEraseSector(WORD addr);

uint total,A1,A2,A3; //输入文字总数 个位 十位 百位

#define high 1

#define low 0

bdata char com_data; /****暂用 ****/

uint total,A1,A2,A3; //输入文字总数 个位 十位 百位

#define high 1

#define low 0

bit RunFlag;

/***********************0--A字符表*************************/

unsigned char 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,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,/*"A",10*/

0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,/*"B",11*/

0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,/*"C",12*/

0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",13*/

0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,/*"E",14*/

0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,/*"F",15*/

};

uchar code show3[]=

{

0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"一",0*/

0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,

0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,/*"二",1*/

0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,

0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*"三",2*/

0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,

0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,/*"四",3*/

0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00,

0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00,/*"五",4*/

0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00,

0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00,/*"六",5*/

0x80,0x80,0x80,0x80,0x80,0x40,0xFF,0x40,0x40,0x40,0x20,0x20,0x20,0x20,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,/*"七",6*/

0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7E,0x80,0x00,0x00,0x00,0x00,0x00,

0x00,0x80,0x60,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x00,/*"八",7*/

0x00,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,

0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x78,0x00,/*"九",8*/

0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"十",9*/

};

uchar code show4[]=

{

0x00,0x20,0x20,0xA8,0x6C,0x2A,0x39,0x28,0xA8,0x2A,0x6C,0xA8,0x20,0x20,0x00,0x00,

0x02,0x82,0x81,0x90,0x92,0x4A,0x49,0x45,0x24,0x22,0x10,0x08,0x01,0x02,0x02,0x00,/*"参",0*/

0x90,0x52,0x34,0x10,0xFF,0x10,0x34,0x52,0x80,0x70,0x8F,0x08,0x08,0xF8,0x08,0x00,

0x82,0x9A,0x56,0x63,0x22,0x52,0x8E,0x00,0x80,0x40,0x33,0x0C,0x33,0x40,0x80,0x00,/*"数",1*/

0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9E,0x82,0x82,0x82,0x9E,0xA0,0x20,0x20,0x00,

0x00,0x00,0x00,0x3F,0x90,0x88,0x40,0x43,0x2C,0x10,0x28,0x46,0x41,0x80,0x80,0x00,/*"设",2*/

0x00,0x17,0x15,0xD5,0x55,0x57,0x55,0x7D,0x55,0x57,0x55,0xD5,0x15,0x17,0x00,0x00,

0x40,0x40,0x40,0x7F,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0x40,0x40,0x40,0x00,/*"置",3*/

0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,

0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"上",4*/

0x40,0x44,0x58,0xC0,0xFF,0x50,0x4C,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,

0x10,0x08,0x06,0x01,0xFF,0x01,0x06,0x00,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x00,/*"料",5*/

0x04,0x84,0xC4,0xB4,0x8C,0x00,0x00,0xE4,0x04,0x04,0xFE,0x42,0x43,0x42,0x00,0x00,

0x80,0x44,0x28,0x18,0x27,0x20,0x40,0x4F,0x48,0x48,0x4F,0x48,0x48,0x48,0x40,0x00,/*"延",6*/

0x00,0xFC,0x84,0x84,0x84,0xFC,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,

0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x01,0x06,0x40,0x80,0x7F,0x00,0x00,0x00,/*"时",7*/

0x20,0x30,0xAC,0x63,0x20,0x18,0x00,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x00,0x00,

0x22,0x67,0x22,0x12,0x12,0x12,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x00,/*"红",8*/

0x00,0xC0,0x30,0x1F,0x10,0x10,0xF0,0x00,0x00,0xFF,0x20,0x40,0x80,0x00,0x00,0x00,

0x81,0x40,0x21,0x12,0x0C,0x03,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x03,0x00,0x00,/*"外",9*/

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,/*"电",10*/

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,/*"机",11*/

0x40,0x40,0x42,0xCC,0x00,0x04,0xF4,0x94,0x94,0xFF,0x94,0x94,0xF4,0x04,0x00,0x00,

0x00,0x40,0x20,0x1F,0x20,0x48,0x44,0x42,0x41,0x5F,0x41,0x42,0x44,0x48,0x40,0x00,/*"速",12*/

0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,

0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,/*"度",13*/

0x40,0x40,0x42,0xCC,0x00,0x20,0x22,0x22,0xA2,0x62,0x22,0x22,0x22,0x20,0x00,0x00,

0x00,0x40,0x20,0x1F,0x20,0x44,0x4E,0x45,0x44,0x44,0x44,0x45,0x46,0x4C,0x40,0x00,/*"运",14*/

0x00,0x10,0x88,0xC4,0x33,0x00,0x40,0x42,0x42,0x42,0xC2,0x42,0x42,0x42,0x40,0x00,

0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,/*"行",15*/

0x40,0x7C,0x40,0x7F,0x48,0x48,0x40,0xF2,0x12,0x1A,0xD6,0x12,0x12,0xF2,0x02,0x00,

0x90,0x8E,0x40,0x4F,0x20,0x1E,0x80,0x4F,0x20,0x18,0x07,0x10,0x20,0x4F,0x80,0x00,/*"频",16*/

0x00,0x14,0xA4,0x44,0x24,0x34,0xAD,0x66,0x24,0x94,0x04,0x44,0xA4,0x14,0x00,0x00,

0x08,0x09,0x08,0x08,0x09,0x09,0x09,0xFE,0x09,0x09,0x0B,0x08,0x08,0x09,0x08,0x00,/*"率",0XFE17*/

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,/*"停",18*/

0x08,0xE8,0x08,0xFF,0x08,0xE8,0x08,0xF2,0x12,0x1A,0xD6,0x12,0x12,0xF2,0x02,0x00,

0x00,0x03,0x02,0x7F,0x22,0x13,0x80,0x4F,0x20,0x18,0x07,0x10,0x20,0x4F,0x80,0x00,/*"顿",19*/

0x00,0xFC,0x84,0x84,0x84,0xFC,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,

0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x01,0x06,0x40,0x80,0x7F,0x00,0x00,0x00,/*"时",20*/

0x00,0xF8,0x01,0x06,0x00,0xF0,0x12,0x12,0x12,0xF2,0x02,0x02,0x02,0xFE,0x00,0x00,

0x00,0xFF,0x00,0x00,0x00,0x1F,0x11,0x11,0x11,0x1F,0x00,0x40,0x80,0x7F,0x00,0x00,/*"间",21*/

0x10,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,

0x80,0x40,0x30,0x0F,0x40,0x80,0x7F,0x00,0x00,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00,/*"加",22*/

0x00,0x02,0x0C,0xC0,0x00,0xF8,0x08,0x48,0x48,0x48,0x08,0xFF,0x08,0x09,0x8A,0x00,

0x02,0x02,0x7F,0x80,0x40,0x3F,0x00,0x1E,0x92,0x5E,0x20,0x17,0x38,0x46,0xF1,0x00,/*"减",23*/

0x04,0x84,0xE4,0x5C,0x44,0xC4,0x20,0x10,0xE8,0x27,0x24,0xE4,0x34,0x2C,0xE0,0x00,

0x02,0x01,0x7F,0x10,0x10,0x3F,0x80,0x60,0x1F,0x09,0x09,0x3F,0x49,0x89,0x7F,0x00,/*"确",24*/

0x40,0x40,0x42,0xCC,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x3F,0x90,0x48,0x20,0x18,0x07,0x00,0x07,0x18,0x20,0x40,0x80,0x00,/*"认",25*/

0x40,0x40,0x42,0x44,0x58,0xC0,0x40,0x7F,0x40,0xC0,0x50,0x48,0x46,0x40,0x40,0x00,

0x80,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00,/*"光",26*/

0x00,0xFC,0x00,0x00,0xFF,0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0xFC,0x00,0x00,

0x00,0x87,0x40,0x30,0x0F,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00,/*"归",27*/

0x10,0x0C,0x05,0x55,0x55,0x55,0x85,0x7F,0x85,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,

0x04,0x04,0x02,0x0A,0x09,0x29,0x2A,0x4C,0x48,0xA9,0x19,0x02,0x02,0x04,0x04,0x00,/*"零",28*/

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,/*"待",29*/

0x10,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,

0x80,0x40,0x30,0x0F,0x40,0x80,0x7F,0x00,0x00,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00,/*"加",30*/

0x00,0x02,0x0C,0xC0,0x00,0xF8,0x08,0x48,0x48,0x48,0x08,0xFF,0x08,0x09,0x8A,0x00,

0x02,0x02,0x7F,0x80,0x40,0x3F,0x00,0x1E,0x92,0x5E,0x20,0x17,0x38,0x46,0xF1,0x00,/*"减",31*/

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,/*"退",32*/

0x00,0x00,0x7C,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,0x00,

0x00,0x7C,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,/*"出",33*/

0x00,0x02,0x02,0xF2,0x12,0x1A,0x16,0xD2,0x12,0x12,0x12,0xF2,0x02,0x02,0x00,0x00,

0x00,0x80,0x80,0x4F,0x40,0x20,0x18,0x07,0x08,0x10,0x20,0x4F,0x80,0x00,0x00,0x00,/*"页",34*/

0x02,0x02,0xE2,0x22,0x22,0xF2,0x2E,0x22,0x22,0xE2,0x22,0x22,0xE2,0x02,0x02,0x00,

0x00,0x00,0xFF,0x40,0x40,0x7F,0x49,0x49,0x49,0x7F,0x40,0x40,0xFF,0x00,0x00,0x00,/*"面",35*/

0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00,

0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,/*"开",36*/

0x00,0x00,0x10,0x11,0x16,0x10,0x10,0xF0,0x10,0x10,0x14,0x13,0x10,0x00,0x00,0x00,

0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x41,0x41,0x81,0x81,0x00,/*"关",37*/

0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xF2,0x12,0x1A,0xD6,0x12,0x12,0xF2,0x02,0x00,

0x00,0x20,0x40,0x3F,0x00,0x00,0x80,0x4F,0x20,0x18,0x07,0x10,0x20,0x4F,0x80,0x00,/*"顶",38*/

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,/*"进",39*/

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,/*"退",40*/

0x10,0x10,0x10,0xFF,0x90,0x08,0x88,0x88,0xFF,0x00,0x00,0xFF,0x88,0x88,0x08,0x00,

0x02,0x42,0x81,0x7F,0x00,0x08,0x08,0x08,0xFF,0x00,0x00,0xFF,0x08,0x08,0x08,0x00,/*"排",41*/

0x00,0x02,0xC2,0x32,0x1E,0x12,0x12,0xF2,0x02,0x00,0xF8,0x00,0x00,0xFF,0x00,0x00,

0x02,0x81,0x40,0x21,0x12,0x0C,0x03,0x00,0x00,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,/*"列",42*/

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,/*"气",43*/

0x00,0xF8,0x01,0x06,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,

0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,/*"门",44*/

0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,

0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"上",45*/

0x40,0x44,0x58,0xC0,0xFF,0x50,0x4C,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,

0x10,0x08,0x06,0x01,0xFF,0x01,0x06,0x00,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x00,/*"料",46*/

};

/*************Pin Define***************/

sbit OLED_SCL=P2^4; //16S

sbit OLED_SDA=P2^5; //16S

void Initial_LY096BG30();

void Delay_50ms(unsigned int Del_50ms);

void fill_picture(unsigned char fill_Data);

void IIC_Start();

void IIC_Stop();

void Write_IIC_Command(unsigned char IIC_Command);

void Write_IIC_Data(unsigned char IIC_Data);

bit Write_IIC_Byte(unsigned char IIC_Byte);

void dis_Value(uchar s);

/**************Delay*******************************/

void Delay_50ms(unsigned int Del_50ms) //

{

unsigned int m;

for(;Del_50ms>0;Del_50ms--)

for(m=62450;m>0;m--);

}

/*---------------延时子程序----------------*/

void Delay_us(uint us)

{

uint i;

for(i=0;i<us;i++)

;

}

/*---------------延时子程序----------------*/

void delay(uint ms)

{

uint i,j;

for(i=0;i<ms;i++)

for(j=0;j<200;j++)

;

}

/****************按键计数器状态寄存器归零*************/

void RstKey()

{

kcounter=0; //按键计数器归零

kstatus=0; //状态寄存器归零

}

/*****************按键低电平检测函数*****************/

void LowVoltKey(void) //按键计数器状态标志加一

{

kcounter++;

kstatus++;

}

/*****************按键高电平检测函数*****************/

void HighVoltKey(void) //按键计数器加一 状态标志归零

{

kcounter++; //按键计数器加一

kstatus=0; //按键状态标志归零

}

/*****************按键低电平检测函数*****************/

void LowRst(void) //按键计数器状态标志加一

{

kcounter++;

kstatus=0;

}

/*****************按键高电平检测函数*****************/

void HighSet(void) //按键计数器加一 状态标志归零

{

kcounter++; //按键计数器加一

kstatus++; //按键状态标志归零

}

/*******************IIC Start******************/

void IIC_Start()

{

OLED_SCL=high;

Delay_us(5);

OLED_SDA=high;

Delay_us(5);

OLED_SDA=low;

Delay_us(5);

OLED_SCL=low;

}

/*************IIC Stop*************************/

void IIC_Stop()

{

OLED_SDA=low;

Delay_us(5);

OLED_SCL=high;

Delay_us(5);

OLED_SDA=high;

}

/*****************IIC Write byte***************/

bit Write_IIC_Byte(unsigned char 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;

//Delay_us(1);

OLED_SCL=high;

Delay_us(5);

OLED_SCL=low;

//Delay_us(1);

IIC_Byte<<=1; //loop

}

OLED_SDA=high; //释放IIC SDA总线为主器件接收从器件产生应答信号

Delay_us(5);

OLED_SCL=high; //第9个时钟周期

Delay_us(5);

Ack_Bit=OLED_SDA; //读取应答信号

OLED_SCL=low;

return Ack_Bit;

}

/*************IIC Write Command*****************/

void Write_IIC_Command(unsigned char 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(uchar IIC_Data)

{

EA=0;

IIC_Start();

Write_IIC_Byte(0x78);

Write_IIC_Byte(0x40); //write data

Write_IIC_Byte(IIC_Data);

IIC_Stop();

EA=1;

}

/********************picture**********************/

void cleardisp()

{

unsigned char x,y;

for(y=0;y<8;y++)

{

Write_IIC_Command(0xb0+y);

Write_IIC_Command(0x00);

Write_IIC_Command(0x10);

for(x=0;x<128;x++) //横向像素

{

Write_IIC_Data(0X00);

}

}

}

/***********************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 Init_io()

{

P1M0=0X80; // Init 1.7

P1M1=0X00; //

P2M0=0X00; //

P2M1=0X00; //

P3M0=0X0B; // 3.3 3.1 3.0

P3M1=0X00; //

P5M0=0X00; //

P5M1=0X00; //

L_PWM=1; //脉冲频率

L_EN=1; //高电平使能 低电平关闭

R_PWM=1; //脉冲频率

R_EN=1; //高电平使能 低电平关闭

INTPUT1=1; //

INTPUT2=1; //

INTPUT3=1; //

MOTORA_CW=1; //链条电机

MOTORB_CW=1; //料斗电机

MOTORB_CCW=1; //

Photoele_Flag=0; //光电 标志

Switch_Flag=0; //开关闸 标志

func=0; //功能计数器归零

MOTORRUN_L=0; //电机正转标志

MOTORRUN_R=0; //电机反转标志

}

/*************关所有输出*******************************/

void Reset_io()

{

MOTORA_CW=1; //链条电机

MOTORB_CW=1; //料斗电机

MOTORB_CCW=1; //

OUT1=1; //

OUT2=1; //

}

/*----关闭IAP----------------------------*/

void IapIdle()

{

IAP_CONTR=0; //关闭IAP功能

IAP_CMD=0; //清除命令寄存器

IAP_TRIG=0; //清除触发寄存器

IAP_ADDRH=0x80; //将地址设置到非IAP区域

IAP_ADDRL=0;

}

/*-从ISP/IAP/EEPROM区域读取一字节-*/

BYTE IapReadByte(WORD addr)

{

BYTE dat; //数据缓冲区

IAP_CONTR=ENABLE_IAP; //使能IAP

IAP_CMD=CMD_READ; //设置IAP命令

IAP_ADDRL=addr; //设置IAP低地址

IAP_ADDRH=addr>>8; //设置IAP高地址

IAP_TRIG=0x5a; //写触发命令(0x5a)

IAP_TRIG=0xa5; //写触发命令(0xa5)

nop(); //等待ISP/IAP/EEPROM操作完成

dat=IAP_DATA; //读ISP/IAP/EEPROM数据

IapIdle(); //关闭IAP功能

return dat; //返回

}

/*-写一字节数据到ISP/IAP/EEPROM区域-*/

void IapProgramByte(WORD addr, BYTE dat)

{

IAP_CONTR=ENABLE_IAP; //使能IAP

IAP_CMD=CMD_PROGRAM; //设置IAP命令

IAP_ADDRL=addr; //设置IAP低地址

IAP_ADDRH=addr>>8; //设置IAP高地址

IAP_DATA=dat; //写ISP/IAP/EEPROM数据

IAP_TRIG=0x5a; //写触发命令(0x5a)

IAP_TRIG=0xa5; //写触发命令(0xa5)

nop(); //等待ISP/IAP/EEPROM操作完成

IapIdle();

}

/*---扇区擦除---------------*/

void IapEraseSector(WORD addr)

{

IAP_CONTR=ENABLE_IAP; //使能IAP val=IapReadByte(IAP_ADDRESS+1);

IAP_CMD=CMD_ERASE; //设置IAP命令

IAP_ADDRL=addr; //设置IAP低地址

IAP_ADDRH=addr>>8; //设置IAP高地址

IAP_TRIG=0x5a; //写触发命令(0x5a)

IAP_TRIG=0xa5; //写触发命令(0xa5)

nop(); //等待ISP/IAP/EEPROM操作完成

IapIdle();

}

/*-----------------------------------------*/

void red_eeprom(void)

{

RunTime_A=IapReadByte(IAP_ADDRESS); //上料延时

RunTime_B=IapReadByte(IAP_ADDRESS+1); //光电延时

RunTime_C=IapReadByte(IAP_ADDRESS+2); //停顿时间

RunTime_D=IapReadByte(IAP_ADDRESS+3); //电机速度

}

/***************************************/

void write_eeprom( )

{

IapEraseSector(IAP_ADDRESS); //扇区擦除

IapProgramByte(IAP_ADDRESS,RunTime_A); /**/

IapProgramByte(IAP_ADDRESS+1,RunTime_B);

IapProgramByte(IAP_ADDRESS+2,RunTime_C);

IapProgramByte(IAP_ADDRESS+3,RunTime_D);

}

/*-----------------------------------------*/

void red_eepromt(void)

{

uint j,k,s,p;

j=IapReadByte(IAP_ADDRESSS);//

k=IapReadByte(IAP_ADDRESSS+1);//

s=IapReadByte(IAP_ADDRESSS+2);//

p=IapReadByte(IAP_ADDRESSS+3);//

RunTime_E=j*1000+k*100+s*10+p;//

}

/***************************************/

void write_eepromt(uint dat)

{

uint j,k,s,p;

j=dat/1000;

k=(dat-j*1000)/100;

s=(dat-j*1000-k*100)/10;

p=dat-j*1000-k*100-s*10;

IapEraseSector(IAP_ADDRESSS); //扇区擦除

IapProgramByte(IAP_ADDRESSS+0,j); /**/

IapProgramByte(IAP_ADDRESSS+1,k); /**/

IapProgramByte(IAP_ADDRESSS+2,s); /**/

IapProgramByte(IAP_ADDRESSS+3,p); /**/

}

/***************显示上料电机延时计时*************/

void dis_Value(uchar s)

{

uchar x,y;

uint i=0;

A1=s/100;

A2=(s-A1*100)/10;

A3=s-A1*100-A2*10;

for(y=0;y<2;y++) //百位显示

{

Write_IIC_Command(0XB2+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X15); //横向第四个字

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]);

}

}

for(y=0;y<2;y++) //十位显示

{

Write_IIC_Command(0XB2+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X16); //横向第五个字

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+A3*16]);

}

}

}

/***************显示显示排列电机延时计时******************/

void dis_Val(uchar s)

{

uchar x,y;

uint i=0;

A1=s/100;

A2=(s-A1*100)/10;

A3=s-A1*100-A2*10;

for(y=0;y<2;y++) //百位显示

{

Write_IIC_Command(0XB4+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X15); //横向第四个字

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]);

}

}

for(y=0;y<2;y++) //十位显示

{

Write_IIC_Command(0XB4+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X16); //横向第五个字

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+A3*16]);

}

}

}

/*************设置参数值显示**************************/

void display(uchar s)

{

uchar x,y;

uint i=0;

A1=s/100;

A2=(s-A1*100)/10;

A3=s-A1*100-A2*10;

for(y=0;y<2;y++) //百位显示

{

Write_IIC_Command(0XB2+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X15); //横向第四个字

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]);

}

}

for(y=0;y<2;y++) //十位显示

{

Write_IIC_Command(0XB2+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X16); //横向第五个字

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+A3*16]);

}

}

}

/*************设置参数值显示测试**************************/

void distest(uchar s)

{

uchar x,y;

uint i=0;

uchar 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(0XB2+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X15); //横向第四个字

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]);

}

}

for(y=0;y<2;y++) //十位显示

{

Write_IIC_Command(0XB2+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X16); //横向第五个字

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+A3*16]);

}

}

}

/*************显示开机次数参数值******************/

void DisCouter(uint s)

{

uchar A1,A2,A3,A4;

uchar x,y;

uint i=0;

A1=s/1000;

A2=(s-A1*1000)/100;

A3=(s-A1*1000-A2*100)/10;

A4=s-A1*1000-A2*100-A3*10;

for(y=0;y<2;y++) //百位显示

{

Write_IIC_Command(0XB2+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X15); //横向第四个字

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]); //百位显示

}

}

for(y=0;y<2;y++)

{

Write_IIC_Command(0XB2+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X16); //横向第五个字

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+A3*16]); //十位位显示

}

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+A4*16]); //个位显示

}

}

}

/***************"清除状态显示******************/

void Clear_State()

{

uchar x,y;

uint Cnt=32;

//

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(0X00); //字符表第4个字

}

}

//

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(0X00); //字符表第4个字

}

}

}

/***************显示上料电机******************/

void DisLoaderMotor()

{

uchar x,y;

uint Cnt=32;

//上B2 1 4

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*45]); //字符表第4个字

}

}

//料B2 2 5

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*46]); //字符表第5个字

}

}

//电B2 3 10

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x12); //横向第三个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*10]); //字符表第10个字

}

}

//机B2 4 11

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x13); //横向第四个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*11]); //字符表第11个字

}

}

}

/***************显示排列电机******************/

void DisArrangeMotor()

{

uchar x,y;

uint Cnt=32;

//排B4 1 41

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb4+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*41]); //字符表第4个字

}

}

//列B4 2 42

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb4+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*42]); //字符表第1个字

}

}

//电B4 3 10

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb4+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x12); //横向第三个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*10]); //字符表第0个字

}

}

//机B4 4 11

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb4+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x13); //横向第四个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*11]); //字符表第1个字

}

}

}

/***************"上料电机"显示开******************/

void LoaderMotorOpen()

{

uchar x,y;

uint Cnt=32;

//开B2 17 36

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x17); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*36]); //字符表第4个字

}

}

}

/***************"上料电机"显示关******************/

void LoaderMotorClose()

{

uchar x,y;

uint Cnt=32;

//关B2 17 37

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x17); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*37]); //字符表第4个字

}

}

}

/***************"排列电机"显示开******************/

void ArrangeMotorOpen()

{

uchar x,y;

uint Cnt=32;

//开B2 17 36

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb4+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x17); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*36]); //字符表第4个字

}

}

}

/***************"排列电机"显示关******************/

void ArrangeMotorClose()

{

uchar x,y;

uint Cnt=32;

//关B2 17 37

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb4+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x17); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*37]); //字符表第4个字

}

}

}

/***************显示顶进******************/

void DisJacking()

{

uchar x,y;

uint Cnt=32;

//顶B0 12 38

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第三个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*38]); //字符表第0个字

}

}

//进B0 13 39

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第四个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*39]); //字符表第1个字

}

}

}

/***************显示顶退******************/

void DisRetreat()

{

uchar x,y;

uint Cnt=32;

//顶B0 16 38

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第三个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*38]); //字符表第0个字

}

}

//退B0 17 40

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第四个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*40]); //字符表第1个字

}

}

}

/*************显示参数设置加减设置退出*********************/

void DisSetData()

{

uchar x,y;

uint Cnt=32;

//参B0 12 00

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第三个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*0]); //字符表第0个字

}

}

//数B0 13 01

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x12); //横向第四个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*1]); //字符表第1个字

}

}

//设B0 14 02

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x13); //横向第五个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*2]); //字符表第2个字

}

}

//置B0 15 03

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行 机

Write_IIC_Command(0x00);

Write_IIC_Command(0x14); //横向第六个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*3]); //字符表第3个字

}

}

//加B0 15 03

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb6+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第五个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*30]); //字符表第2个字

}

}

//减B0 15 03

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb6+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x12); //横向第五个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*31]); //字符表第2个字

}

}

//设B0 14 02

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb6+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x14); //横向第五个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*2]); //字符表第2个字

}

}

//置B0 15 03

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb6+y); //竖向第一行 机

Write_IIC_Command(0x00);

Write_IIC_Command(0x15); //横向第六个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*3]); //字符表第3个字

}

}

//退B0 14 02

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb6+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x16); //横向第五个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*32]); //字符表第2个字

}

}

//出B0 15 03

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb6+y); //竖向第一行 机

Write_IIC_Command(0x00);

Write_IIC_Command(0x17); //横向第六个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*33]); //字符表第3个字

}

}

//页B4 14 34

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb4+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第五个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*34]); //字符表第2个字

}

}

//面B4 15 35

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb4+y); //竖向第一行 机

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第六个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*35]); //字符表第3个字

}

}

}

/********************显示参数设置编号**********************/

void DisNumber(uchar Number)

{

uchar x,y;

uint Cnt=32;

//参B0 12 00

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x16); //横向第三个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show3[x+y*16+Cnt*Number]); //字符表第Number个字

}

}

}

/**************显示参数设置编号数据*********************/

void Dis_Num(uchar Number)

{

uchar x,y;

uint i=0;

A1=Number/100;

A2=(Number-A1*100)/10;

A3=Number-A1*100-A2*10;

for(y=0;y<2;y++) //百位显示

{

Write_IIC_Command(0XB4+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X13); //横向第四个字

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]);

}

}

for(y=0;y<2;y++) //十位显示

{

Write_IIC_Command(0XB4+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X14); //横向第五个字

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+A3*16]);

}

}

}

/********************显示停顿时间**********************/

void DisStopData()

{

uchar x,y;

uint Cnt=32;

//停

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*18]); //字符表第18个字

}

}

//顿

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*19]); //字符表第19个字

}

}

//时

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x12); //横向第三个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*20]); //字符表第20个字

}

}

//间

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行 机

Write_IIC_Command(0x00);

Write_IIC_Command(0x13); //横向第四个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*21]); //字符表第21个字

}

}

}

/********************显示电机速度**********************/

void DisMotorSpeed()

{

uchar x,y;

uint Cnt=32;

//电

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*10]); //字符表第18个字

}

}

//机

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*11]); //字符表第19个字

}

}

//速

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行

Write_IIC_Command(0x00);

Write_IIC_Command(0x12); //横向第三个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*12]); //字符表第20个字

}

}

//度

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第二行 机

Write_IIC_Command(0x00);

Write_IIC_Command(0x13); //横向第四个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*13]); //字符表第21个字

}

}

}

/************上料延时*****/

void Infrared_delay() //photoelectricity

{

uchar x,y;

uint Cnt=32;

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行 上

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*4]); //字符表第7个字

}

}

//

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行 料

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*5]); //字符表第8个字

}

}

//

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行 延

Write_IIC_Command(0x00);

Write_IIC_Command(0x12); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*6]); //字符表第8个字

}

}

//

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行 时

Write_IIC_Command(0x00);

Write_IIC_Command(0x13); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*7]); //字符表第8个字

}

}

}

/************光电延时*****/

void photoelectricity_delay()

{

uchar x,y;

uint Cnt=32;

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*26]); //字符表第7个字

}

}

//光

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*10]); //字符表第8个字

}

}

//电

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x12); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*6]); //字符表第8个字

}

}

//延

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行 进

Write_IIC_Command(0x00);

Write_IIC_Command(0x13); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*7]); //字符表第8个字

}

}

//时

}

/********************显示待机**********************/

void Diswait()

{

uchar x,y;

uint Cnt=32;

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行 待

Write_IIC_Command(0x00);

Write_IIC_Command(0x16); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*29]); //字符表第7个字

}

}

//

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行 机

Write_IIC_Command(0x00);

Write_IIC_Command(0x17); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*11]); //字符表第8个字

}

}

}

/********************显示运行**********************/

void DisDoon()

{

uchar x,y;

uint Cnt=32;

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb6+y); //竖向第一行 运

Write_IIC_Command(0x00);

Write_IIC_Command(0x16); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*14]); //字符表第7个字

}

}

//

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb6+y); //竖向第一行 行

Write_IIC_Command(0x00);

Write_IIC_Command(0x17); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*15]); //字符表第8个字

}

}

}

/********************显示上料**********************/

void DisWork()

{

uchar x,y;

uint Cnt=32;

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行 上

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*45]); //字符表第7个字

}

}

//

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行 料

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第二个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*46]); //字符表第8个字

}

}

}

/***************上料时间参数显示******************/

void dis_timea(uchar s)

{

uchar x,y;

uint i=0;

A1=s/100;

A2=(s-A1*100)/10;

A3=s-A1*100-A2*10;

for(y=0;y<2;y++) //百位显示

{

Write_IIC_Command(0XB2+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X15); //横向第四个字

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]);

}

}

for(y=0;y<2;y++) //十位显示

{

Write_IIC_Command(0XB2+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X16); //横向第五个字

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+A3*16]);

}

}

}

/***************设置参数显示******************/

void dis_timeb(uchar s)

{

uchar x,y;

uint i=0;

A1=s/100;

A2=(s-A1*100)/10;

A3=s-A1*100-A2*10;

for(y=0;y<2;y++) //百位显示

{

Write_IIC_Command(0XB4+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X15); //横向第四个字

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]);

}

}

for(y=0;y<2;y++) //十位显示

{

Write_IIC_Command(0XB4+y); //纵向页

Write_IIC_Command(00); //横向离左部边缘开始的距离

Write_IIC_Command(0X16); //横向第五个字

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+A3*16]);

}

}

}

/***************显示参数归零******************/

void csgl()

{

uchar x,y;

uint Cnt=32;

//参B0 12 00

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第三个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*0]); //字符表第0个字

}

}

//数B0 13 01

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x12); //横向第四个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*1]); //字符表第1个字

}

}

//归B0 14 02

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x13); //横向第五个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*27]); //字符表第2个字

}

}

//零B0 15 03

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行 机

Write_IIC_Command(0x00);

Write_IIC_Command(0x14); //横向第六个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*28]); //字符表第3个字

}

}

}

/***************显示运行频率******************/

void DisRunSpeed()

{

uchar x,y;

uint Cnt=32;

//运B0 12 00

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第三个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*14]); //字符表第0个字

}

}

//行B0 13 01

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第四个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*15]); //字符表第1个字

}

}

//频B0 14 02

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行

Write_IIC_Command(0x00);

Write_IIC_Command(0x12); //横向第五个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*16]); //字符表第2个字

}

}

//率B0 15 03

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行 机

Write_IIC_Command(0x00);

Write_IIC_Command(0x13); //横向第六个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show4[x+y*16+Cnt*17]); //字符表第3个字

}

}

}

/*----------功能判断子程序------------*/

void function(uchar FuncData)

{

uchar func;

func=FuncData;

Dis_Num(func);

display(func); //临时测试

if(func==1) //功能设置循环置为1

{

Initial_LY096BG30(); //初始化显示屏

Infrared_delay(); //上料延时

DisNumber(0); //功能编号

distest(RunTime_A);

}

if(func==2) //功能设置循环置为2

{

Initial_LY096BG30(); //初始化显示屏

photoelectricity_delay(); //光电延时

DisNumber(1); //功能编号

distest(RunTime_B);

// xscssz();

}

if(func==3) //功能设置循环置为3

{

Initial_LY096BG30(); //初始化显示屏

DisStopData(); //停顿时间

DisNumber(2); //功能编号

distest(RunTime_C);

}

if(func==4) //功能设置循环置为4

{

Initial_LY096BG30(); //初始化显示屏

DisMotorSpeed(); //电机速度

DisNumber(3); //功能编号

distest(RunTime_D);

}

if(func==5) //功能设置循环置为4

{

Initial_LY096BG30(); //初始化显示屏

DisRunSpeed(); //运行频率

DisCouter(RunTime_E); //

DisNumber(4); //功能编号

display(RunTime_E);

//运行频率

}

}

/*----------参数加-----------------*/

void DataOn( ) /*写数据B子函数*/

{ /*子函数开始*/

valb=valb+1; /**加一**/

if(valb>999)

valb=0; /*大于999归零*/

} /*子函数结束*/

/*----------参数减---------------*/

void DataDown( ) /*写数据B子函数*/

{ /*子函数开始*/

valb=valb-1; /**加一**/

if(valb==0)

valb=999; /*大于999归零*/

} //

/*-----------加减按键处理子程序------*/

void addfunt(int funtt,bit adddec) //功能编号 加减标志

{

int fun;

bit adddecb;

fun=funtt;

adddecb=adddec;

switch(fun)

{ //

case 1: //上升结束延时加

if(adddecb)

{

valb=RunTime_A; //数据交上升结束延时加函数子程序处理

DataOn(); //加函数 display()函数处理lmn

RunTime_A=valb; //处理数据交上升结束延时 存储器

distest(RunTime_A); //参数显示 分离lmn百十个位数据

write_eeprom();

}

else

{ //减

valb=RunTime_A; //数据交上升结束延时减函数子程序处理

DataDown(); //减函数 display()函数处理lmn

RunTime_A=valb; //处理数据交上升结束延时 存储器

distest(RunTime_A); //参数显示 分离lmn百十个位数据

write_eeprom();

}break;

case 2: //下降时间加

if(adddecb)

{

valb=RunTime_B; //数据交下降时间加函数子程序处理

DataOn(); //加函数 display()函数处理lmn

RunTime_B=valb; //处理数据交下降时间 存储器

distest(RunTime_B); //参数显示 分离lmn百十个位数据

write_eeprom();

}

else

{ //下降时间减

valb=RunTime_B; //数据交减函数子程序处理

DataDown(); //减函数 display()函数处理lmn

RunTime_B=valb; //处理数据交下降时间 存储器

distest(RunTime_B); //参数显示 分离lmn百十个位数据

write_eeprom();

}break;

case 3:

if(adddecb)

{ //下降停留时间加

valb=RunTime_C; //数据交加函数子程序处理

DataOn(); //加函数 display()函数处理lmn

RunTime_C=valb; //处理数据交下降停留时间 存储器

distest(RunTime_C); //参数显示 分离lmn百十个位数据

write_eeprom();

// write3(); //写EEPROM lmn百十个位数据

}

else

{ //下降停留时间减

valb=RunTime_C; //数据交减函数子程序处理

DataDown(); //减函数 display()函数处理lmn

RunTime_C=valb; //处理数据交下降停留时间 存储器

distest(RunTime_C); //参数显示 分离lmn百十个位数据

write_eeprom();

}break;

case 4:

if(adddecb)

{ //开模时间加

valb=RunTime_D; //数据交加函数子程序处理

DataOn(); //加函数 display()函数处理lmn

RunTime_D=valb; //处理数据交开模时间存储器

distest(RunTime_D); //参数显示 分离lmn百十个位数据

write_eeprom();

}

else

{ //开模时间减

valb=RunTime_D; //数据交减函数子程序处理

DataDown(); //减函数 display()函数处理lmn

RunTime_D=valb; //处理数据交开模时间存储器

distest(RunTime_D); //参数显示 分离lmn百十个位数据

write_eeprom();

} break;

case 5:

if(adddecb)

{ //开模时间加

RunTime_A=0X10; //上料延时

RunTime_B=0X20; //光电延时

RunTime_C=0X30; //停顿时间

RunTime_D=0X05; //电机速度

RunTime_E=0;

write_eeprom();

write_eepromt(RunTime_E);

DisCouter(RunTime_E); //

csgl();

}

else

{

RunTime_A=0X10; //上料延时

RunTime_B=0X20; //光电延时

RunTime_C=0X30; //停顿时间

RunTime_D=0X05; //电机速度

RunTime_E=0;

write_eeprom();

write_eepromt(RunTime_E);

DisCouter(RunTime_E); //

csgl();

}

break;

default :break;

}

}

/*************功能设置函数**************/

/*****功能,加减键设定各界面参数*********/

/************** **************/

void funset()

{

while(func) //进入功能设置流程

{

DisSetData(); //显示参数设置加减设置退出

if(func==0) //功能计数器为0返回主程序

break; //功能标志大于等于6功能计数器归零

if(!KEY_ADD) //检测按键加

{ //数据处理

Delay_50ms(2); //延时等待

adddecbit=1; //加减处理标志置1

addfunt(func,adddecbit); //调用加减处理功能子函数 func界面号adddecbit加减标志

}

if(!KEY_DEC) //检测按键减

{ //数据处理

Delay_50ms(2); //延时等待

adddecbit=0; //加减处理标志置0

addfunt(func,adddecbit); //调用加减处理功能子函数 func界面号adddecbit加减标志

}

if(!Funkey) //再检测功能键

{

func++; //功能标志加一

Delay_50ms(2); //延时等待

Dis_Num(func);

if(func>=6) //功能标志大于等于6归0

{

func=0; //功能计数器归零

Initial_LY096BG30(); //初始化显示屏

} //

function(func); //刷新功能显示界面

}

// 退出检测

RstKey();

for(;kcounter<5;) //按键循环5次

if(!Quitkey) //按键低电平

{

LowVoltKey(); //按键低电平 清除计数器

}

else if(~!Quitkey) //按键高电平

{

HighVoltKey(); //按键计数器加一 状态计数器加一

}

if(kstatus>=3) /*按键状态标志大于等于3为有效值*/

{

func=0;

cleardisp();

}

// Delay_50ms(1); //延时等待

// ClearSetData();

// Delay_50ms(1); //延时等待

}

cleardisp();

Diswait();

Delay_50ms(5);

}

/*****************************/

void MOTORLRUN() //顶进

{

do

{

RstKey(); //按键复位

for(;kcounter<5;) //按键循环5次

{

if(!INTPUT1) //按键低电平

{

LowVoltKey();

}

else if(~!INTPUT1) //按键高电平

{

HighVoltKey();

}

}

if(kstatus>=4) /*按键状态标志大于等于3为有效值*/

{ /*循环检测 */

MOTORRUN_L=0;

}

}

while(MOTORRUN_L);

}

/*****************************/

void MOTORRRUN() //顶退

{

do

{

RstKey(); //按键复位

for(;kcounter<5;) //按键循环5次

{

if(!INTPUT2) //按键低电平

{

LowVoltKey();

}

else if(~!INTPUT2) //按键高电平

{

HighVoltKey();

}

}

if(kstatus>=4) /*按键状态标志大于等于3为有效值*/

{ /*循环检测 */

MOTORRUN_R=0;

}

}

while(MOTORRUN_R);

}

//自动运行

void AutoRun()

{

/***************检测料满停机信号*********************/

//低电平开始计时 到设定值料满停机

do

{ //定时器检测INTPUTD2

// 高电平 允许开摇摆电机

RstKey(); //

for(;kcounter<5;) //按键循环5次

{

if(!EXIT_0) //P3.2按键低电平

{

LowRst(); //按键低电平 清除计数器

}

else if(~!EXIT_0) //按键高电平

{

HighSet(); //按键计数器加一 状态计数器加一

}

}

if(kstatus>=3) /*按键状态标志大于等于3为有效值*/

{

Time_A=0;

Switch_Flag=0; //定时器计时标志

OUT1=1; //放料闸门关

if(Photoele_Flag==0) //光电上料允许

{

MOTORA_CW=0; //上料电机开

MOTORB_CW=0; //排列电机开启

}

}

/******外中断0检测到中断信号 置位Switch_Flag=1***/

/***************检测上料信号*计时到电机停止******/

if(Switch_Flag==1) /*按键状态标志大于等于3为有效值*/

{ //Switch_Flag=1;

LoaderMotorClose(); //"上料电机"显示关

DisWork(); //显示上料

MOTORA_CW=1; //上料电机停止

OUT1=0; //放料闸门开 计时到闸门关闭

for(Time_A=0;Time_A<RunTime_A;Time_A++)

{ //循环延时设定时间值

dis_timea(Time_A); //显示上料时间

Delay_50ms(5); //延时

}

Clear_State(); //清除第一行状态显示

Switch_Flag=0; //上料信号标志复位

MOTORA_CW=0; //上料电机开启

LoaderMotorOpen(); //"上料电机"显示开

OUT1=1;

}

if(dis_Flag==1) //定时器2读到一次低电平 刷新显示

{

dis_Flag=0;

dis_timeb(Time_B);

}

/***************光电低电平定时器计数 主程序显示时间******/

// Photoele_Flag=1 检测光电开关信号 高电平开排列电机 上料电机

if(Photoele_Flag==1)//光电 链条传输 运行关闭态 开摇摆电机

{

LoaderMotorClose(); //"上料电机"显示关

ArrangeMotorClose(); //"排列电机"显示关

MOTORA_CW=1; //上料电机关闭

MOTORB_CW=1; //排列电机关闭

MOTORB_CCW=1; //备用

Delay_50ms(50); //

RstKey(); //满料光电检测

for(;kcounter<10;) //按键循环5次

{

if(!INTPUTD2) //按键低电平

{

LowRst(); //

}

else if(~!INTPUTD2) //按键高电平

{

HighSet(); //

}

}

if(kstatus>=8) /*按键状态标志大于等于3为有效值*/

{ /*循环检测 */

Delay_50ms(10); //

MOTORA_CW=0; //上料电机开

MOTORB_CW=0; //排列电机开

LoaderMotorOpen(); //"上料电机"显示开

ArrangeMotorOpen(); //"排列电机"显示开

Photoele_Flag=0; //定时器中断计时标志 计时到电机停止

} //Clearkey

} //

//光电高电平 重启运行

RstKey(); //拍列电机到位

for(;kcounter<5;) //按键循环5次

{

if(!INTPUT0) //按键低电平

{

LowVoltKey(); //按键低电平 清除计数器

}

else if(~!INTPUT0) //按键高电平

{

HighVoltKey(); //按键计数器加一 状态计数器加一

}

}

if(kstatus>=3) /*按键状态标志大于等于3为有效值*/

{

L_EN=1;

R_EN=1;

DisJacking(); //显示顶进

MOTORRUN_L=1; //电机正转标志

MOTORLRUN(); //顶进

L_EN=1;

R_EN=1;

DisRetreat(); //显示顶退

MOTORRUN_R=1; //电机反转标志

MOTORRRUN(); //顶退

L_EN=0;

R_EN=0;

DisRetreat(); //清除显示

Clear_State(); //清除第一行状态显示

}

//检测直流电机

RstKey(); //

for(;kcounter<5;) //按键循环5次

{

if(!Quitkey) //按键低电平

{

LowVoltKey(); //按键低电平 清除计数器

}

else if(~!Quitkey) //按键高电平

{

HighVoltKey(); //按键计数器加一 状态计数器加一

}

}

if(kstatus>=3) /*按键状态标志大于等于3为有效值*/

{

Reset_io(); //关闭输出

RunFlag=0; //自动运行循环标志

cleardisp(); //清除显示

Diswait(); //显示待机

}

//退出自动检测

}

while(RunFlag); //

}

/**************定时中断*************************/

void timer0() interrupt 1

{

uchar aa;

aa++; //定时基数变量

if(aa>=200) //定时周期

{

aa=0; //定时基数归零

} //Photoele_Flag=1

//光电停机计时

if(Switch_Flag==1) //外中断0 开闸计时标志

{

Time_A++; //定时器计时开闸时间

if(Time_A>=RunTime_A) //计数器到开闸设定值

{

Time_A=0; //计数器归零

Switch_Flag=0; //开闸计时标志归零

}

}

//开闸计时

}

/*************P3.2下降沿中断**链条上料***********/

void exint0() interrupt 0 //INT0中断入口

{ //

RstKey();

for(;kcounter<5;) //按键循环5次

{

if(!EXIT_0) //P3.2按键低电平

{

LowVoltKey(); //按键低电平 计数器加一状态标志加一

}

else if(~!EXIT_0) //按键高电平

{

HighVoltKey(); //按键计数器加一 状态标志归零

}

}

if(kstatus>=3) /*按键状态标志大于等于3为有效值*/

{

Switch_Flag=1; //定时器计时标志

} //自动运行函数上料电机停止

}

//========================================================================

// 函数: void Timer0_Init(void)

// 描述: 定时器0初始化函数。

// 参数: none.

// 返回: none.

// 版本: VER1.0

// 日期: 2022-6-2

// 备注:

//========================================================================

void Timer_Init(void)

{

AUXR=0X80; //STC系列的1T 设置

TMOD=0X01; //

TL0=0X32;

TH0=0X53;

ET0=1;

TR0=1;

AUXR|=0x04; //定时器2为1T模式 12MHZ

T2L=0X90; //设置定时初值

T2H=0XE8; //设置定时初值

AUXR|=0X10; //定时器2开始计时

IE2|=0x04; //开定时器2中断

}

/*定时器2扩展外部普通IO中断****************/

/*P2.2低电平开计数器高电平关计数器*/

/******/

void t2int() interrupt 12 //中断入口

{

uint CT0,CT1,CT2,CT3; //

uchar aa;

aa++; //定时基数变量

if(aa>=100) //定时周期

{

aa=0; //定时基数归零

//计时标志为0 检测低电平信号

if(Photoele_Flag==0) //满料光电检测

{

if(!INTPUTD2) //按键低电平 INTPUTD2 P2.2口

{

Time_B++; //计数满清零

dis_Flag=1; //计数器刷新显示标志

if(Time_B>=RunTime_B) //Auto_Run Time_B++

{

Photoele_Flag=1; //定时器中断计时标志 计时到电机停止

Time_B=0; //计数满清零

}

} //高电平计数器归零

else if(~!INTPUTD2) //按键低电平 INTPUT3 P3.3口

{

Time_B=0; //计数满清零

}

}

}

//

if(MOTORRUN_L==1)

{

CT2++;

if(CT2>=2)

{

CT2 = 0;

CT0++;

if(CT0>=50)

{

L_PWM = 1; //

}

else

{

L_PWM = 0;

}

if(CT0>=100)

{

CT0 = 0;

}

}

}

//

if(MOTORRUN_R==1)

{

CT3++;

if(CT3>=2)

{

CT3 = 0;

CT1++;

if(CT1>=50) //RunTime_D

{

R_PWM = 1; //

}

else

{

R_PWM = 0;

}

if(CT1>=100)

{

CT1 = 0;

}

}

}

//

}

/******************** 主函数 **************************/

void main(void)

{

// P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能

func=0;

RunFlag=0; //自动运行循环标志

LED=0;

total=0;

IT0=1; //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)

EX0=1; //使能INT0中断

EA=1;

Init_io();

Initial_LY096BG30();

cleardisp();

red_eeprom();

red_eepromt();

RunTime_E++;

write_eepromt(RunTime_E);

if(RunTime_E>1000)

{

RunTime_E=0; //计数值清除

write_eepromt(RunTime_E);

DisCouter(RunTime_E);

}

Timer_Init(); //定时器0初始化

dis_Flag=0; //光电显示刷新标志

Run_Flag=0; //自动运行标志

Photoele_Flag=0; //光电低电平计时标志 定时器1读IO口

Valve_Time=0;

cleardisp();

DisNumber(2);

Diswait(); //

Delay_50ms(50);

while(1)

{

// OUT2=~OUT2; //

Delay_50ms(5);

cleardisp();

Diswait(); //

RstKey();

for(;kcounter<10;) //按键循环5次

{

if(!Funkey) //按键低电平

{

LowVoltKey();

delay(50); //延时

}

else if(~!Funkey) //按键高电平

{

HighVoltKey();

delay(50); //延时

}

}

if(kstatus>=8) /*按键状态标志大于等于3为有效值*/

{ /*循环检测 */

Initial_LY096BG30(); //初始化显示屏

func+=1; // 功能循环标志

cleardisp();

DisSetData();

function(func); // 功能判断子程序 功能设置散转

funset(); //进入功能设置界面

} //Clearkey

///

//功能键

RstKey();

for(;kcounter<5;) //按键循环5次

{

if(!StartD1) //按键低电平

{

LowVoltKey(); //按键低电平 清除计数器

}

else if(~!StartD1) //按键高电平

{

HighVoltKey(); //按键计数器加一 状态计数器加一

}

}

if(kstatus>=3) /*按键状态标志大于等于3为有效值*/

{

cleardisp();

DisDoon(); //显示运行

DisLoaderMotor(); //上料电机

Delay_50ms(5);

DisArrangeMotor(); //排列电机

Delay_50ms(5);

dis_Value(Time_A);

dis_Val(Time_B);

Delay_50ms(10);

LoaderMotorOpen();

ArrangeMotorOpen();

RunFlag=1; //自动运行循环标志

AutoRun(); //自动运行子程序

}

} //参数设置 EEPROM储存

} //L2233 CODE11549 2025 4 18

相关推荐
Ruannn(努力版)3 小时前
嵌入式GPIO 实验(流水灯程序,八段数码管显示程序)
单片机·嵌入式硬件
技术干货贩卖机4 小时前
0基础 | Proteus电路仿真 | 电机使用
单片机·嵌入式硬件·proteus·代码·0基础·proteus 仿真
美好的事情总会发生4 小时前
冯诺依曼结构与哈佛架构深度解析
嵌入式硬件·硬件工程·智能硬件
KingQian201813 小时前
单片机嵌入式按键库
单片机·嵌入式硬件·嵌入式微库
许有杨14 小时前
STM32的定时器
stm32·单片机·嵌入式硬件
时光の尘15 小时前
FreeRTOS菜鸟入门(十)·消息队列
c语言·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式实时数据库
mftang17 小时前
解析MCUboot的实现原理和Image结构
嵌入式硬件
hallo-ooo17 小时前
【STM32】定时器
stm32·单片机
二块烧肉19 小时前
STM32 IIC总线
stm32·单片机·嵌入式硬件