⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c8051f021.c

📁 片上系统单片机C8051F021的应用程序
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <C8051F020.h>
//#include <reg52.h>

#define uint  unsigned int
#define uchar unsigned char
#define x1    0x80
#define x2    0x88
#define y     0x80
#define comm  0
#define dat   1

sbit rs = P2^7;   //H=data; L=command;
sbit rw = P2^6;   //H=read; L=write;
sbit  e = P2^5;   //input enable;
sbit psb= P2^4;   //H=并口; L=串口;
sbit rst= P2^3;   //Reset Signal 低电平有效
sbit bl= P1^6;		//背光,低电平有效
sbit busy=P3^7;   //lcd busy bit
sbit p15=P1^5;
sbit p17=P1^7;
sbit p20=P2^0;
sbit p21=P2^1;	
sbit p22=P2^2;

//变量定义
	bit k1t=0;				//各个按键的标志
	bit k1=0;
	bit k2=0;
	bit k3t=0;
	bit k3=0;
	bit k4=0;
	bit menu=0;				//菜单标志,0为菜单界面,1为功能界面
	bit fun1=0;				//进入功能1标志
	bit fun2=0;				//进入功能2标志
	bit fun3=0;				//进入功能3标志
	bit fun4=0;				//进入功能4标志
	bit key2r=0;			//KEY2蜂鸣标志,0则叫,1不叫
	bit key4r=0;			//KEY4蜂鸣标志,0则叫,1不叫
	bit topsi=0;			//加法到达最高速度标志
	bit topsd=0;			//减法到达最高速度标志
	bit meda=0;				//进入DA功能的选择界面
	bit mepw=0;				//进入PWM功能的选择界面
	
	
	uchar kmark=0;			//按键扫描标志
	uchar fcount=0;			//功能选择标志
	uchar f1co=0;				//AD计数
	uchar f2count=0;		//DA路数选择标志
	uchar f3count=0;		//PWM路数选择标志
	uchar incount=9;		//加计数
	uchar decount=9;		//减计数
	uchar k2count=0;		//上翻键计数
	uchar k4count=0;		//下翻键计数
	uchar instd=9;			//上翻标准
	uchar destd=9;			//下翻标准
	xdata uchar adnum0[3]={0,0,0};		//AD0数据存储
	xdata uchar adnum1[3]={0,0,0};		//AD1数据存储
	xdata uint adf0[10]={0,0,0,0,0,0,0,0,0,0};			//AD0滤波数据存储
	xdata uint adf1[10]={0,0,0,0,0,0,0,0,0,0};			//AD1滤波数据存储
	uint adres0=0;			//AD0滤波后的结果
	uint adres1=0;			//AD1滤波后的结果
	xdata uchar danum0[4]={0,0,0,0};		//DA0数据存储数组
	xdata uchar danum1[4]={0,0,0,0};		//DA1数据存储数组
	//uchar pwpr0[4];			//PWM0占空比存储数组
	//uchar pwpr1[4];			//PWM1占空比存储数组
	xdata uchar pwnum0[4]={0,0,0,0};		//PWM0电压存储数组
	xdata uchar pwnum1[4]={0,0,0,0};		//PWM1电压存储数组
	//uchar pwlas0[4]={0xff,0xff,0xff,0xff};
	xdata uchar fqnum0[6]={0,0,0,0,0,0};		//频率数据存储数组
	uchar pwcp0h=0;
	uchar pwcp0l=0;
	uchar pwcp1h=0;
	uchar pwcp1l=0;
	uchar adsel=0;			//AD路数选择标志,(0,1,2)为第一路,(3,4,5)为第二路

//函数声明
void tt0();
void pca();
void ring(void);
void wr_lcd (uchar,uchar);
void chk_busy (void);
uchar code * selnt(uchar);	
void npd_ad(uchar,uchar,uchar,uchar);
void delay (uint);
void delay1(uint);
void f1disp();
void f2disp();
void f3disp();
void f4disp();
void npd_da(uchar,uchar,uchar,uchar,uchar);
void bcda4(uchar *,uchar,uchar,uchar,uchar);
void bcds4(uchar *,uchar,uchar,uchar,uchar);
void npd_fa(uchar,uchar,uchar,uchar);	
void npd_fb(uchar,uchar,uchar,uchar,uchar);	
void adfun();
uint bcdhb(uchar *,uchar);
void pwm0fun();
void pwm1fun();
uint filter(uint *,uchar,uint,uint);
void ditui(uint *,uchar ,uint );
unsigned long int sumarr(uint *,uchar );
void mami(uint *,uchar ,uint *,uint *);
void flashre();
void flashwr();
/*
void config(void);
void init_lcd (void)
void wr_zb(uchar,uchar);
void chn_disp (uchar code *);
void clrram (void)
void con_disp (uchar,uchar,uchar,uchar,uchar,uchar);
void clrp_disp (void);
void init_disp(void);
void kscan(void);
void key1(void);
void key3(void);
void keyans(void);
uchar code * selnt(uchar);
*/

uchar code tabme[]={
"1.12位A/D 输入  "
"3.16位PWM 输出  "
"2.12位D/A 输出  "
"4.波形频率测量  "
};
uchar code tabmes[]={
"2.12位D/A 输出  "
"4.波形频率测量  "
"3.16位PWM 输出  "
"5.FLASH 存储    "
};
uchar code tab1[]={
"1.选择第一路DA  "
"                "
"2.选择第二路DA  "
"                "
};

uchar code tab2[]={
"第一路DA输出的电"
"压为:           "
};

uchar code tab3[]={
"第二路DA输出的电"
"压为:           "
};

uchar code tab4[]={
"1.选择第一路PWM "
"                "
"2.选择第二路PWM "
"                "
};

uchar code tab5[]={
"第一路PWM 输出的"
"电压为:         "
};

uchar code tab6[]={
"第二路PWM 输出的"
"电压为:         "
};

uchar code tab7[]={
"输入信号的频率为"
"                "
};

uchar code tab8[]={
"已存入FLASH!^_^ "
"                "
};
uchar code tabn0[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xE0,0x07,
0xFF,0xE0,0x1F,0xFF,0xF8,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x3F,0x03,0xFC,0x3F,0x03,
0xFC,0x3F,0x1F,0xFC,0x3F,0x1F,0xFC,0x3F,0xBF,0xFC,0x3F,0xFE,0xFC,0x3F,0xFC,0xFC,
0x3F,0xF0,0xFC,0x3F,0xF0,0xFC,0x3F,0xF0,0xFC,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x3F,
0x00,0xFC,0x3F,0x00,0xFC,0x1F,0xFF,0xF8,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

uchar code tabn1[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,
0x7F,0x00,0x00,0xFF,0x00,0x01,0xFF,0x00,0x07,0xFF,0x00,0x07,0xFF,0x00,0x07,0xFF,
0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,
0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,
0x3F,0x00,0x0F,0xFF,0xFC,0x0F,0xFF,0xFC,0x0F,0xFF,0xFC,0x0F,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

uchar code tabn2[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xF0,0x07,
0xFF,0xF0,0x3F,0xFF,0xFC,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x00,0x00,
0xFC,0x00,0x03,0xFC,0x00,0x07,0xF0,0x00,0x0F,0xE0,0x00,0x3F,0xC0,0x00,0x7F,0x80,
0x00,0xFE,0x00,0x01,0xFC,0x00,0x03,0xF8,0x00,0x07,0xF0,0x00,0x0F,0xE0,0x00,0x3F,
0xC0,0xFC,0x3F,0x00,0xFC,0x3F,0xFF,0xFC,0x3F,0xFF,0xFC,0x3F,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

uchar code tabn3[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xF0,0x0F,
0xFF,0xF0,0x3F,0xFF,0xFC,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x00,0x00,
0xFC,0x00,0x00,0xFC,0x00,0x00,0xFC,0x01,0xFF,0xF8,0x01,0xFF,0xF0,0x01,0xFF,0xF8,
0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0xFC,0x3F,
0x00,0xFC,0x3F,0x00,0xFC,0x3F,0xFF,0xFC,0x0F,0xFF,0xF0,0x07,0xFF,0xF0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

uchar code tabn4[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,
0x0F,0xE0,0x00,0x1F,0xE0,0x00,0x3F,0xE0,0x00,0x7F,0xE0,0x00,0xFF,0xE0,0x01,0xFF,
0xE0,0x03,0xF7,0xE0,0x07,0xE7,0xE0,0x0F,0xC7,0xE0,0x1F,0x87,0xE0,0x1F,0x07,0xE0,
0x1F,0xFF,0xFC,0x1F,0xFF,0xFC,0x1F,0xFF,0xFC,0x00,0x07,0xE0,0x00,0x07,0xE0,0x00,
0x07,0xE0,0x00,0x07,0xE0,0x00,0x1F,0xF8,0x00,0x1F,0xF8,0x00,0x1F,0xF8,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

uchar code tabn5[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFC,0x3F,
0xFF,0xFC,0x3F,0xFF,0xFC,0x3F,0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,
0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x3F,0xFF,0xF0,0x3F,0xFF,0xF8,0x3F,0xFF,0xFC,
0x00,0x00,0xFE,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x3F,
0x80,0x7E,0x3F,0x80,0x7E,0x3F,0xFF,0xFC,0x07,0xFF,0xF8,0x07,0xFF,0xF0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

uchar code tabn6[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x00,
0xFF,0x80,0x07,0xFF,0x80,0x07,0xE0,0x00,0x07,0xE0,0x00,0x1F,0xE0,0x00,0x1F,0x80,
0x00,0x1F,0x80,0x00,0x1F,0x80,0x00,0x1F,0xFF,0xE0,0x1F,0xFF,0xF0,0x1F,0xFF,0xF8,
0x1F,0x81,0xFC,0x1F,0x80,0xFC,0x1F,0x80,0xFC,0x1F,0x80,0xFC,0x1F,0x80,0xFC,0x1F,
0x80,0xFC,0x1F,0x80,0xFC,0x0F,0xFF,0xF8,0x07,0xFF,0xF0,0x03,0xFF,0xE0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
uchar code tabn7[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFC,0x1F,
0xFF,0xFC,0x1F,0xFF,0xFC,0x1F,0x80,0xFC,0x1F,0x80,0xFC,0x1F,0x80,0xFC,0x00,0x01,
0xFC,0x00,0x03,0xFC,0x00,0x07,0xF0,0x00,0x0F,0xE0,0x00,0x1F,0xC0,0x00,0x3F,0x80,
0x00,0x7F,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,
0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
uchar code tabn8[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xE0,0x0F,
0xFF,0xF0,0x3F,0xFF,0xFC,0x3F,0x81,0xFC,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x3F,0x00,
0xFC,0x3F,0x00,0xFC,0x3F,0x81,0xFC,0x3F,0xFF,0xFC,0x0F,0xFF,0xF0,0x0F,0xFF,0xF0,
0x3F,0x81,0xFC,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x3F,
0x00,0xFC,0x3F,0x81,0xFC,0x3F,0xFF,0xFC,0x0F,0xFF,0xF0,0x07,0xFF,0xE0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

uchar code tabn9[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x0F,
0xFF,0xF0,0x3F,0xFF,0xF8,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x3F,0x00,
0xFC,0x3F,0x00,0xFC,0x3F,0x00,0xFC,0x3F,0xFF,0xFC,0x0F,0xFF,0xFC,0x0F,0xFF,0xFC,
0x00,0x01,0xFC,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x01,0xFC,0x00,
0x07,0xF8,0x00,0x07,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0x80,0x0F,0xFF,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

uchar code tabd[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x00,0x00,0x00,0x00,0x00,0x00
};


/*------初始化子程序------------------------*/
void config(void)
{
//看门狗禁止
	WDTCN=0x07;
	WDTCN=0xDE;
	WDTCN=0xAD; 
//I/O口配置
	XBR0=0x14;			//配置TX0,RX0,CEX0,CEX1
	XBR1=0x00;
	XBR2=0x40;
	P0MDOUT=0x00;
	P1MDOUT=0x00;
	P2MDOUT=0x00;
	P3MDOUT=0x00;
//使用内部晶振16MHZ	
	OSCICN=0x17;
//定时器配置,T0定时方式1用做键盘扫描,T1定时方式1用于频率测量,定时1S
	TMOD=0x11;
//定时器T0		
	TL0=0xc5;	//ff				
	TH0=0x67;	//ef
//12路ADC0配置
	ADC0CF=0x00;			//SAR时钟=系统时钟,内部增益为1
	ADC0CN=0x90;			//ADC允许,数据右对齐
//DAC0配置
	DAC0CN=0x80;			//DAC0允许,输出更新发生在写DAC0H时,数据格式靠右对齐
//DAC1配置
	DAC1CN=0x80;			//DAC0允许,输出更新发生在写DAC0H时,数据格式靠右对齐
//PCA配置
	PCA0CN=0x40;			//允许PCA
	//PCA0MD=0x08;			//用系统时钟,禁止PCA中断
	PCA0MD=0x09;			//用系统时钟,允许PCA中断
	PCA0CPM0=0xC2;			//允许16PWM,允许比较器功能,匹配禁止,PWM允许,禁止CFFn中断
	//PCA0CPM0=0xCB;			//允许16PWM,允许比较器功能,匹配允许,PWM允许,允许CFFn中断
	PCA0CPM1=0xC2;			//允许16PWM,允许比较器功能,匹配禁止,PWM允许,禁止CFFn中断
	//PCA0CPM1=0xCB;			//允许16PWM,允许比较器功能,匹配允许,PWM允许,允许CFFn中断
	PCA0L=0x00;
	PCA0H=0x00;
	//PCA0CPL0=0xff;
	//PCA0CPH0=0xff;
	//PCA0CPL1=0xff;
	//PCA0CPH1=0xff;
//电压基准配置
	REF0CN=0x03;			//使用内部基准
//中断优先级配置
	PT0=1;
//中断允许配置
	EIE1|=0x08;				//总体允许PCA0中断
	//开定时器T0中断计时
	TR0=1;
	ET0=1;
	//开定时器T1中断
	//ET1=1;
	EA=1;		
}
/*------------------LCD初始化-----------------*/
void init_lcd (void)
{
  rst=1;
  psb=1;
  wr_lcd (comm,0x30);  /*30---基本指令动作*/   
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0c);  /*开显示,关游标*/
}
/*---------------显示汉字或字符----------------*/
void chn_disp (uchar code *chn)
{
  uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  for (j=0;j<4;j++)
  {
    for (i=0;i<16;i++)
    wr_lcd (dat,chn[j*16+i]);
  }
}
/*---------------显示上面汉字或字符----------------*/
void chns_disp (uchar code *chn)
{
  uchar i,j;
  i=0;
  j=0;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[i]);
	wr_lcd (comm,0x90);	
	 for (i=0;i<16;i++)
  		wr_lcd (dat,chn[16+i]);
}
/*---------------清除图形----------------*/
void clrp_disp (void)
{
  uchar i,j;
  for(j=0;j<32;j++)
  {
    for(i=0;i<8;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y+j);
      wr_lcd (comm,x1+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,0x00);
      wr_lcd (dat,0x00);
    }
  }
  for(j=32;j<64;j++)
  {
    for(i=0;i<8;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y+j-32);
      wr_lcd (comm,x2+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,0x00);
      wr_lcd (dat,0x00);
    }
  }
  //wr_lcd (comm,0x36);
}
/*--------------清DDRAM------------------*/
void clrram (void)
{
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x01);
}
/*---------------显示光条----------------*/
//当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.		//80 90 88 98
															//80 90 80 90
void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
{
  uchar i,j;
  for(j=0;j<yl;j++)
  {
    for(i=0;i<xl;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y0+j);
      wr_lcd (comm,x0+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,data1);
      wr_lcd (dat,data2);
    }
  }
  wr_lcd (comm,0x36);
}
/*-------------------液晶接口子程序---------*/
void wr_zb(uchar lcd_x,uchar lcd_y)		//写座标
{
	wr_lcd(comm,0x36);
	wr_lcd(comm,lcd_y);
	wr_lcd(comm,lcd_x);
}
void wr_lcd (uchar dat_comm,uchar content)
{
  chk_busy ();
  if(dat_comm)
   {
    rs=1;   //data
    rw=0;   //write
   }
  else 
   {
    rs=0;   //command
    rw=0;   //write
   }
  P3=content;   //output data or comm
  e=1;
  delay(1);
  e=0;
}

void chk_busy (void)
{
  P3=0xff;
  rs=0;
  rw=1;
  e =1;
  while(busy==1);
  e =0;
}

void delay (uint us)   //delay time
{
  while(us--);
}
void delay1 (uint ms)
{
  uint i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<15;j++)
  delay(1);
}

/*---------------初始化显示截面------------------------*/
void init_disp(void)
{
	clrp_disp();
	chn_disp (tabme);
	con_disp (0xff,0xff,0x80,0x80,8,16);	//显示光条
	bl=0;
}
/*---------------按键扫描------------------------*/
void kscan(void)						
{				
	if (kmark==0)
	{					//KEY1 功能键	
		p17=1;
		if(p17==0)
		{	
			k1t=1;
			goto keyl;
		}
		else
		{
			if(k1t==1)
			{
				k1t=0;
				k1=1;
			}
			else
			{
				goto keyl;
			}
		}
	}
	if(kmark==1)		//KEY2 加键
	{
		p20=1;
		if (p20==0)
		{
			k2=1;
			goto keyl;
		}
		else
		{
			key2r=0;
			k2=0;
			incount=16;
			k2count=0;
			instd=16;
			topsi=0;
			goto keyl;
		}
	}
	if(kmark==2)		//KEY3 确定键
	{
		p21=1;
		if(p21==0)
		{
			k3t=1;
			goto keyl;
		}
		else
		{
			if(k3t==1)
			{
				k3t=0;
				k3=1;
				goto keyl;
			}
			else
			{
				goto keyl;
			}
		}
	}
	if(kmark==3)		//KEY4 减键
	{
		p22=1;
		if (p22==0)
		{
			k4=1;
			goto keyl;
		}
		else if(k4==0)
		{
			key4r=0;
			k4=0;
			decount=0x1F;
			k4count=0x00;
			destd=0x1F;
			topsd=0;
			goto keyl;
		}
		else 
		{
			goto keyl;
		}
	}
keyl:	kmark+=1;
		if (kmark==4)
		{
			kmark=0;
		}				
}
/*----------------KEY1功能键响应子程序-----------------------*/
void key1(void)
{
	clrp_disp();
	if (meda==0&&mepw==0)
	{
		menu=0;
		fun1=0;
		fun2=0;
		fun3=0;
		fun4=0;
		chn_disp (tabme);
		fcount+=1;
		if (fcount==5)
		{
			fcount=0;
		}
		switch(fcount)
		{
			case 0:con_disp (0xff,0xff,0x80,0x80,8,16);break;	//第一行显示光条
			case 1:con_disp (0xff,0xff,0x90,0x90,8,16);break;	//第二行显示光条
			case 2:con_disp (0xff,0xff,0x88,0x80,8,16);break;	//第三行显示光条
			case 3:con_disp (0xff,0xff,0x98,0x90,8,16);break;	//第四行显示光条
			case 4:												//菜单换页,第四行显示光条
			{
				chn_disp (tabmes);
				con_disp (0xff,0xff,0x98,0x90,8,16);
				break;	
			}
		}
	}
	if (meda==1)
	{
		meda=0;
		fun2=0;
		chn_disp(tab1);
		f2count+=1;
		if (f2count==2)
		{
			f2count=0;
		}
		switch(f2count)
		{
			case 0:con_disp (0xff,0xff,0x80,0x80,8,16);break;	//第一行显示光条
			case 1:con_disp (0xff,0xff,0x90,0x90,8,16);break;	//第二行显示光条
		}
	}
	if (mepw==1)
	{
		mepw=0;
		fun3=0;
		chn_disp(tab4);
		f3count+=1;
		if (f3count==2)
		{
			f3count=0;
		}
		switch(f3count)
		{
			case 0:con_disp (0xff,0xff,0x80,0x80,8,16);break;	//第一行显示光条
			case 1:con_disp (0xff,0xff,0x90,0x90,8,16);break;	//第二行显示光条
		}
	}
}
/*----------------KEY3确定键响应子程序-----------------------*/	
void key3(void)	
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -