|
PC機通過上層軟件控制單片機LED的亮滅或者控制LED的閃爍及閃爍時間,上層軟件用戶名密碼均為admin 注意PROTEUS串口仿真需要配合虛擬串口軟件才能工作
1.jpg (120.28 KB, 下載次數: 261)
下載附件
截圖
2016-1-15 12:26 上傳
1.png (4.67 KB, 下載次數: 216)
下載附件
2016-1-15 17:49 上傳
0.png (28.7 KB, 下載次數: 197)
下載附件
2016-1-15 17:49 上傳
所有資料打包下載:
LED控制.rar
(1.6 MB, 下載次數: 486)
2016-1-15 12:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
上位機(包含源碼)軟件說明:
發送數據解析
字節1、2:0x55 0xaa 數據是否正確判斷標志
字節3:
0x01 ------單個LED控制手動控制
0x02 ------單個LED控制自動閃爍
字節4
此字節從低位到高位依次控制LED0-LED7,例如0x01表示手動點亮LED0或者LED0自動閃爍;0x28表示手動點 亮LED3、LED5或者LED3、LED5自動閃爍
字節5、6:表示閃爍時間(6高8位 5低8位) 取值范圍0-5000
程序源碼預覽:
- #include<reg52.h>
- #define uint8 unsigned char
- #define uint16 unsigned int
- uint8 receive_buffer[6]; //存放接收到的數據
- uint8 i,k;
- void delay1ms(uint16 m) //1ms延時程序
- {
- uint8 j;
- while(m--)
- for(j=0;j<112;j++);
- }
- void main()
- {
- uint16 time;
- P0 = 0xff; //初始化LED狀態,熄滅
- TMOD = 0x20; //定時器1工作在方式2
- TH1 = 0xfd;
- TL1 = 0xfd; //波特率9600
- TR1 = 1; //啟動定時器1
- EA = 1; //開啟總中斷
- SM0 = 0;
- SM1 = 1; //串行口工作方式1
- REN = 1; //允許串行接收
- ES = 1; //開啟串行口中斷
- while(1)
- {
- if((receive_buffer[0] == 0x55) && (receive_buffer[1] == 0xaa)) //如果接收到0x55 0xaa說明接收到的數據是正確的
- {
- time = ((uint16)receive_buffer[5] << 8) + (uint16)receive_buffer[4]; //閃爍時間
- switch(receive_buffer[2])
- {
- case 0x01: //手動控制LED亮滅
- P0 = ~receive_buffer[3];
- break;
- case 0x02: //LED自動閃爍
- P0 = ~receive_buffer[3];
- delay1ms(time);
- P0 = 0xff;
- delay1ms(time);
- break;
- default:
- break;
- }
- }
- }
- }
- void uart_int() interrupt 4
- {
- if(RI == 1)
- {
- RI = 0;
- receive_buffer[i] = SBUF;
- i++;
- if(i == 6)
- {
- i = 0;
- k = 0;
- P0 = 0xff;
- }
- }
- }
復制代碼
|
評分
-
查看全部評分
|