📄 all.c
字号:
//*************************************************************************************************
//* *
//* ******************************头文件及宏定义************************** *
//* *
//*************************************************************************************************
#include<reg52.h>
#include"includes.h"
#define uchar unsigned char
#define uint unsigned int
#define SCANPORT P2
#define TIME1H 80
#define TIME1L 80 //定时器1溢出时间//
sbit wr=P3^1;
sbit rd=P3^0;
sbit P27=P2^7;
unsigned long int shuchu=500; //默认的开机电压//
uint zhuhuandata;
unsigned long int ch=0;
uchar i=0; //按键标记//
uchar uca_LineScan[3]={0xEF,0xDF,0xBF};
void chuli(); //函数定义//
uchar getkey(); //函数定义//
//*************************************************************************************************
//* *
//* ********************************将键值累加并送显示****************************** *
//* *
//*************************************************************************************************
void qiuhe(uchar t)
{
if(i==1)
{
ch=t;
vShowOneChar(6,89,uca[t]);
}
if(i==2)
{
ch=ch*10+t;
vShowOneChar(6,103,uca[t]);
}
if(i==3)
{
ch=ch*10+t;
vShowOneChar(6,111,uca[t]);
}
}
//*************************************************************************************************
//* *
//* ********************************按键功能函数****************************** *
//* *
//*************************************************************************************************
void key_chuli(uchar x)
{
uchar t;
switch(x)
{
case 42: t=0;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break; //'0'
case 31: t=1;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break; //'1'
case 32: t=2;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break; //'2'
case 33: t=3;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break; //'3'
case 21: t=4;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break; //'4'
case 22: t=5;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break; //'5'
case 23: t=6;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break; //'6'
case 11: t=7;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break; //'7'
case 12: t=8;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break; //'8'
case 13: t=9;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break; //'9'
case 41: if(i==3) //'ok'
{
ch=ch*256/512;
shuchu=ch;
ch=0;
TH0=65200;
TL0=65200;
vShowOneChin(2,49,uca_0);
vShowOneChin(2,64,uca_0);
vShowOneChin(4,48,uca_SHU);
vShowOneChin(4,64,uca_CHU);
vShowOneChar(6,88,uca_HEN);
vShowOneChar(6,104,uca_HEN);
vShowOneChar(6,112,uca_HEN);
}
i=0;
break;
}
}
void vTimer0(void) interrupt 1 using 2
{
uchar a,d;
unsigned long int c=0;
uchar data tab[3];
a=(((zhuhuandata&0xf0)>>4)*100/16);
d=((zhuhuandata&0x0f)*100/256);
c=(a+d)*5.12;
tab[0]=c%10;
tab[1]=c/10%10;
tab[2]=c/100%10;
vShowOneChar(2,89,uca[tab[2]]);
vShowOneChar(2,103,uca[tab[1]]);
vShowOneChar(2,111,uca[tab[0]]);
TH0=TIME1H;
TL0=TIME1L;
}
void main(void)
{
SCANPORT=0x8F;
ClearLCD(0x00);
vShowOneChar(2,89,uca[5]);
vShowOneChar(2,96,uca_XIAOSHU);
vShowOneChar(2,103,uca[0]);
vShowOneChar(2,111,uca[0]);
vShowOneChar(2,120,uca_V);
vShowOneChin(0,0,uca_DANG);
vShowOneChin(0,16,uca_QIAN);
vShowOneChin(0,32,uca_GONG);
vShowOneChin(0,48,uca_ZUO);
vShowOneChin(0,64,uca_DIAN);
vShowOneChin(0,80,uca_YA);
vShowOneChin(0,96,uca_MAOHAO);
vShowOneChin(4,0,uca_QING);
vShowOneChin(4,16,uca_SHE);
vShowOneChin(4,32,uca_ZHI);
vShowOneChin(4,48,uca_SHU);
vShowOneChin(4,64,uca_CHU);
vShowOneChin(4,80,uca_DIAN);
vShowOneChin(4,96,uca_YA);
vShowOneChin(4,112,uca_MAOHAO);
vShowOneChar(6,96,uca_XIAOSHU);
vShowOneChar(6,88,uca_HEN);
vShowOneChar(6,104,uca_HEN);
vShowOneChar(6,113,uca_HEN);
vShowOneChar(6,119,uca_V);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TMOD=0X01;
TH0=TIME1H;
TL0=TIME1L;
ET0=1; //T/C0开中断
TR0=1; //开定时器0中断
IT0=1; //外中断方式:下降沿。
EX0=1; //开启外部中断。
EA=1;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
while(1)
{
wr=0;
wr=1;
chuli();
if(zhuhuandata<=shuchu)P27=0;
if(zhuhuandata>shuchu)P27=1;
if(zhuhuandata<=shuchu)P27=0;
}
}
void chuli()
{
rd=0;
zhuhuandata=P0;
}
//*************************************************************************************************
//* *
//* ********************************函数实现****************************** *
//* *
//*************************************************************************************************
unsigned char getkey()
{
uchar ucTemp=0; //扫描状态暂存。
uchar ucRow=0,ucLine=0; //行号,列号。
for(ucLine=0;ucLine<3;ucLine++) //列扫描
{
SCANPORT=uca_LineScan[ucLine]; //输出扫描电位。
ucTemp=SCANPORT&0x8F; //输入扫描电位,并屏蔽高4位。
if(ucTemp!=0x8F)
{ //判断该列是否有按键按下。
switch(ucTemp)
{
case 0x8E: ucRow=10;break; //如果有,则判断行号。
case 0x8D: ucRow=20;break;
case 0x8B: ucRow=30;break;
case 0x87: ucRow=40;break;
default: P2=~P2; break;
}
break;
}
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复键扫描处理前初始状态>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SCANPORT=0x8F; //恢复P2口
return (ucRow+ucLine+1);//返回按键编码。格式为2位数,高位为行号,低位为列号。
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复键扫描处理前初始状态>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vINT0(void) interrupt 0
{
EX0=0;
key_chuli(getkey());
while((SCANPORT&0x8F)!=0x8f) //等待按键松开//
{
};
EX0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -