单片机自动排列上料控制程序
/****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