📄 mykey.c
字号:
#include<aduc848.h>
#include<intrins.h>
#include<mykey.h>
#include<math.h>
#include<stdio.h>
#include<intrins.h>
#include <absacc.h>
#include <setjmp.h>
#include<string.h>
/******************************************/
//主程序
/******************************************/
void main()
{
FLASHADDR=0x00FF;
CPRST=NORM;
vp=0.2;
ip=1.0;
freq=50;
P2=0xf0;
_RD=1;
_WR=1;
RS=1;
CS=1 ;
LCD_BUS=0xFF;
LCD_Initial();
CmdWrite(0x12,0x91); //选择page1进行读写
CmdWrite(0x00,0xcd); //文本模式,开显示
FullScreenFill(0x00); //清屏
dis_Page2();
Timer2_Init(58000);
while(1)
{
check_key();
if (FLASHADDR!=0x00FF) //有闪烁
{
if (numm%2==0)
DATALCD[FLASHADDR]=FLASHDATA[FLASHTAB];
else
DATALCD[FLASHADDR]=' ';
WriteTextScreen(DATALCD);
}
}
}
void Timer2_Init(unsigned int count)
{
T2CON=0x00;
TL2=count;
TH2=(count>>8);
RCAP2H=(count>>8);
RCAP2L=count;
CNT2=0;
EA=1;
ET2=1;
TR2=1;
}
void Timer2_ISR(void) interrupt 5
{
TF2=0;
num++;
if(num%100==0)
{ numm++;}
}
void check_key(void)
{ P1=0x00;
//SETBIT(P1,keyenter);
// SETBIT(P1,keyesc);
// SETBIT(P1,keyadd);
// SETBIT(P1,keysub);
if(set==0){
while(!set);
ckey=0x80;
}
if(add==0){
while(!add);
ckey=0x40;
}
if(sub==0){
while(!sub);
ckey=0x20;
}
if(esc==0){
while(!esc);
ckey=0x10;
}
if(ckey!=0) //有键按下
{
if (keyenterflag==0)
{
msg_key();
keyenterflag=1;
}
else
keyenterflag=0;
}
}
void msg_key(void)
{
unsigned char i1;
i1=0;
IKEYSTUS=TBSTUS[i1];
while (IKEYSTUS!=CPRST)
{
i1+=4;
IKEYSTUS=TBSTUS[i1];
}
i1++;
IKEYSTUS=TBSTUS[i1];
while(IKEYSTUS!=0&&(IKEYSTUS!=ckey))
{
i1+=4;
IKEYSTUS=TBSTUS[i1];
}
CPRST=TBSTUS[i1+2];
CPRAMADDR=TBSTUS[i1+1];
switch(CPRAMADDR)
{
case SETNEXT:set_NEXT();break;
case SETADD1:set_ADD();break;
case SETSUB1:set_SUB();break;
case SETCLEAR:set_CLEAR();break;
}
ckey=0x00;
}
void set_NEXT(void)
{
if (FLASHADDR==0x00FF)
{
FLASHTAB=0;
FLASHADDR=FLASHPOS[FLASHTAB];
DATALCD[FLASHADDR]=FLASHDATA[FLASHTAB];
WriteTextScreen(DATALCD);
}
else
{
FLASHADDR=FLASHPOS[FLASHTAB];
DATALCD[FLASHADDR]=FLASHDATA[FLASHTAB];
WriteTextScreen(DATALCD);
FLASHTAB++;
if(FLASHDATA[FLASHTAB]=='.')
FLASHTAB++;
FLASHADDR=FLASHPOS[FLASHTAB];
DATALCD[FLASHADDR]=FLASHDATA[FLASHTAB];
if(FLASHTAB==7)
{
sscanf(FLASHDATA,"%3f",&vp);
sscanf(FLASHDATA+3,"%3f",&ip);
sscanf(FLASHDATA+6,"%2d",&freq);
dis_Page2();
}
}
}
void set_ADD(void)
{
switch(FLASHTAB)
{
case 0:
FLASHADDR=FLASHPOS[FLASHTAB];
if((FLASHDATA[FLASHTAB]>='0')&&(FLASHDATA[FLASHTAB]<'5'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]+1;
return;
}
else return;
case 2:
FLASHADDR=FLASHPOS[FLASHTAB];
if ((FLASHDATA[FLASHTAB]<'9')&&(FLASHDATA[FLASHTAB-2]<'5'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]+1;
return;
}
if ((FLASHDATA[FLASHTAB]=='9')&&(FLASHDATA[FLASHTAB-2]<'4'))
{
FLASHDATA[FLASHTAB-2]=FLASHDATA[FLASHTAB-2]+1;
DATALCD[FLASHPOS[FLASHTAB-2]]=FLASHDATA[FLASHTAB-2];
FLASHDATA[FLASHTAB]='0';
return;
}
if((FLASHDATA[FLASHTAB]=='9')&&(FLASHDATA[FLASHTAB-2]=='4'))
{
FLASHDATA[FLASHTAB-2]='5';
DATALCD[FLASHPOS[FLASHTAB-2]]=FLASHDATA[FLASHTAB-2];
FLASHDATA[FLASHTAB]='0';
return;
}
if((FLASHDATA[FLASHTAB]=='0')&&(FLASHDATA[FLASHTAB-2]=='5'))
{
FLASHDATA[FLASHTAB-2]='0';
DATALCD[FLASHPOS[FLASHTAB-2]]=FLASHDATA[FLASHTAB-2];
FLASHDATA[FLASHTAB]='0';
return;
}
else return;
case 3:
FLASHADDR=FLASHPOS[FLASHTAB];
if((FLASHDATA[FLASHTAB]>='0')&&(FLASHDATA[FLASHTAB]<'5'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]+1;
return;
}
else return;
case 5:
FLASHADDR=FLASHPOS[FLASHTAB];
if ((FLASHDATA[FLASHTAB]<'9')&&(FLASHDATA[FLASHTAB-2]<'5'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]+1;
return;
}
if ((FLASHDATA[FLASHTAB]=='9')&&(FLASHDATA[FLASHTAB-2]<'4'))
{
FLASHDATA[FLASHTAB-2]=FLASHDATA[FLASHTAB-2]+1;
DATALCD[FLASHPOS[FLASHTAB-2]]=FLASHDATA[FLASHTAB-2];
FLASHDATA[FLASHTAB]='0';
return;
}
if((FLASHDATA[FLASHTAB]=='9')&&(FLASHDATA[FLASHTAB-2]=='4'))
{
FLASHDATA[FLASHTAB-2]='5';
DATALCD[FLASHPOS[FLASHTAB-2]]=FLASHDATA[FLASHTAB-2];
FLASHDATA[FLASHTAB]='0';
return;
}
if((FLASHDATA[FLASHTAB]=='0')&&(FLASHDATA[FLASHTAB-2]=='5'))
{
FLASHDATA[FLASHTAB-2]='0';
DATALCD[FLASHPOS[FLASHTAB-2]]=FLASHDATA[FLASHTAB-2];
FLASHDATA[FLASHTAB]='0';
return;
}
else return;
case 6:
FLASHADDR=FLASHPOS[FLASHTAB];
if((FLASHDATA[FLASHTAB]>='4')&&(FLASHDATA[FLASHTAB]<'6'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]+1;
return;
}
else return;
case 7:
FLASHADDR=FLASHPOS[FLASHTAB];
if((FLASHDATA[FLASHTAB]<'9')&&(FLASHDATA[FLASHTAB-1]<'6')&&(FLASHDATA[FLASHTAB-1]>='4'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]+1;
return;
}
if((FLASHDATA[FLASHTAB]=='9')&&(FLASHDATA[FLASHTAB-1]<'6')&&(FLASHDATA[FLASHTAB-1]>='4'))
{
FLASHDATA[FLASHTAB-1]=FLASHDATA[FLASHTAB-1]+1;
DATALCD[FLASHPOS[FLASHTAB-1]]=FLASHDATA[FLASHTAB-1];
FLASHDATA[FLASHTAB]='0';;
return;
}
if((FLASHDATA[FLASHTAB]=='9')&&(FLASHDATA[FLASHTAB-1]=='5'))
{
FLASHDATA[FLASHTAB-1]='6';
DATALCD[FLASHPOS[FLASHTAB-1]]='6';
FLASHDATA[FLASHTAB]='0';
return;
}
if((FLASHDATA[FLASHTAB]=='0')&&(FLASHDATA[FLASHTAB-1]=='6'))
{
FLASHDATA[FLASHTAB-1]='4';
DATALCD[FLASHPOS[FLASHTAB-1]]=FLASHDATA[FLASHTAB-1];
FLASHDATA[FLASHTAB]='0';
return;
}
else return;
}
}
void set_SUB(void)
{
switch(FLASHTAB)
{
case 0:
FLASHADDR=FLASHPOS[FLASHTAB];
if((FLASHDATA[FLASHTAB]<='5')&&(FLASHDATA[FLASHTAB]>'0'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]-1;
return;
}
else return;
case 2:
if((FLASHDATA[FLASHTAB-2]>='0')&&(FLASHDATA[FLASHTAB]<='9')&&(FLASHDATA[FLASHTAB]>'0'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]-1;
return;
}
if((FLASHDATA[FLASHTAB]=='0')&&(FLASHDATA[FLASHTAB-2]>'0'))
{
FLASHDATA[FLASHTAB]='9';
FLASHDATA[FLASHTAB-2]=FLASHDATA[FLASHTAB-2]-1;
DATALCD[FLASHPOS[FLASHTAB-2]]= FLASHDATA[FLASHTAB-2];
return;
}
else return;
case 3:
FLASHADDR=FLASHPOS[FLASHTAB];
if((FLASHDATA[FLASHTAB]<='5')&&(FLASHDATA[FLASHTAB]>'0'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]-1;
return;
}
else return;
case 5:
if((FLASHDATA[FLASHTAB-2]>='0')&&(FLASHDATA[FLASHTAB]<='9')&&(FLASHDATA[FLASHTAB]>'0'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]-1;
return;
}
if((FLASHDATA[FLASHTAB]=='0')&&(FLASHDATA[FLASHTAB-2]>'0'))
{
FLASHDATA[FLASHTAB]='9';
FLASHDATA[FLASHTAB-2]=FLASHDATA[FLASHTAB-2]-1;
DATALCD[FLASHPOS[FLASHTAB-2]]= FLASHDATA[FLASHTAB-2];
return;
}
else return;
case 6:
if((FLASHDATA[FLASHTAB]>'4')&&(FLASHDATA[FLASHTAB]<='6'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]-1;
return;
}
else return;
case 7:
if((FLASHDATA[FLASHTAB]>'0')&&(FLASHDATA[FLASHTAB]<='9')&&(FLASHDATA[FLASHTAB-1]>='4')&&(FLASHDATA[FLASHTAB-1]<'6'))
{
FLASHDATA[FLASHTAB]=FLASHDATA[FLASHTAB]-1;
return;
}
if((FLASHDATA[FLASHTAB]=='0')&&(FLASHDATA[FLASHTAB-1]>'4')&&(FLASHDATA[FLASHTAB-1]<='6'))
{
FLASHDATA[FLASHTAB]='9';
FLASHDATA[FLASHTAB-1]=FLASHDATA[FLASHTAB-1]-1;
DATALCD[FLASHPOS[FLASHTAB-1]]= FLASHDATA[FLASHTAB-1];
return;
}
if((FLASHDATA[FLASHTAB]=='0')&&(FLASHDATA[FLASHTAB-1]=='4'))
{
FLASHDATA[FLASHTAB]='0';
FLASHDATA[FLASHTAB-1]='6';
DATALCD[FLASHPOS[FLASHTAB-1]]= FLASHDATA[FLASHTAB-1];
return;
}
else return;
}
}
void set_CLEAR(void)
{
FLASHADDR=0x00FF;
CPRST=NORM;
Page1();
}
/***************************************/
// 延时子程序 延时t秒
/***************************************/
void delay(uint t)
{
uint i;
uint j;
for(j=0;j<t;j++)
for(i=0;i<109;i++)
_nop_();
}
/***************************************/
//写寄存器命令
/***************************************/
void CmdWrite(uchar cmdreg,uchar cmddata)
{
LCD_BUS=cmdreg; //写入寄存器地址
CS=0;
_RD=1;
RS=0;
_WR=0;
_nop_();
_WR=1;
_nop_();
RS=1;
CS=1;
LCD_BUS=cmddata; //写入参数
CS=0;
_RD=1;
RS=0;
_WR=0;
_nop_();
_WR=1;
_nop_();
RS=1;
CS=1;
_RD=1;
}
/******************************************/
//数据写操作
/******************************************/
void DataWrite(uchar wrdata)
{
_RD=1;
_WR=1;
RS=1;
LCD_BUS=wrdata; //写入数据
CS=0;
_WR=0;
_nop_();
_WR=1;
_nop_();
RS=0;
CS=1;
}
/******************************************/
//写入字符串
/******************************************/
void Printstr(uchar code *pstr)
{
while(*pstr!=0)
{
DataWrite(*pstr);
pstr++;
delay(1);
}
}
/******************************************/
//整屏幕写入数据
/******************************************/
void FullScreenFill(uchar fill_data)
{
uchar i,j;
CmdWrite(0x60,0x00);
CmdWrite(0x70,0x00);
for(i=0;i<24;i++)
for(j=0;j<128;j++)
DataWrite(fill_data);
}
/******************************************/
//模块复位与初始化
/******************************************/
void LCD_Initial()
{
_RST=0; //复位开始
delay(10);
_RST=1;
delay(10); //复位结束
CmdWrite(0x00,0xcd); //电源、软件正常模式,文本正向模式,开显示 ,屏幕不闪烁
//CmdWrite(0x00,0xc5);
CmdWrite(0x90,0x0d);
CmdWrite(0xf0,0xa0);
CmdWrite(0x11,0x00); //光标高度和行距
CmdWrite(0x03,0x80); //移动控制
CmdWrite(0x10,0x6f); //光标和字体控制
CmdWrite(0x12,0x91); //光标自动右移,显示PAGE1
CmdWrite(0x20,0x17); //工作视窗右边参数的设定
CmdWrite(0x30,0x7f);
CmdWrite(0x40,0x00);
CmdWrite(0x50,0x00);
CmdWrite(0x21,0x17); //显示视窗参数的设定
CmdWrite(0x31,0x80);
CmdWrite(0x41,0x00);
CmdWrite(0x51,0x00);
CmdWrite(0x60,0x00); //设定X坐标
CmdWrite(0x70,0x00); //设定Y坐标
CmdWrite(0xe0,0x00);
CmdWrite(0xf0,0xa0); //简体自型
CmdWrite(0xf1,0x0f);
}
void Page1(void)
{
CmdWrite(0x60,0x00); //设定X坐标
CmdWrite(0x70,0x00); //设定Y坐标
Printstr("请设定值:");
CmdWrite(0x60,0x00); //设定X坐标
CmdWrite(0x70,0x20); //设定Y坐标
Printstr("电压幅度:");
CmdWrite(0x60,0x4a);
CmdWrite(0x70,0x20);
Printstr("0");
CmdWrite(0x60,0x4b);
CmdWrite(0x70,0x20);
Printstr(".");
CmdWrite(0x60,0x4c);
CmdWrite(0x70,0x20);
Printstr("1");
CmdWrite(0x60,0x4d);
CmdWrite(0x70,0x20);
Printstr("V");
CmdWrite(0x60,0x00); //设定X坐标
CmdWrite(0x70,0x40); //设定Y坐标
Printstr("电流幅度:");
CmdWrite(0x60,0x4a);
CmdWrite(0x70,0x40);
Printstr("1");
CmdWrite(0x60,0x4b);
CmdWrite(0x70,0x40);
Printstr(".");
CmdWrite(0x60,0x4c);
CmdWrite(0x70,0x40);
Printstr("0");
CmdWrite(0x60,0x4d);
CmdWrite(0x70,0x40);
Printstr("m");
CmdWrite(0x60,0x4e);
CmdWrite(0x70,0x40);
Printstr("A");
CmdWrite(0x60,0x00); //设定X坐标
CmdWrite(0x70,0x60); //设定Y坐标
Printstr("频率:");
CmdWrite(0x60,0x46);
CmdWrite(0x70,0x60);
Printstr("5");
CmdWrite(0x60,0x47);
CmdWrite(0x70,0x60);
Printstr("0");
CmdWrite(0x60,0x48);
CmdWrite(0x70,0x60);
Printstr("H");
CmdWrite(0x60,0x49);
CmdWrite(0x70,0x60);
Printstr("z");
}
void WriteTextScreen(unsigned char *TxtData)
{
unsigned char TempData;
unsigned char i=0;
CmdWrite(0x60,0x00); //设定X坐标
CmdWrite(0x70,0x00); //设定Y坐标
Printstr("请设定值:");
CmdWrite(0x60,0x00); //设定X坐标
CmdWrite(0x70,0x20); //设定Y坐标
for(i=0; i<14; i++)
{
TempData=(*(TxtData+i));
DataWrite(TempData);
}
CmdWrite(0x60,0x00); //设定X坐标
CmdWrite(0x70,0x40); //设定Y坐标
for(i=14; i<29; i++)
{
TempData=(*(TxtData+i));
DataWrite(TempData);
}
CmdWrite(0x60,0x00); //设定X坐标
CmdWrite(0x70,0x60); //设定Y坐标
for(i=29; i<39; i++)
{
TempData=(*(TxtData+i));
DataWrite(TempData);
}
}
void ncstrcpy(unsigned char *dst, const unsigned char *src)
{
while (*src!=0x00)
*dst++=*src++;
}
void dis_Page2(void)
{
sprintf(FLASHDATA,"%3.1f",vp);
ncstrcpy(DATALCD,"电压幅度: ");
sprintf(DATALCD+10, "%3.1f",vp);
sprintf(DATALCD+13, "V");
sprintf(FLASHDATA+3,"%3.1f",ip);
ncstrcpy(DATALCD+14,"电流幅度: ");
sprintf(DATALCD+24, "%3.1f",ip);
sprintf(DATALCD+27, "mA");
sprintf(FLASHDATA+6,"%2d",freq);
ncstrcpy(DATALCD+29,"频率: ");
sprintf(DATALCD+35, "%2d",freq);
sprintf(DATALCD+37, "Hz");
WriteTextScreen(DATALCD);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -