📄 uart+lcm13.c
字号:
{ order=0x33;goto outkey;}
//guangbo
if(p1volumn==0xcf)
{order=0x22;goto outkey;}
//-------------------------------------------------
//1
if(p1volumn==0xdf)
{if(status==0xff)
{nslave=1;
flag_inputnumberok=1;
DLYnumberatxx(1,2,0,number[nslave]);
goto outkey;}}
//2
if(p1volumn==0xef)
{if(status==0xff)
{nslave=2;
flag_inputnumberok=1;
DLYnumberatxx(1,2,0,number[nslave]);
goto outkey;}}
//3
if(p1volumn==0xc7)
{if(status==0xff)
{nslave=3;
flag_inputnumberok=1;
DLYnumberatxx(1,2,0,number[nslave]);
goto outkey;}}
//4
if(p1volumn==0xe7)
{
if(status==0xff)
{
nslave=4;
flag_inputnumberok=1;
DLYnumberatxx(1,2,0,number[nslave]);
goto outkey;
}
}
//5
if(p1volumn==0xf7)
{
if(status==0xff)
{
nslave=5;
flag_inputnumberok=1;
DLYnumberatxx(1,2,0,number[nslave]);
}
}
//--------------------------------------------
outkey://for(i=0;i<200;i++)
delay(200);
flag_int0 = 0;
EX0 = 1 ;
}
//------------------------
void DLYspeaktoall()
{
uchar i;
//uchar line,column,page;
CLRlcmscn();
for(i=0;i<3;i++)
DLYfigueratxx(1,1,i+1,guangbozhong[i]);
for(i=0;i<3;i++)
DLYfigueratxx(0,1,i,qingshaohou[3]);
DLYlineoff();
}
//-------------------------------------------------
void DLYnSLVERR(void)
{
bit tcs;
uchar i,j,k,n;
CLRlcmscn();
n=0;
for(j=0;j<6;j++)
{
if(slverrnum[j])
{
if(n>3)
{
tcs=0;
//page=0xb8;
k=n-4;}
else
{tcs=1;
k=n;}
DLYnumberatxx(tcs,1,k,number[j+1]);
n=n+1;
}
}
//display wuliantong
for(i=0;i<4;i++)
DLYfigueratxx(1,2,i,canntlink[i]);
DLYqueren_quxiao(1,0);
}
//---------------------------------------
void DLYallok()
{
uchar i;
CLRlcmscn();
for(i=0;i<2;i++)
DLYfigueratxx(1,1,i+2,douyi[i]);
for(i=0;i<2;i++)
DLYfigueratxx(0,1,i,canntlink[i+2]);
DLYqueren_quxiao(1,0);
}
//-----------------------------------
void DLYqingshaohou(bit flag_clearlcm)
{
uchar i;
if(flag_clearlcm)
CLRlcmscn();
for(i=0;i<3;i++)
DLYfigueratxx(1,2,i,qingshaohou[i]);
for(i=0;i<3;i++)
DLYfigueratxx(0,2,i,qingshaohou[3]);
}
//--------------------------------------------
void DLYnonote()
{
uchar i;
CLRlcmscn();
for(i=0;i<4;i++)
DLYfigueratxx(1,0,i,hujiaojilu[i]);
for(i=0;i<2;i++)
DLYfigueratxx(1,2,i+2,zanwu[i]);
for(i=0;i<2;i++)
DLYfigueratxx(0,2,i,hujiaojilu[i+2]);
status=0x00;
}
//-----------------------------------------------------------
void DLYcheckall()
{
uchar i;
//uchar line,column,page;
CLRlcmscn();
for(i=0;i<2;i++)
DLYfigueratxx(1,1,i,xunjian[i]);
DLYfigueratxx(1,1,2,guangbozhong[2]);
DLYqingshaohou(0);
DLYqueren_quxiao(0,1);
}
//-------------------------------------------------
void DLYcallone()
{
uchar i;
CLRlcmscn();
DLYfigueratxx(1,1,0,qingshaohou[0]);
for(i=0;i<3;i++)
DLYfigueratxx(1,1,i+1,calln[i]);
for(i=0;i<4;i++)
DLYfigueratxx(0,1,i,calln[i+3]);
DLYqueren_quxiao(1,1);
}
//--------------------------------------------------
void DLYnslvereqanswer()
{
bit tcs;
uchar i,j,k,n;
CLRlcmscn();
for(i=0;i<4;i++)
DLYfigueratxx(1,0,i,hujiaojilu[i]);
DLYfigueratxx(0,0,0,calln[6]);
n=0;
for(j=0;j<6;j++)
{
if(slvreqnum[j])
{
if(n>3)
{
tcs=0;
//page=0xb8;
k=n-4;}
else
{tcs=1;
k=n;}
DLYnumberatxx(tcs,1,k,number[j+1]);
n=n+1;
}
for(i=0;i<2;i++)
DLYfigueratxx(1,2,i,nslvereqanswer[i]);
DLYfigueratxx(1,2,2,ceng);
DLYfigueratxx(1,2,3,nslvereqanswer[2]);
for(i=0;i<3;i++)
DLYfigueratxx(0,2,i,nslvereqanswer[i+3]);
}
//DLYhuifu();
/*while(flag_statuschange);
flag_statuschange=0;*/
status=0x00;
}
//---------------------------------------------------
void DLYspeaktonslv(uchar n)
{
uchar i;
CLRlcmscn();
DLYfigueratxx(1,1,0,yu);
DLYnumberatxx(1,1,1,number[n]);
for(i=0;i<2;i++)
DLYfigueratxx(1,1,i+2,nslvereqanswer[i]);
for(i=0;i<2;i++)
DLYfigueratxx(1,2,i+1,nslvereqanswer[i+4]);
DLYfigueratxx(1,2,3,guangbozhong[2]);
for(i=0;i<3;i++)
DLYfigueratxx(0,2,i,qingshaohou[3]);
for(i=0;i<2;i++)
DLYfigueratxx(0,3,i+2,guaduan[i]);
}
//-----------------------------------------------
DLYnslvnowreqanwser()
{
uchar i;
DLYnumberatxx(1,0,1,number[nslvreqnumber]);
for(i=0;i<2;i++)
DLYfigueratxx(1,0,i+1,nslvereqanswer[i]);
for(i=0;i<2;i++)
DLYfigueratxx(1,1,i+2,zhengzai[i]);
for(i=0;i<2;i++)
DLYfigueratxx(0,2,i,nslvereqanswer[i+4]);
for(i=0;i<2;i++)
DLYfigueratxx(1,3,i,jieting[i]);
DLYqueren_quxiao(0,1);
}
//--------------------------------
void cleartdatabuf()
{
tdata_rec_2[1]=0x00;
tdata_rec_2[0]=0x00;
}
//------------------------------------
void lineoff()
{}
//------------------------------------------------------
/*void DLYlinkwithnslv()
{
CLRlcmscn();
DLYfigueratxx(1,1,0,nslvereqanswer[0]);
}*/
//----------------------------------------------------
void dealuart()
{
if((tdata_buf[0]==0xaa)&&((tdata_buf[0]^tdata_buf[1]^tdata_buf[2]^tdata_buf[3]^tdata_buf[4])==tdata_buf[5])&&(tdata_buf[6]==0x55))
{
if(tdata_buf[1]==0x01)
{
tdata_rec_1[0]=tdata_buf[3];
tdata_rec_1[1]=tdata_buf[4];
flag_channel_1_data=1;
}
else if(tdata_buf[1]==0x02)
{
tdata_rec_2[0]=tdata_buf[3];
tdata_rec_2[1]=tdata_buf[4];
flag_channel_2_data=1;
//p35=0;
}
}
flag_uart=0;
//ES=1;
}
//---------------------------------
void dealuartdata()
{
//deal ch1 data
if(flag_channel_1_data==1)
{}
//deal ch2 data
if(flag_channel_2_data==1)
{
//checkall result
if(tdata_rec_2[0]==0x66)
{
flag_allhavecheck=1;
goto out8;
}
//callnslave
if(tdata_rec_2[0]==0x33)
//if(tdata_rec_2[1]==0x00)
{
flag_callnslvok=1;
goto out8;
}
//startcheck
if(tdata_rec_2[0]==0x11)
if(tdata_rec_2[1]==0x00)
{
flag_startcheck=1;
goto out8;
}
if(tdata_rec_2[0]==0x22)
if(tdata_rec_2[1]==0x00)
{
flag_allok=1;
goto out8;
}
//one slave req anwser now
/* if(tdata_rec_2[0]==0x66)
if(!flag_ch1_busy)
{
status=0x55;
nslvnowreqanw=tdata_rec_1[1];
flag_channel_2_data=0;
}
else
//one slave req anwser note
{
//status=0x44;
slvreqnum[tdata_rec_2[1]]=0x01;
flag_soundalert=1;
flag_channel_2_data=0;
}
if(tdata_rec_2[0]==0x33)
{
flag_callnslvok=1;
flag_channel_2_data=0;
}*/
out8:flag_channel_2_data=0;
}
}
//----------------------------------------
void checkallslv()
{
tpakage(com_checkall,0);
while(1)
{
if(flag_uart)
dealuart();
if(flag_channel_2_data==1)
dealuartdata();
if(flag_int0)
dealkey();
//if(flag_lineoff)break;}
if(flag_lineoff)
goto out2;
if(flag_startcheck==1)
{
DLYcheckall();
flag_startcheck=0;
cleartdatabuf();
}
if(flag_allhavecheck) break;
}
out2: order=0x00;
}
//-----------------------------------
void panduannslverr()
{ uchar terr,i,j;
TR0=0;
terr=tdata_rec_2[1];
j=0x01;
for(i=0;i<5;i++)
{
if(terr&j)
slverrnum[i]=0x00;
else slverrnum[i]=0x01;
j=j<<1;
}
cleartdatabuf();
TR0=1;
/*
if(terr&0x02)
slverrnum[1]=0x00;
else slverrnum[1]=0x01;
if(terr&0x04)
slverrnum[2]=0x00;
else slverrnum[2]=0x01;
if(terr&0x08)
slverrnum[3]=0x00;
else slverrnum[3]=0x01;
if(terr&0x10)
slverrnum[4]=0x00;
else slverrnum[4]=0x01;
*/
}
//-----------------------------------
void checkall()
{
DLYqingshaohou(1);
DLYqueren_quxiao(0,1);
checkallslv();
if(flag_lineoff){status=0x00;goto out3;}
if(flag_allhavecheck)
{
flag_allhavecheck=0;
if(tdata_rec_2[1]==0x1f)
{
DLYallok();
flag_soundalert=1;
}
else
{
panduannslverr();
flag_soundalert=1;
DLYnSLVERR();
}
cleartdatabuf();
}
tpakage(com_checkallover,0);
out3: order=0x00;
}
//----------------------------
calleveryone()
{
while(1)
{
if(flag_uart)
dealuart();
if(flag_channel_2_data==1)
dealuartdata();
if(flag_int0)
dealkey();
if(flag_lineoff)
goto out6;
if(flag_allok==1)
//{
// flag_allok=0;
break;
// }
}
out6:order=0x00;
}
//--------------------------------------------
void speaktoall()
{
DLYqingshaohou(1);
calleveryone();
if(flag_lineoff){status=0x00;goto out7;}
if(flag_allok)
{
flag_allok=0;
DLYspeaktoall();
cleartdatabuf();
}
out7: order=0x00;
}
//----------------------------------------
/*void oneway()
{
while(1);
}*/
//--------------------------------
void callone()
{
tpakage(com_duijang,1);
while(1)
{
if(flag_uart)
dealuart();
if(flag_int0)
dealkey();
if(flag_channel_2_data==1)
dealuartdata();
if(flag_lineoff)
break;
if(flag_callnslvok) break;
}
order=0x00;
}
//--------------------
void getslavenumber()
{
while(1)
{
if(flag_int0)
dealkey();
if(flag_inputslavenumberok)
{flag_inputslavenumberok=0;
break;}
else if(flag_lineoff)
break;
}
}
//------------------------------------------
void speaktoone()
{
uchar i;
DLYcallone();
status=0xff;
getslavenumber();
if(flag_lineoff){
status=0x00;goto out1;}
DLYqingshaohou(1);
DLYqueren_quxiao(0,1);
callone();
if(flag_lineoff){
status=0x00;goto out1;}
if(flag_callnslvok)
{
cleartdatabuf();
flag_channel_2_data=0;
flag_uart=0;
flag_callnslvok=0;
DLYspeaktonslv(nslave);
}
else {for(i=0;i<4;i++)
DLYfigueratxx(1,2,i,canntlink[i]);
DLYqueren_quxiao(1,0);}
out1:
order=0x00;
flag_callnslvok=0;
}
//--------------------------------
void nslvnowreqanwser()
{
DLYnslvnowreqanwser();
}
//--------------------------------
/*void dealslave1()
{
uchar a;
while(RI==0);
RI=0;
a=SBUF;
SBUF=a;
while(TI==0);
TI=0;
}*/
//------------------------------------
void ser_timer0(void) interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
LEDcount1=LEDcount1+1;
if(LEDcount1==250)
{
LEDcount1=0;
p35=!p35;
if(flag_soundalert)
{
sound=1;
flag_soundalert=0;
}
else sound=0;
}
}
void ser_int0() interrupt 0
{
P1=0xff;
p1volumn=P1;
EX0 = 0;
flag_int0 = 1;
}
void ser_uart() interrupt 4
{
if(RI)
{
p35=!p35;
if(!flag_uart)
{
tdata_buf[count_t_buf]=SBUF;
count_t_buf++;
if(count_t_buf==7)
{
flag_uart=1;
count_t_buf=0;
}
RI=0;
// ES=0;
//flag_uart=1;
//}
}
}
}
//---------------------------------------------
void main()
{
// uchar i;
MCUinit();
LCMinit();
DLYlogo();
//for(i=0;i<254;i++)
delay(254);
status=0x44;
order=0x00;
while(1)
{
if(flag_int0==1)
dealkey();
if(flag_uart==1)
dealuart();
if(order==0x11)//xunjian
{
flag_ch1_busy=1;
checkall();
flag_ch1_busy=0;
}
if(order==0x22)//guangbo
{
flag_ch1_busy=1;
speaktoall();
flag_ch1_busy=0;
}
if(order==0x33)//duijiang
{
flag_ch1_busy=1;
speaktoone();
flag_ch1_busy=0;
}
if(status==0x44)
{
flag_ch1_busy=0;
if(slvreqnum[0]||slvreqnum[1]||slvreqnum[2]||slvreqnum[3]||slvreqnum[4]||slvreqnum[5])
DLYnslvereqanswer();
else DLYnonote();
}
if(flag_lineoff)
{
flag_lineoff=0;
lineoff();
status=0x44;
}
if(status==0x55)
nslvnowreqanwser();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -