草稿
/****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