/* 名稱:甲機發送控制命令字符 說明:甲單片機負責向外發送控制命令字符“A”、“B”、“C”,或者停止發送,乙機根據所接收到的字符完成LED1閃爍、LED2閃爍、雙閃爍、或停止閃爍。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit LED1=P0^0; sbit LED2=P0^3; sbit K1=P1^0; //延時 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i<120;i++); } //向串口發送字符 void Putc_to_SerialPort(uchar c) { SBUF=c; while(TI==0); TI=0; } //主程序 void main() { uchar Operation_No=0; SCON=0x40; //串口模式1 TMOD=0x20; //T1工作模式2 PCON=0x00; //波特率不倍增 TH1=0xfd; TL1=0xfd; TI=0; TR1=1; while(1) { if(K1==0) //按下K1時選擇操作代碼0,1,2,3 { while(K1==0); Operation_No=(Operation_No+1)%4; } switch(Operation_No) //根據操作代碼發送A/B/C或停止發送 { case 0: LED1=LED2=1; break; case 1: Putc_to_SerialPort('A'); LED1=~LED1;LED2=1; break; case 2: Putc_to_SerialPort('B'); LED2=~LED2;LED1=1; break; case 3: Putc_to_SerialPort('C'); LED1=~LED1;LED2=LED1; break; } DelayMS(100); } }
圖片2.png (47.93 KB, 下載次數: 30)
下載附件
2020-7-10 10:22 上傳
1.PCON=0x00; //波特率不倍增-----------------通訊的時候不都是固定波特率的嗎?
2.Operation_No=(Operation_No+1)%4;----------------為什么要加1再對4取余數呢?
3.case 0: LED1=LED2=1; break; case 1: Putc_to_SerialPort('A'); LED1=~LED1;LED2=1; break; case 2: Putc_to_SerialPort('B'); LED2=~LED2;LED1=1; break; case 3: Putc_to_SerialPort('C'); LED1=~LED1;LED2=LED1; break;----------------------------case0和其他的case定義怎么不一樣?LED1=~LED1;LED2=1;------------------先把LED1取反的值給到LED1,然后LED2=1?這個啥意思
|