源程序0.c

来自「can2 2 3 4 34 543 5 435」· C语言 代码 · 共 1,609 行 · 第 1/3 页

C
1,609
字号
       {
       recok=0;
       SJA_adr=ALC;
       st=*SJA_adr;
       SJA_adr=ECC;
       st=*SJA_adr;
       }
       }
       }
       }
       }

/*******************************************************
延时1MS子函数
*******************************************************/
void delay 1ms(void)
{
  uchar i,j;
  for(i=0;i<2;i++)
   for(j=0;j<225;i++)
   }
/****************************************************
系统初始化子程序
*****************************************************/
void sys_init(void)
{
  IE=0;
  IT1=0;
  EX1=1;
  EA=1;
}

/**************************************************
按键扫描函数
 返回按键代码 
   按键代码如下: S1:0X01 S2:0X02 S3:0X03    S20:0X14
            无按键则返回0XFF
	     按键功能对应:
	     S1:压仪表1
	     S2:数字键7
	     S3:数字键8
	     S4:数字键9
	     S5:功能键
	     S6:确认键
	     S7:数字键4
	     S8:数字键5
	     S9:数字键6
	     S10:压仪表2
	     S11:清除键
	     S12:数字键3
	     S13:数字键2
	     S14:数字键1
	     S15:压仪表3
	     S16:压仪表4
	     S17:数字键0
	     S18:
	     S19:
	     S20:参数键(用于将设置完的数据送到主控制系统)
/*****************************************************************/
uchar keyscan(void)
{
col1=col2=col3=col4=col5=1;
row1=0;
row2=1;
row3=1;
row4=1;
if(!col1)
{
 delay20ms();
if(!col1)return(YB1);
}
if(!col2)
{
delay20ms();
if(!col2)return(NUM7);
}
if(!col3)
{
delay20ms();
if(!col3)return(NUM8);
}
if(!col4)
{
delay20ms();
if(!col4)return(NUM9);
if(!col5)
{
delay20ms();
if(!col5)return(FUNC);
}
row1=1;
row2=0;
row3=1;
row4=1;
if(!col1)
{
delay20ms();
if(!col1)return(YB2);
}
if(!col3)
{
delay20ms();
if(!col3)return(NUM8);
}
if(!col2)
{
delay20ms();
if(!col2)return(NUM4);
}
if(!col3)
{
delay20ms();
if(!col3)return(NUM5);
}
if(!col3)
{
delay20ms();
if(!col4)return(NUM6);
}
if(!col5)
{
delay20ms();
if(!col5)return(ENTER);
}
row1=1;
row2=1;
row3=0;
row4=1;
if(!col1)
{
delay20ms();
if(!col1)return(YB3);
}
if(!col2)
{
delay20ms();
if(!col2)return(NUM1);
}
if(!col3)
{
delay20ms();
if(!col3)return(NUM2);
}
if(!col4)
{
delay20ms();
if(!col4)return(NUM3);
}
if(!col5)
{
delay20ms();
if(!col5)return(CLS);
}
row1=1;
row2=1;
row3=1;
row4=0;
if(!col1)
{
delay20ms();
if(!col1)return(YB4);
}
if(!col2)
{
delay20ms();
if(!col2)return(NUM0);
}
if(!col3)
{
delay20ms();
if(!col3)return(UNVAL);
}
if(!col4)
{
delay20ms();
if(!col4)return(PARA);
}
return(UNVAL);
}
void delay20ms(void)
{
uchar i;
for(i=0;i<45;i++)
   delay 1ms();
}
/*******************************************
按键处理函数
********************************************/
void keyhandle(void)
{
uchar keyid;
uchar itemid=0;
uchar fff=0;
uchar dcnt=0;
modified=0;
while(1)
{
 do
{
 keyid=keyscan();
}
while(keyid!=FUNC&&keyid!=PARA);
if(keyid==PARA)
{
cantransfer();
modifed=0;
return;
}
if(keyid==FUNC&&fff!=1)
{
  wait();
LCDCOM_W=0x0f;
setcursor(itemid);
while(fff!=1)
{
  do
{
  keyid=keyscan();
}
while(keyid==UNVAL);



switch(keyid)
{
  case NUM0: writelcd('0');
             modified=1;

               dcnt++;
               if(dcnt==4)
                     {
                      dcnt=0;
                   setcursor(itemid);
}
break;
case NUM1: writelcd('1');
           modfied=1;
           
           dcnt++;
  if(dcnt==4)
{
   dcnt=0;
     setcursor(itemid);
}
break;
case NUM2: writelcd('2');
           modfied=1;
           
           dcnt++;
  if(dcnt==4)
{
   dcnt=0;
     setcursor(itemid);
}
break;
case NUM3: writelcd('3');
           modfied=1;
           
           dcnt++;
  if(dcnt==4)
{
   dcnt=0;
     setcursor(itemid);
}
break;
case NUM4: writelcd('4');
           modfied=1;
           
           dcnt++;
  if(dcnt==4)
{
   dcnt=0;
     setcursor(itemid);
}
break;
case NUM5: writelcd('5');
           modfied=1;
           
           dcnt++;
  if(dcnt==4)
{
   dcnt=0;
     setcursor(itemid);
}
break;
case NUM6: writelcd('6');
           modfied=1;
           
           dcnt++;
  if(dcnt==4)
{
   dcnt=0;
     setcursor(itemid);
}
break;
case NUM7: writelcd('7');
           modfied=1;
           
           dcnt++;
  if(dcnt==4)
{
   dcnt=0;
     setcursor(itemid);
}
break;
case NUM8: writelcd('8');
           modfied=1;
           
           dcnt++;
  if(dcnt==4)
{
   dcnt=0;
     setcursor(itemid);
}
break;
case NUM9: writelcd('9');
           modfied=1;
           
           dcnt++;
  if(dcnt==4)
{
   dcnt=0;
     setcursor(itemid);
}
break;
case NUM0: writelcd('0');
           modfied=1;
           
           dcnt++;
  if(dcnt==4)
{
   dcnt=0;
     setcursor(itemid);
}
break;
case YB1: f_yb1;
          message();
	  break;
case YB2: f_yb2;
          message();
	  break;
case YB3: f_yb3;
          message();
	  break;
case YB4: f_yb4;
          message();
	  break;
case ENTER: itemid++;
            if(itemid==8)
	     itemid=0;
	     setcursor(itemid);
	     dcnt=0;
	     break;
case CLS:  setcursor(itemid);
           writelcd('');
	   writelcd('');
	   writelcd('');
	   writelcd('');
           setcursor(itemid);
	   dcnt=0;
	   break;
case FUNC: fff=1;
           wait();
	   LCDCOM_W=0x0c;
	   break;
	  }
       }
    }
 }
}
/**********************************************
设置LCD光标函数
 根据参数 X Y设置当前光标位置(当前编辑位)
***********************************************/
void setcursor(uchar xy)
{
 switch(xy)
{
  case 0:  wait();
           LCDCOM_W=0x84;
           break;
  case 1:  wait();
           LCDCOM_W=0x89;
           break;
  case 2:  wait();
           LCDCOM_W=0xc4;
           break;
  case 3:  wait();
           LCDCOM_W=0xc9;
           break;
  case 4:  wait();
           LCDCOM_W=0x98;
           break;
  case 5:  wait();
           LCDCOM_W=0x9d;
           break;
  case 6:  wait();
           LCDCOM_W=0xd8;
           break;
  case 7:  wait();
           LCDCOM_W=0xdd;
           break;
  }
}
/**********************************************************
写字符到LCD函数(写入LCD的显示RAM),写入位置由光标位置决定
***********************************************************/
void writelcd (uchar dat)
{
    wait();
    LCDDATA_W=dat;
}
/**********************************************************
读显示RAM数据,将其拼装后存入CAN发送缓冲区函数(如果参数被
修改则回存EEPROM),读取对象由itemid指定
***********************************************************/
void readfromlcd(uchar itemid)
{
uchar dat,tmh,tml,i,buf[8];
uint sadr;
switch(itemid)
{
case 0: wait();
     LCDCOM_W=0x84;
     for(i=0;i<4;i++)
	{
         wait();
   	dat=LCDDATA_R;
   	buf[i]=dat;
	}
	wait();
	LCDCOM_W=0x89;
	for(i=0;i<4;i++)
	{
  	wait();
  	dat=LCDDATA_R;
  	buf[i+4]=dat;
	}                              /*根据参数是否被修改标志,将参数回存EEPROM*/

	if(modified)
	{
  	sadr=0x0000;
 	for(i=0;i<8;i++)
 	{
	dat=writebyte_eeprom(sadr,(buf[i]-0x30));
	sadr++;
	}
	}
	break;
case 1: wait();
     LCDCOM_W=0xc4;
     for(i=0;i<4;i++)
	{
         wait();
   	dat=LCDDATA_R;
   	buf[i]=dat;
	}
	wait();
	LCDCOM_W=0xc9;
	for(i=0;i<4;i++)
	{
  	wait();
  	dat=LCDDATA_R;
  	buf[i+4]=dat;
	}                              /*根据参数是否被修改标志,将参数回存EEPROM*/

	if(modified)
	{
  	sadr=0x0008;
 	for(i=0;i<8;i++)
 	{
	dat=writebyte_eeprom(sadr,(buf[i]-0x30));
	sadr++;
	}
}
	break;

case 2: wait();
     LCDCOM_W=0x98;
     for(i=0;i<4;i++)
	{
         wait();
   	dat=LCDDATA_R;
   	buf[i]=dat;
	}
	wait();
	LCDCOM_W=0x9d;
	for(i=0;i<4;i++)
	{
  	wait();
  	dat=LCDDATA_R;
  	buf[i+4]=dat;
	}                              /*根据参数是否被修改标志,将参数回存EEPROM*/

	if(modified)
	{
  	sadr=0x0010;
 	for(i=0;i<8;i++)
 	{
	dat=writebyte_eeprom(sadr,(buf[i]-0x30));
	sadr++;
	}
}
	break;

case 3: wait();
     LCDCOM_W=0xd8;
     for(i=0;i<4;i++)
	{
         wait();
   	dat=LCDDATA_R;
   	buf[i]=dat;
	}
	wait();
	LCDCOM_W=0xdd;
	for(i=0;i<4;i++)
	{
  	wait();
  	dat=LCDDATA_R;
  	buf[i+4]=dat;
	}                              /*根据参数是否被修改标志,将参数回存EEPROM*/

	if(modified)
	{
  	sadr=0x0018;
 	for(i=0;i<8;i++)
 	{
	dat=writebyte_eeprom(sadr,(buf[i]-0x30));
	sadr++;
	}
}
	break;
}
for(i=0;i<8;i++)
  if(!sdight(buf[i]))
  warnbeep(1);             /*数据转换与读取错误告警并死机*/

⌨️ 快捷键说明

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