源程序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 + -
显示快捷键?