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