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

/****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(show1x+y\*8+A1\*16); //0--A字符表

}

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

{

Write_IIC_Data(show1x+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(show1x+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(show1x+y\*8+A1\*16); //0--A字符表

}

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

{

Write_IIC_Data(show1x+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(show1x+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(show1x+y\*8+A1\*16); //0--A字符表

}

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

{

Write_IIC_Data(show1x+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(show1x+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(show1x+y\*8+A1\*16); //0--A字符表

}

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

{

Write_IIC_Data(show1x+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(show1x+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(show1x+y\*8+A1\*16); //千位显示 0--A字符表

}

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

{

Write_IIC_Data(show1x+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(show1x+y\*8+A3\*16); //十位位显示

}

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

{

Write_IIC_Data(show1x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show3x+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(show1x+y\*8+A1\*16); //0--A字符表

}

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

{

Write_IIC_Data(show1x+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(show1x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show1x+y\*8+A1\*16); //0--A字符表

}

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

{

Write_IIC_Data(show1x+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(show1x+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(show1x+y\*8+A1\*16); //0--A字符表

}

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

{

Write_IIC_Data(show1x+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(show1x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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(show4x+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

相关推荐
Zhao1368245539139 分钟前
DP4330A 与DP4363 测试对比
嵌入式硬件
辛迪聊物业数字化44 分钟前
智慧社区小程序落地避坑指南:3类物业方案选型+成本测算,线上服务零翻车
大数据·嵌入式硬件·百度·系统架构
电子科技圈1 小时前
Arm电机控制开发工具哪家强?
arm开发·单片机·嵌入式硬件·设计模式·软件构建
JasmineX-11 小时前
下位机直接控制57步进电机匀速转动
stm32·单片机·嵌入式硬件
聆思科技AI芯片2 小时前
【AI硬件开发上手教程】怎么使用AI编程实现小聆AI语音控制舵机
人工智能·嵌入式硬件·开源·ai编程·智能硬件
abc light2 小时前
ARM 裸机开发(6)——时钟树与定时器
arm开发·单片机·fpga开发
吠品12 小时前
智谱开源 ZCode 之后,真正的考试才开始
单片机·嵌入式硬件·1024程序员节
Chery114013 小时前
高速ADC与精密DAC怎么选?DP9230D与DP8532D应用解析
嵌入式硬件·物联网·射频工程
小李不想当小白16 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米16 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip