发表于:2026/4/7 8:18:20
#0楼
/******************************************/
#include "stc8h.h" //包含此头文件后,不需要再包含"reg51.h"头文件
#include "stdio.h"
#include "intrins.h"
#define high 1
#define low 0
#define OPEN 1
#define OFF 0
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
sbit OLED_SCL=P2^7; //
sbit OLED_SDA=P2^6; //
sbit OUT_A=P6^0; //
sbit OUT_B=P6^1; //
sbit OUT_C=P6^2; //
sbit OUT_D=P6^3; //
sbit Motora_Ina1=P1^0; // 电机前信号
sbit Motora_Ina2=P1^1; // 电机前信号
sbit Motorb_Ina1=P1^4; // 电机后信号
sbit Motorb_Ina2=P1^5; // 电机后信号
sbit INT_1=P3^2; // 自动启动
sbit INT_2=P3^3; // 开模信号
sbit INT_3=P3^4; // 机械手到位
sbit INT_4=P3^5; // 气缸前到位
sbit INT_5=P3^6; // 气缸后到位
sbit INT_6=P3^7; // 气缸前退停
sbit INT_7=P4^1; // 气缸后退停
sbit INT_8=P4^2; // 电机前到位
sbit INT_9=P4^3; // 电机后到位
sbit INT_10=P4^4; // 电机前退停
sbit INT_11=P2^0; // 电机后退停
sbit INT_12=P2^1; // 手动气缸进
sbit INT_13=P2^2; // 手动气缸退
sbit INT_14=P2^3; // 手动电机进
sbit INT_15=P2^4; // 手动电机退
sbit INT_16=P2^5; //
//输入信号
sbit OUT_1=P0^6; // 气缸前进
sbit OUT_2=P0^4; // 气缸前退
sbit OUT_3=P0^3; // 气缸后进
sbit OUT_4=P0^2; // 气缸后退
sbit OUT_5=P0^1; //
sbit OUT_6=P0^0; //
sbit OUT_7=P4^6; // 警报
sbit OUT_8=P4^5; // 动作完成
//输出信号
sbit KEY_1=P1^7; //
sbit KEY_2=P1^6; //
sbit KEY_3=P1^3; //
sbit KEY_4=P5^4; //
sbit KEY_5=P4^0; //
sbit KEY_6=P4^7; //
sbit KEY_7=P0^5; //
sbit KEY_8=P0^7; //
//按键
u8 Counter; //步进计数器
u8 kcounter,kstatus; //按键计数标志 按键状态标志
#define MAIN_Fosc 24000000UL
u8 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,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x1F,0x01,0x01,0x01,0x01,0x1F,0x00,/*"A",10*/
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",11*/
0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00,/*"W",12*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,/*"O",13*/
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,/*"N",14*/
};
u8 code show2[]=
{
0x08,0x08,0x08,0x08,0x88,0x78,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
0x20,0x10,0x48,0x46,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00,/*"左",0*/
0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
0x08,0x04,0x02,0x01,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00,0x00,/*"右",1*/
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,/*"停",2*/
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"止",3*/
0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x45,0x46,0x44,0x44,0x44,0x44,0x7C,0x00,0x00,
0x40,0x20,0x18,0x07,0x00,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFC,0x00,0x00,/*"启",4*/
0x40,0x44,0xC4,0x44,0x44,0x44,0x40,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00,
0x10,0x3C,0x13,0x10,0x14,0xB8,0x40,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00,/*"动",5*/
0x00,0x04,0x84,0x84,0x94,0xE4,0x85,0x86,0x84,0xC4,0xB4,0x84,0x84,0x84,0x80,0x00,
0x80,0x60,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"产",6*/
0x20,0x20,0x20,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x20,0x20,0x20,0x00,
0x00,0x80,0x80,0xAF,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAF,0x80,0x80,0x00,0x00,/*"量",7*/
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,/*"进",8*/
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,/*"退",9*/
0x00,0x00,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x00,
0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,/*"刀",10*/
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,/*"待",11*/
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,/*"机",12*/
};
//==========================================================================
void delay_ms(u8 ms)
{
u16 i;
do
{
i=MAIN_Fosc/1000;
while(--i);
}
while(--ms);
}
/************按键计数器状态寄存器归零************/
void key_reset()
{
kcounter=0; //计数器归零
kstatus=0; //状态计数器归零
}
/************按键计数器状态寄存器加一************/
void Key_ValAdd()
{
kcounter++; //按键计数器加一
kstatus++; //按键状态标志加一
}
/***********按键计数器加一状态寄存器归零*********/
void Key_Clear()
{
kcounter++; //按键计数器加一
kstatus=0; //按键状态标志归零
}
/*************Pin Define***************/
void Oled_delay(u16 ms)
{
u16 i,j;
for(i=0;i<ms;i++)
for(j=0;j<20;j++);
}
/*************Pin Define***************/
void Initial_LY096BG30();
void Delay_50ms(u16 Del_50ms);
void fill_picture(u8 fill_Data);
void IIC_Start();
void IIC_Stop();
void Write_IIC_Command(u8 IIC_Command);
void Write_IIC_Data(u8 IIC_Data);
bit Write_IIC_Byte(u8 IIC_Byte);
/*******************IIC Start******************/
void IIC_Start()
{
OLED_SCL=high;
Oled_delay(2);
OLED_SDA=high;
Oled_delay(2);
OLED_SDA=low;
Oled_delay(2);
OLED_SCL=low;
}
/*************IIC Stop*************************/
void IIC_Stop()
{
OLED_SDA=low;
Oled_delay(2);
OLED_SCL=high;
Oled_delay(2);
OLED_SDA=high;
}
/*****************IIC Write byte***************/
bit Write_IIC_Byte(u8 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;
OLED_SCL=high;
Oled_delay(2);
OLED_SCL=low;
IIC_Byte<<=1; //loop
}
OLED_SDA=high; //释放IIC SDA总线为主器件接收从器件产生应答信号
Oled_delay(2);
OLED_SCL=high; //第9个时钟周期
Oled_delay(2);
Ack_Bit=OLED_SDA; //读取应答信号
OLED_SCL=low;
return Ack_Bit;
}
/*************IIC Write Command*****************/
void Write_IIC_Command(u8 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(u8 IIC_Data)
{
IIC_Start();
Write_IIC_Byte(0x78);
Write_IIC_Byte(0x40); //write data
Write_IIC_Byte(IIC_Data);
IIC_Stop();
}
/***********************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_Val1(u8 s)
{
u8 x,y;
u16 i=0;
u8 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((u8)(0XB4+y)); //纵向页 1011
Write_IIC_Command(0X00); //横向离左部边缘开始的距离
Write_IIC_Command(0X10); //横向第四个字
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]);
Oled_delay(2);
}
}
for(y=0;y<2;y++) //十位显示
{
Write_IIC_Command((u8)(0XB4+y)); //纵向页
Write_IIC_Command(0X00); //横向离左部边缘开始的距离
Write_IIC_Command(0X11); //横向第五个字
for(x=0;x<8;x++) //横向像素
{
Write_IIC_Data(show1[x+y*8+A3*16]);
Oled_delay(2);
}
}
}
/********************显示待机**********************/
void Diswait()
{
u8 x,y;
u16 Cnt=32;
for(y=0;y<2;y++)
{
Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 待
Write_IIC_Command(0x00);
Write_IIC_Command(0x10); //横向第一个字
for(x=0;x<16;x++) //横向像素
{
Write_IIC_Data(show2[x+y*16+Cnt*11]); //字符表第7个字
}
}
//
for(y=0;y<2;y++)
{
Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 机
Write_IIC_Command(0x00);
Write_IIC_Command(0x11); //横向第二个字
for(x=0;x<16;x++) //横向像素
{
Write_IIC_Data(show2[x+y*16+Cnt*12]); //字符表第8个字
}
}
}
/********************IO_rst**********************/
void IO_int()
{
P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能
P0M1 = 0x00; P0M0 = 0x00; //设置为推挽输出
P1M1 = 0x00; P1M0 = 0x00; //设置为准双向口
P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口
P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
}
/********************picture**********************/
void cleardisp()
{
u8 x,y;
for(y=0;y<8;y++)
{
Write_IIC_Command((u8)(0xb0+y));
Write_IIC_Command(0x00);
Write_IIC_Command(0x10);
for(x=0;x<128;x++) //横向像素
{
Write_IIC_Data(0X00);
}
}
}
/***************显示计数器值******************/
void dis_Val(u8 s)
{
u8 x,y;
u16 i=0;
u8 A1,A2;
A1=s/10;
A2=s-A1*10;
for(y=0;y<2;y++) //百位显示
{
Write_IIC_Command((u8)(0XB2+y)); //纵向页 1011
Write_IIC_Command(0X00); //横向离左部边缘开始的距离
Write_IIC_Command(0X10); //横向第四个字
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]); //0--A字符表
}
}
delay_ms(150); //延时
}
/******************** 主函数 **************************/
void main(void)
{
IO_int();
Initial_LY096BG30();
cleardisp();
Diswait();
Counter=0;
dis_Val1(0X12); //第三行显示十进制数18
while(1)
{
//
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_1) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_1) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(1);
}
}
//按键1
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_2) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_2) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(2);
}
}
//按键2
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_3) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_3) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(3);
}
}
//按键3
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_4) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_4) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(4);
}
}
//按键4
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_5) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_5) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(5);
}
}
//按键5
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_6) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_6) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(6);
}
}
//按键6
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_7) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_7) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(7);
}
}
//按键7
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_8) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_8) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(8);
}
}
//按键8 INT_1
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_1) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_1) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(10);
}
}
//输入1
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_2) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_2) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(11);
}
}
//按键2
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_3) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_3) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(12);
}
}
//输入3
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_4) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_4) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(13);
}
}
//输入4
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_5) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_5) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(14);
}
}
//输入5
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_6) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_6) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(15);
}
}
//输入6
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_7) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_7) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(16);
}
}
//输入7
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_8) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_8) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(17);
}
}
//输入8
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_9) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_9) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(18);
}
}
//输入9
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_10) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_10) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(19);
}
}
//输入10
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_11) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_11) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(20);
}
}
//输入11
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_12) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_12) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(21);
}
}
//输入12
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_13) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_13) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(22);
}
}
//输入13
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_14) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_14) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(23);
}
}
//输入14
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_15) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_15) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(24);
}
}
//输入15
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_16) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_16) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(25);
}
}
//输入16
}
}
#include "stc8h.h" //包含此头文件后,不需要再包含"reg51.h"头文件
#include "stdio.h"
#include "intrins.h"
#define high 1
#define low 0
#define OPEN 1
#define OFF 0
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
sbit OLED_SCL=P2^7; //
sbit OLED_SDA=P2^6; //
sbit OUT_A=P6^0; //
sbit OUT_B=P6^1; //
sbit OUT_C=P6^2; //
sbit OUT_D=P6^3; //
sbit Motora_Ina1=P1^0; // 电机前信号
sbit Motora_Ina2=P1^1; // 电机前信号
sbit Motorb_Ina1=P1^4; // 电机后信号
sbit Motorb_Ina2=P1^5; // 电机后信号
sbit INT_1=P3^2; // 自动启动
sbit INT_2=P3^3; // 开模信号
sbit INT_3=P3^4; // 机械手到位
sbit INT_4=P3^5; // 气缸前到位
sbit INT_5=P3^6; // 气缸后到位
sbit INT_6=P3^7; // 气缸前退停
sbit INT_7=P4^1; // 气缸后退停
sbit INT_8=P4^2; // 电机前到位
sbit INT_9=P4^3; // 电机后到位
sbit INT_10=P4^4; // 电机前退停
sbit INT_11=P2^0; // 电机后退停
sbit INT_12=P2^1; // 手动气缸进
sbit INT_13=P2^2; // 手动气缸退
sbit INT_14=P2^3; // 手动电机进
sbit INT_15=P2^4; // 手动电机退
sbit INT_16=P2^5; //
//输入信号
sbit OUT_1=P0^6; // 气缸前进
sbit OUT_2=P0^4; // 气缸前退
sbit OUT_3=P0^3; // 气缸后进
sbit OUT_4=P0^2; // 气缸后退
sbit OUT_5=P0^1; //
sbit OUT_6=P0^0; //
sbit OUT_7=P4^6; // 警报
sbit OUT_8=P4^5; // 动作完成
//输出信号
sbit KEY_1=P1^7; //
sbit KEY_2=P1^6; //
sbit KEY_3=P1^3; //
sbit KEY_4=P5^4; //
sbit KEY_5=P4^0; //
sbit KEY_6=P4^7; //
sbit KEY_7=P0^5; //
sbit KEY_8=P0^7; //
//按键
u8 Counter; //步进计数器
u8 kcounter,kstatus; //按键计数标志 按键状态标志
#define MAIN_Fosc 24000000UL
u8 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,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x1F,0x01,0x01,0x01,0x01,0x1F,0x00,/*"A",10*/
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",11*/
0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00,/*"W",12*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,/*"O",13*/
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,/*"N",14*/
};
u8 code show2[]=
{
0x08,0x08,0x08,0x08,0x88,0x78,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
0x20,0x10,0x48,0x46,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00,/*"左",0*/
0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
0x08,0x04,0x02,0x01,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00,0x00,/*"右",1*/
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,/*"停",2*/
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"止",3*/
0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x45,0x46,0x44,0x44,0x44,0x44,0x7C,0x00,0x00,
0x40,0x20,0x18,0x07,0x00,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFC,0x00,0x00,/*"启",4*/
0x40,0x44,0xC4,0x44,0x44,0x44,0x40,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00,
0x10,0x3C,0x13,0x10,0x14,0xB8,0x40,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00,/*"动",5*/
0x00,0x04,0x84,0x84,0x94,0xE4,0x85,0x86,0x84,0xC4,0xB4,0x84,0x84,0x84,0x80,0x00,
0x80,0x60,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"产",6*/
0x20,0x20,0x20,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x20,0x20,0x20,0x00,
0x00,0x80,0x80,0xAF,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAF,0x80,0x80,0x00,0x00,/*"量",7*/
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,/*"进",8*/
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,/*"退",9*/
0x00,0x00,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x00,
0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,/*"刀",10*/
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,/*"待",11*/
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,/*"机",12*/
};
//==========================================================================
void delay_ms(u8 ms)
{
u16 i;
do
{
i=MAIN_Fosc/1000;
while(--i);
}
while(--ms);
}
/************按键计数器状态寄存器归零************/
void key_reset()
{
kcounter=0; //计数器归零
kstatus=0; //状态计数器归零
}
/************按键计数器状态寄存器加一************/
void Key_ValAdd()
{
kcounter++; //按键计数器加一
kstatus++; //按键状态标志加一
}
/***********按键计数器加一状态寄存器归零*********/
void Key_Clear()
{
kcounter++; //按键计数器加一
kstatus=0; //按键状态标志归零
}
/*************Pin Define***************/
void Oled_delay(u16 ms)
{
u16 i,j;
for(i=0;i<ms;i++)
for(j=0;j<20;j++);
}
/*************Pin Define***************/
void Initial_LY096BG30();
void Delay_50ms(u16 Del_50ms);
void fill_picture(u8 fill_Data);
void IIC_Start();
void IIC_Stop();
void Write_IIC_Command(u8 IIC_Command);
void Write_IIC_Data(u8 IIC_Data);
bit Write_IIC_Byte(u8 IIC_Byte);
/*******************IIC Start******************/
void IIC_Start()
{
OLED_SCL=high;
Oled_delay(2);
OLED_SDA=high;
Oled_delay(2);
OLED_SDA=low;
Oled_delay(2);
OLED_SCL=low;
}
/*************IIC Stop*************************/
void IIC_Stop()
{
OLED_SDA=low;
Oled_delay(2);
OLED_SCL=high;
Oled_delay(2);
OLED_SDA=high;
}
/*****************IIC Write byte***************/
bit Write_IIC_Byte(u8 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;
OLED_SCL=high;
Oled_delay(2);
OLED_SCL=low;
IIC_Byte<<=1; //loop
}
OLED_SDA=high; //释放IIC SDA总线为主器件接收从器件产生应答信号
Oled_delay(2);
OLED_SCL=high; //第9个时钟周期
Oled_delay(2);
Ack_Bit=OLED_SDA; //读取应答信号
OLED_SCL=low;
return Ack_Bit;
}
/*************IIC Write Command*****************/
void Write_IIC_Command(u8 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(u8 IIC_Data)
{
IIC_Start();
Write_IIC_Byte(0x78);
Write_IIC_Byte(0x40); //write data
Write_IIC_Byte(IIC_Data);
IIC_Stop();
}
/***********************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_Val1(u8 s)
{
u8 x,y;
u16 i=0;
u8 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((u8)(0XB4+y)); //纵向页 1011
Write_IIC_Command(0X00); //横向离左部边缘开始的距离
Write_IIC_Command(0X10); //横向第四个字
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]);
Oled_delay(2);
}
}
for(y=0;y<2;y++) //十位显示
{
Write_IIC_Command((u8)(0XB4+y)); //纵向页
Write_IIC_Command(0X00); //横向离左部边缘开始的距离
Write_IIC_Command(0X11); //横向第五个字
for(x=0;x<8;x++) //横向像素
{
Write_IIC_Data(show1[x+y*8+A3*16]);
Oled_delay(2);
}
}
}
/********************显示待机**********************/
void Diswait()
{
u8 x,y;
u16 Cnt=32;
for(y=0;y<2;y++)
{
Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 待
Write_IIC_Command(0x00);
Write_IIC_Command(0x10); //横向第一个字
for(x=0;x<16;x++) //横向像素
{
Write_IIC_Data(show2[x+y*16+Cnt*11]); //字符表第7个字
}
}
//
for(y=0;y<2;y++)
{
Write_IIC_Command((u8)(0XB0+y)); //竖向第一行 机
Write_IIC_Command(0x00);
Write_IIC_Command(0x11); //横向第二个字
for(x=0;x<16;x++) //横向像素
{
Write_IIC_Data(show2[x+y*16+Cnt*12]); //字符表第8个字
}
}
}
/********************IO_rst**********************/
void IO_int()
{
P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能
P0M1 = 0x00; P0M0 = 0x00; //设置为推挽输出
P1M1 = 0x00; P1M0 = 0x00; //设置为准双向口
P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口
P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
}
/********************picture**********************/
void cleardisp()
{
u8 x,y;
for(y=0;y<8;y++)
{
Write_IIC_Command((u8)(0xb0+y));
Write_IIC_Command(0x00);
Write_IIC_Command(0x10);
for(x=0;x<128;x++) //横向像素
{
Write_IIC_Data(0X00);
}
}
}
/***************显示计数器值******************/
void dis_Val(u8 s)
{
u8 x,y;
u16 i=0;
u8 A1,A2;
A1=s/10;
A2=s-A1*10;
for(y=0;y<2;y++) //百位显示
{
Write_IIC_Command((u8)(0XB2+y)); //纵向页 1011
Write_IIC_Command(0X00); //横向离左部边缘开始的距离
Write_IIC_Command(0X10); //横向第四个字
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]); //0--A字符表
}
}
delay_ms(150); //延时
}
/******************** 主函数 **************************/
void main(void)
{
IO_int();
Initial_LY096BG30();
cleardisp();
Diswait();
Counter=0;
dis_Val1(0X12); //第三行显示十进制数18
while(1)
{
//
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_1) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_1) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(1);
}
}
//按键1
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_2) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_2) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(2);
}
}
//按键2
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_3) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_3) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(3);
}
}
//按键3
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_4) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_4) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(4);
}
}
//按键4
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_5) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_5) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(5);
}
}
//按键5
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_6) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_6) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(6);
}
}
//按键6
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_7) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_7) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(7);
}
}
//按键7
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!KEY_8) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!KEY_8) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(8);
}
}
//按键8 INT_1
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_1) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_1) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(10);
}
}
//输入1
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_2) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_2) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(11);
}
}
//按键2
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_3) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_3) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(12);
}
}
//输入3
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_4) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_4) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(13);
}
}
//输入4
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_5) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_5) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(14);
}
}
//输入5
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_6) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_6) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(15);
}
}
//输入6
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_7) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_7) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(16);
}
}
//输入7
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_8) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_8) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(17);
}
}
//输入8
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_9) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_9) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(18);
}
}
//输入9
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_10) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_10) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(19);
}
}
//输入10
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_11) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_11) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(20);
}
}
//输入11
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_12) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_12) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(21);
}
}
//输入12
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_13) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_13) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(22);
}
}
//输入13
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_14) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_14) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(23);
}
}
//输入14
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_15) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_15) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(24);
}
}
//输入15
key_reset();
for(;kcounter<10;) //输入端口循环5次
{
if(!INT_16) //输入端口低电平
{
Key_ValAdd(); //输入端口低电平 计数器加一状态标志加一
}
else if(~!INT_16) //输入端口高电平
{ //
Key_Clear(); //按键计数器加一 状态标志归零
}
if(kstatus>=8) /*按键状态标志大于等于3为有效值*/
{
dis_Val(25);
}
}
//输入16
}
}






