PLC脉冲位置 单片机跟踪读取记录显示

草稿

/****L789 CODE 3453 2025 2 12*******/

/***电子齿轮比脉冲输入累计***/

#include "reg52.h" //取字库代码显示界面

#include "intrins.h" //连续EEPROM地址写FM24C64文字

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

#define IAP_ADDRESS 0x0000 //EEPROM首地址

uint Count_1; //脉冲计数

uint Count_2; //脉冲计数

uint Count_A; //位置

uint Count_B; //位置

uint RunTime_A; //齿轮比设定值

uint RunTime_B; //齿轮比设定值

sbit INTPUT0=P3^5; //方向

sbit INTPUT1=P3^4; //方向

sbit INTPUT2=P3^2; //中断0

sbit INTPUT3=P3^3; //中断1

sbit Run_On=P3^1; //指示

sbit KEY_ADD=P5^4; //X轴电子齿轮比值加

sbit KEY_DEC=P1^6; //X轴电子齿轮比值减

sbit Counter_ADD=P5^5; //Y轴电子齿轮比值加

sbit Counter_DEC=P1^7; //Y轴电子齿轮比值减

bit disa_Flag; //显示更新标志

bit disb_Flag; //显示更新标志

typedef uchar BYTE; //

typedef uint WORD; //

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

#define IAP_ADDRESS 0x0000 //EEPROM首地址

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

#define high 1

#define low 0

/***********************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 show2[]=

{

0x10,0x10,0xD0,0xFF,0x90,0x10,0x20,0xA4,0xBF,0xA4,0xE4,0xA4,0xBF,0xA4,0x20,0x00,

0x04,0x03,0x00,0xFF,0x00,0x03,0x80,0x4F,0x2A,0x0A,0x0F,0x0A,0x2A,0x4F,0x80,0x00,/*"横",0*/

0x00,0xFE,0x00,0x00,0xFF,0x00,0x86,0x8A,0x52,0x22,0x52,0x4A,0x86,0x80,0x00,0x00,

0x40,0x40,0x44,0x44,0x55,0x64,0x45,0x46,0x44,0x64,0x54,0x44,0x44,0x40,0x40,0x00,/*"竖",1*/

0x40,0x40,0x40,0x7C,0x40,0x40,0x40,0x7F,0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00,

0x00,0x00,0x7F,0x40,0x50,0x48,0x44,0x43,0x44,0x48,0x50,0x40,0xFF,0x00,0x00,0x00,/*"齿",2*/

0xC8,0xB8,0x8F,0xE8,0x88,0xC8,0x20,0x90,0x0C,0x03,0x0C,0x90,0x20,0x40,0x40,0x00,

0x08,0x18,0x08,0xFF,0x04,0x04,0x00,0x3F,0x44,0x42,0x41,0x40,0x40,0x70,0x00,0x00,/*"轮",3*/

0x00,0x00,0xFE,0x40,0x40,0x40,0x40,0x00,0xFF,0x80,0x40,0x20,0x10,0x08,0x00,0x00,

0x00,0x00,0x7F,0x20,0x20,0x10,0x10,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x78,0x00,/*"比",4*/

};

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

sbit OLED_SCL=P1^1; //16S

sbit OLED_SDA=P1^0; //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 delay1 (uint ms)

{

uint i,j;

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

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

;

}

/*----关闭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)

{

uint datah,datal;

datal=IapReadByte(IAP_ADDRESS);//

datah=IapReadByte(IAP_ADDRESS+1);

RunTime_A=datal+(datah<<8);

datal=IapReadByte(IAP_ADDRESS+2);//

datah=IapReadByte(IAP_ADDRESS+3);

RunTime_B=datal+(datah<<8);

}

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

void write_eeprom( )

{

uint datah,datal;

datal=RunTime_A;

datah=RunTime_A>>8;

IapEraseSector(IAP_ADDRESS); //扇区擦除

// IapProgramByte(IAP_ADDRESS,datal); /**/

// IapProgramByte(IAP_ADDRESS+1,datah);

datal=RunTime_B;

datah=RunTime_B>>8;

// IapProgramByte(IAP_ADDRESS+2,datal);

// IapProgramByte(IAP_ADDRESS+3,datah);

}

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

void RstKey()

{

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

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

}

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

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

{

kcounter++;

kstatus++;

}

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

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

{

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

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

}

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

void IIC_Start()

{

OLED_SCL=high;

//Delay_us(1);

OLED_SDA=high;

nop();

OLED_SDA=low;

nop();nop();

OLED_SCL=low;

}

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

void IIC_Stop()

{

OLED_SDA=low;

nop();

OLED_SCL=high;

nop();nop();

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;

nop();nop();

OLED_SCL=low;

//Delay_us(1);

IIC_Byte<<=1; //loop

}

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

nop();nop();

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

nop();nop();

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)

{

IIC_Start();

Write_IIC_Byte(0x78);

Write_IIC_Byte(0x40); //write data

Write_IIC_Byte(IIC_Data);

IIC_Stop();

}

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

void cleardisp()

{

uchar 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 dis_Valuea(uint s)

{

uchar x,y;

uint i=0;

A0=s/1000;

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

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

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

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

{

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

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

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

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

{

Write_IIC_Data(show1[x+y*8+A0*16]); //0--A字符表

}

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

{

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

}

}

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

{

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

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

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

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

{

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

}

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

{

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

}

}

}

/***************竖向电子齿轮比例******************/

void dis_Valueb(uint s)

{

uchar x,y;

uint i=0;

A0=s/1000;

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

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

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

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

{

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

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

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

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

{

Write_IIC_Data(show1[x+y*8+A0*16]); //0--A字符表

}

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

{

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

}

}

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+A2*16]);

}

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

{

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

}

}

}

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

void reset_io()

{

P1M0=0X00; //

P1M1=0X00; //

P3M0=0X00; //

P3M1=0X00; //

P5M0=0X00; //

P5M1=0X00; //

INTPUT0=1; //

INTPUT1=1; //

INTPUT2=1; //

INTPUT3=1; //

}

/************gear ratio齿轮传动比*****/

void Gear_ratioA()

{

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(show2[x+y*16+Cnt*0]); //字符表第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(show2[x+y*16+Cnt*2]); //字符表第8个字

}

}

//

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(show2[x+y*16+Cnt*3]); //字符表第8个字

}

}

//

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(show2[x+y*16+Cnt*4]); //字符表第8个字

}

}

}

/************gear ratio齿轮传动比*****/

void Gear_ratioB()

{

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(show2[x+y*16+Cnt*1]); //字符表第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(show2[x+y*16+Cnt*2]); //字符表第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(show2[x+y*16+Cnt*3]); //字符表第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(show2[x+y*16+Cnt*4]); //字符表第8个字

}

}

}

/***************中断1计数显示******************/

void dis_timea(uchar s)

{

uchar x,y;

uint i=0;

A0=s/1000;

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

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

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

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

{

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

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

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

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

{

Write_IIC_Data(show1[x+y*8+A0*16]); //0--A字符表

}

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

{

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

}

}

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

{

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

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

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

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

{

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

}

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

{

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

}

}

}

/***************中断1计数显示******************/

void dis_timeb(uchar s)

{

uchar x,y;

uint i=0;

A0=s/1000;

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

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

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

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

{

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

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

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

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

{

Write_IIC_Data(show1[x+y*8+A0*16]); //0--A字符表

}

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

{

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

}

}

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

{

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

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

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

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

{

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

}

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

{

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

}

}

}

/**************定时中断*************************/

void timer0() interrupt 1

{

uchar aa;

aa++;

if(aa>=20)

{

// LED=~LED;

aa=0;

if(Count_1>=RunTime_A) //

{

Count_1=0;

Count_A++;

disa_Flag=1;

}

if(Count_2>=RunTime_B) //RunTime_B

{

Count_2=0;

Count_B++;

disb_Flag=1;

}

} //Photoele_Flag=1

}

/*************P3.2下降沿中断**********************************/

void exint0() interrupt 0 //INT0中断入口

{

RstKey();

Run_On=!Run_On; //指示灯取反

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

{

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

{

LowVoltKey(); //按键低电平 计数器加一状态标志加一

}

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

{

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

}

}

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

{

if(!INTPUT1) //方向低电平

{

Count_1++; //加计数

}

else

{ //方向高电平

if(Count_1==0)

{

Count_1=RunTime_A-1; //脉冲数等于设置值减一

Count_A-=1; //位置减一

disa_Flag=1; //显示标志置一

}

else

{

Count_1--; //脉冲累加器减计数

}

}

}

}

/*************P3.3下降沿中断**********************************/

void exint1() interrupt 2 //INT1中断入口

{

RstKey();

Run_On=!Run_On; //指示灯取反

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

{

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

{

LowVoltKey(); //按键低电平 计数器加一状态标志加一

}

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

{

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

}

}

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

{

if(!INTPUT0) //方向低电平

{

Count_2++; //加计数

}

else

{ //方向高电平

if(Count_2==0) //

{

Count_2=RunTime_B-1; //脉冲数等于设置值减一

Count_B-=1; //位置减一

disb_Flag=1; //显示标志置一

}

else

{

Count_2--; //减计数

}

}

}

}

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

void main(void) //

{

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

cleardisp();

TL0=0x00; //设置定时初始值

TH0=0x28; //设置定时初始值

ET0=1;

TF0=1; //清除TF0标志

TR0=1; //定时器0开始计时

IT0=1; //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)

EX0=1; //使能INT0中断

IT1=1; //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)

EX1=1; //使能INT1中断

reset_io(); //

EA=1; //

Delay_50ms(2); //

red_eeprom(); //

Gear_ratioA(); //X轴齿轮比

Gear_ratioB(); //XY轴齿轮比

dis_Valuea(RunTime_A); //显示

dis_Valueb(RunTime_B); //显示

while(1)

{

定时器设置值加

RstKey();

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

{

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

{

LowVoltKey(); //按键低电平 计数器加一状态标志加一

}

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

{ //

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

}

}

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

{

RunTime_A++;

if(RunTime_A>9999)

RunTime_A=0;

write_eeprom();

dis_Valuea(RunTime_A);

delay1(60);

}

定时器设置值减

RstKey();

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

{

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

{

LowVoltKey(); //按键低电平 计数器加一状态标志加一

}

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

{

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

}

}

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

{

RunTime_A--;

if(RunTime_A<1)

RunTime_A=9999;

write_eeprom();

dis_Valuea(RunTime_A);

delay1(60);

}

计数器设置值加

RstKey();

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

{

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

{

LowVoltKey(); //按键低电平 计数器加一状态标志加一

}

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

{ //

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

}

}

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

{

RunTime_B++;

if(RunTime_B>9999)

RunTime_B=0;

write_eeprom();

dis_Valueb(RunTime_B);

delay1(60);

}

计数器设置值减

RstKey();

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

{

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

{

LowVoltKey(); //按键低电平 计数器加一状态标志加一

}

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

{

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

}

}

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

{

RunTime_B--;

if(RunTime_B<1)

RunTime_B=9999;

write_eeprom();

dis_Valueb(RunTime_B);

delay1(60);

}

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

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

if(disa_Flag==1)

{

disa_Flag=0;

// dis_timea(Count_A);

}

if(disb_Flag==1)

{

disb_Flag=0;

// dis_timeb(Count_B);

}

}

} //L789 CODE 3453 2025 2 12

相关推荐
我不想当小卡拉米3 分钟前
【Linux】操作系统入门:冯诺依曼体系结构
linux·开发语言·网络·c++
teacher伟大光荣且正确10 分钟前
Qt Creator 配置 Android 编译环境
android·开发语言·qt
炎芯随笔11 分钟前
【C++】【设计模式】生产者-消费者模型
开发语言·c++·设计模式
乌鸦94432 分钟前
《类和对象(下)》
开发语言·c++·类和对象+
炒空心菜菜42 分钟前
SparkSQL 连接 MySQL 并添加新数据:实战指南
大数据·开发语言·数据库·后端·mysql·spark
多多*1 小时前
算法竞赛相关 Java 二分模版
java·开发语言·数据结构·数据库·sql·算法·oracle
前进的程序员1 小时前
嵌入式开发中 C++ 跨平台开发经验与解决方案
开发语言·c++
乌夷1 小时前
axios结合AbortController取消文件上传
开发语言·前端·javascript
神仙别闹2 小时前
基于C#+MySQL实现(WinForm)企业设备使用信息管理系统
开发语言·mysql·c#