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

📄 uart+lcm13.c

📁 是用C语言编写的关于用51单片机控制12864液晶LCD的源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	{	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 + -