- /******單片機與電腦串口通信控制,附帶遙控控制********/
- /****** 單片機接收電腦串口發(fā)出的指令并執(zhí)行相應動作。同時,也接收無線遙控發(fā)出的信號,并執(zhí)行動作**************/
- #include <REG51.H>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數(shù)碼管編碼,預留
- uchar code ACT[4]={0xfe,0xfd,0xfb,0xf7};//數(shù)碼管顯示相關,預留
- /*************************************************************/
- uchar code as[]=" shoudao zhiling :\0";
- uchar a=0x30,b;
- sbit D1=P2^3;
- sbit D2=P2^4;
- //****************************************************
- void init(void)
- {
-
- TMOD=0x20;
- TH1=0xfd;
- TL1=0xfd;
- SCON=0x50;
- TR1=1;
- ES=1;
- EA=1;
- }
- //************************
- void delay(uint k)
- {
- uint data i,j;
- for(i=0;i<k;i++)
- {
- for(j=0;j<121;j++){;}
- }
- }
- //**************************************
- void main(void)
- {
- uchar i,temp;
- P2=0xff;
- delay(3000);/******因為單片機上電后IO腳成高電平狀態(tài),所以延時一下,下面把需要的引腳清0******、
- P1=0x00;
- D1=0;//要控制的引腳,清0.防止上電動作后不能復原
- D2=0;
- init();
- while(1)
- {
- if(P1!=0x00) //無線遙控接收腳狀態(tài)掃描
- {delay(10);
- if(P1!=0x00)
- temp=P1;
- }
-
- switch(temp )//遙控接收處理
- {
- case 0x01:D1=1;break;
- case 0x02:D1=0;break;
- case 0x04:D2=1;break;
- case 0x08:D2=0;break;
- default:break;
- }
- switch(b)//串口接收數(shù)據(jù)處理
- {
- case 0x31:D1=1;break;
- case 0x32:D1=0;break;
- case 0x33:D2=1;break;
- case 0x34:D2=0;break;
- case 0x35:D1=0;D2=0;break;
- default:break;
- }
- delay(1);
- if(RI)
- {
- RI=0;i=0;
- while(as[i]!='\0'){SBUF=as[i];while(!TI);TI=0;i++;} //串口發(fā)送數(shù)據(jù)
- SBUF=b;while(!TI);TI=0; //回應串口指令內容
- EA=1;
- }
- }
- }
- //*****************************************
- void serial_serve(void) interrupt 4 //串口中斷
- {
- a=SBUF;
- b=a;
- EA=0;
- }
復制代碼
|