📄 pmcykey.c
字号:
#include <absacc.h>
#include <reg52.h>
#include <string.h>
/*定义字型字位口*/
#define WORDPORT 0x0100
#define DIGIPORT1 0x0200
#define DIGIPORT2 0x0400
#define uchar unsigned char
#define unit unsigned int
#define N 10
/*定义P1口个管脚*/
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit DERE=P1^3;
sbit DOG=P1^4;
sbit KEYDOWN=P3^4;
sbit KEY1=P1^5;
sbit KEY2=P1^6;
sbit KEY3=P1^7;
sbit die=P2^7;
sbit keydec=P3^2;
/*显示缓存变量定义*/
code uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x86};
code uchar table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
uchar data speed=0;
unit selcaddr;
//bit selc;
uchar keysh;
uchar keyg;
uchar gbit;
uchar shbit;
uchar bbit;
uchar qbit;
float digital1;
float share;
unit DIGIPORT;
uchar keyvalue;
uchar lepd;
/*--------延时1ms函数----------*/
void delays(void)
{uchar i;
for(i=0;i<176;i++){ }
}
/*延时200ms函数*/
void delay200(void)
{ unit i;
for(i=25000;i>0;i--)
{}
}
void keypress(void)
{ DOG=~DOG;
if(KEY1==0)
{
keyvalue=0x15;
speed=speed+1;
if(speed>=30)
{ speed=30;
keyvalue=0x00;}
LED1=1;LED2=0;LED3=0;
}
DOG=~DOG;
if(KEY2==0)
{
keyvalue=0x26;
speed=speed-1;
if(speed==0||speed==0xff)
{speed=0;
keyvalue=0x07;}
LED2=1;LED1=0;LED3=0;
}
DOG=~DOG;
if(KEY3==0)
{
keyvalue=0x37;
speed=0;
LED3=1;LED1=0;LED2=0;
}
DOG=~DOG;
}
void init(void)
{ gbit=0;
shbit=0;
bbit=0;
qbit=0;
digital1=0;
share=0;
lepd=1;
DIGIPORT=0;
LED1=0;
DOG=1;
LED2=0;
LED3=0;
KEYDOWN=1;
P1=0xe0;
selcaddr=0x0000;
keysh=0;
keyg=0;
DERE=0; //默认为接收状态
die=0;
RCAP2H=0xff;
RCAP2L=0xfa;
T2CON=0x34;
SCON=0x50;
IT0=0;
ES=1;
EX0=1;
EA=1;
}
void shacomp1(void)
{ uchar i;
DOG=~DOG;
qbit=0;
bbit=share*10;
shbit=share*100-bbit*10;
gbit=share*1000-bbit*100-shbit*10;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table1[0]; //小数点在千位
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[bbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[shbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[gbit];
for(i=0;i<176;i++){ }
XBYTE[selcaddr]=0x00;
}
void shacomp10(void)
{ uchar i;
DOG=~DOG;
qbit=(int)share;
bbit=share*10-qbit*10;
shbit=share*100-qbit*100-bbit*10;
gbit=share*1000-qbit*1000-bbit*100-shbit*10;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table1[qbit]; //小数点在千位
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[bbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[shbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[gbit];
for(i=0;i<176;i++){ }
XBYTE[selcaddr]=0x00;
}
void shacomp100(void)
{ uchar i;
DOG=~DOG;
qbit=share/10;
bbit=share-qbit*10;
shbit=share*10-qbit*100-bbit*10;
gbit=share*100-qbit*1000-bbit*100-shbit*10;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[qbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table1[bbit]; //小数点在百位
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[shbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[gbit];
for(i=0;i<176;i++){ }
XBYTE[selcaddr]=0x00;
}
void shacomp1000(void)
{ uchar i;
DOG=~DOG;
qbit=share/100;
bbit=(share-qbit*100)/10;
shbit=share-qbit*100-bbit*10;
gbit=share*10-qbit*1000-bbit*100-shbit*10;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[qbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[bbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table1[shbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[gbit];
for(i=0;i<176;i++){ }
XBYTE[selcaddr]=0x00;
}
void shacomp(void)
{ uchar i;
DOG=~DOG;
qbit=share/1000;
bbit=(share-qbit*1000)/100;
shbit=(share-qbit*1000-bbit*100)/10;
gbit=share-qbit*1000-bbit*100-shbit*10;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[qbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[bbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[shbit];
for(i=0;i<176;i++){ }
DIGIPORT=DIGIPORT<<1;
XBYTE[selcaddr]=DIGIPORT;
XBYTE[WORDPORT]=table[gbit];
for(i=0;i<176;i++){ }
XBYTE[selcaddr]=0x00;
}
void display(void)
{
DOG=~DOG;
switch(lepd)
{
case 1://负载
{selcaddr=DIGIPORT1;
share=speed;
DIGIPORT=0x10;
}break;
case 2://转速
{selcaddr=DIGIPORT2;
share=digital1;
DIGIPORT=0x01;
}break;
}
lepd=lepd+1;
if(lepd==3)
{lepd=1;}
if(share<1)
{
shacomp1();
}
else if (share<10)
{
shacomp10();
}
else if(share<100)
{
shacomp100();
}
else if(share<1000)
{
shacomp1000();
}
else
{
shacomp();
}
DOG=~DOG;
}
/*主程序*/
void main(void)
{
delay200(); //------延时以使所有芯片同步-------/
init();
while(1)
{
DOG=~DOG;
display();
//不停的扫描显示,等待中断
}
}
/*按键处理程序*/
void keydown(void) interrupt 0 using 1
{
uchar i;
uchar j;
ES=0;
EX0=0;
j=150;
// KEYDOWN=0; //申请上位机中断
// DOG=~DOG;
// KEYDOWN=1;//发送完后撤消中断申请
delays(); //延时去抖
delays();
delays();
delays();
if(keydec==1)
{goto outkey;}
keypress();
DERE=1; //允许发送
if (speed<30)
{
TI=0;
SBUF=0xfc;
while(TI==0);
TI=0;
SBUF=0xcf;
while(TI==0);
TI=0;
SBUF=keyvalue;
while(TI==0);
TI=0;
SBUF=speed;
while(TI==0);
TI=0;
}
keysh=speed/10;
keyg=(speed-keysh*10);
while(j)
{
XBYTE[DIGIPORT1]=0x40;
XBYTE[WORDPORT]=table[keysh];
for(i=0;i<176;i++){ }
DOG=~DOG;
XBYTE[DIGIPORT1]=0x80;
XBYTE[WORDPORT]=table[keyg];
for(i=0;i<176;i++){ }
XBYTE[DIGIPORT1]=0x00;
XBYTE[DIGIPORT2]=0x04;
XBYTE[WORDPORT]=table[keysh];
for(i=0;i<176;i++){ }
DOG=~DOG;
XBYTE[DIGIPORT2]=0x08;
XBYTE[WORDPORT]=table[keyg];
for(i=0;i<176;i++){ }
XBYTE[DIGIPORT2]=0x00;
j--;
}
outkey: TI=0;
ES=1;
EX0=1;
DERE=0;//关串口发送功能,恢复为默认的接受状态
// DOG=~DOG;
}
/*----------------串口中断程序-----------------------*/
void seria(void) interrupt 4 using 2
{
uchar h;
uchar j;
uchar i;
uchar k;
uchar digth;
uchar digtl;
digth=0;
digth=0;
j=150;
h=0;
DOG=~DOG;
EX0=0;
ES=0;
EA=0;
RI=0;
i=SBUF;
if(i==0x0e) //电机调速标志
{
while(RI==0 && h<80)
{h=h+1;}
if(h==80)
{goto out10;}
RI=0;
h=0;
k=SBUF;
if(k==0xe0)
{ while(RI==0);
RI=0;
speed=SBUF;
keysh=speed/10;
keyg=(speed-keysh*10);
while(j)
{
XBYTE[DIGIPORT1]=0x40;
XBYTE[WORDPORT]=table[keysh];
for(i=0;i<176;i++){ }
DOG=~DOG;
XBYTE[DIGIPORT1]=0x80;
XBYTE[WORDPORT]=table[keyg];
for(i=0;i<176;i++){ }
XBYTE[DIGIPORT1]=0x00;
XBYTE[DIGIPORT2]=0x04;
XBYTE[WORDPORT]=table[keysh];
for(i=0;i<176;i++){ }
DOG=~DOG;
XBYTE[DIGIPORT2]=0x08;
XBYTE[WORDPORT]=table[keyg];
for(i=0;i<176;i++){ }
XBYTE[DIGIPORT2]=0x00;
j--;
}
}
}
DOG=~DOG;
if(i==0xfa)//端口采集数据
{
while(RI==0 && h<80)
{h=h+1;}
if(h==80)
{goto out10;}
RI=0;
h=0;
k=SBUF;
if(k==0xaf)
{ while(RI==0 && h<80)
{h=h+1;}
if(h==80)
{goto out10;}
RI=0;
h=0;
digth=SBUF;
while(RI==0 && h<80)
{h=h+1;}
if(h==80)
{goto out10;}
RI=0;
h=0;
digtl=SBUF;
digital1=digth*256+digtl;
digital1=digital1/100;//2000;
}
}
out10: ES=1;
EX0=1;
EA=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -