|
- /***************************************************
- 單字節(jié)藍(lán)牙控制小車程序 電機(jī)口是P0
- 通過上位機(jī)的1,2,3,4,5,6,7,8,9控制單片機(jī)
- 單片機(jī):STC12C5608AD
- 晶振:11.0592M
- 作者:蘇義江
- 時(shí)間:2015-8-10
- ***********************************************/
- #include<reg52.h>
- #include<math.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar Buffer[4] = {0}; //從串口接收的數(shù)據(jù)
- uint i,j;
- sbit Leftdeng=P1^2;//左大燈
- sbit Righdeng=P1^3;//右大燈
- /********************************************************************
- * 名稱 : Delay_1ms()
- * 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x
- * 輸入 : x (延時(shí)一毫秒的個(gè)數(shù))
- * 輸出 : 無
- ***********************************************************************/
- void Delay_1ms(uint i)//1ms延時(shí)
- {
- uchar x,j;
- for(j=0;j<i;j++)
- for(x=0;x<=148;x++);
- }
- /********************************************************************
- * 名稱 : Com_Int()
- * 功能 : 串口中斷子函數(shù)
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void Com_Int(void) interrupt 4
- {
-
- EA = 0;
- if(RI == 1) //當(dāng)硬件接收到一個(gè)數(shù)據(jù)時(shí),RI會(huì)置位
- {
- Buffer[0] = SBUF - 48; //這里減去48是因?yàn)閺碾娔X中發(fā)送過來的數(shù)據(jù)是ASCII碼。
- RI = 0;
- }
- EA = 1;
- }
- /********************************************************************
- * 名稱 : Com_Init()
- * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中斷
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void Com_Init(void)
- {
- TMOD = 0x20;
- PCON = 0x00;
- SCON = 0x50;
- TH1 = 0xFd; //設(shè)置波特率 9600
- TL1 = 0xFd;
- TR1 = 1; //啟動(dòng)定時(shí)器1
- ES = 1; //開串口中斷
- EA = 1; //開總中斷
- }
- /********************************************************************
- * 名稱 :Moto_Forward()
- * 功能 : 電機(jī)1、2啟動(dòng),都是前進(jìn),整車表現(xiàn)為前進(jìn)。
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void Moto_Forward()
- {
- P1= 0xaf;//1010 1111
- Delay_1ms(100);
- }
- /********************************************************************
- * 名稱 :Moto_Backward()
- * 功能 : 電機(jī)1、2啟動(dòng),都是后退,整車表現(xiàn)為后退。
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void Moto_Backward()
- {
- P1= 0x5f;//0101 1111
- Delay_1ms(100);
- }
- /********************************************************************
- * 名稱 :Moto_TurnLeft()
- * 功能 : 電機(jī)1后退,電機(jī)2前進(jìn),整車表現(xiàn)為左轉(zhuǎn)。
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void Moto_TurnLeft()
- {
- P1= 0x6f;//0110 1111
- Delay_1ms(100);
- }
- /********************************************************************
- * 名稱 :Moto_TurnRight()
- * 功能 : 電機(jī)1前進(jìn),電機(jī)2后退,整車表現(xiàn)為右轉(zhuǎn)。
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void Moto_TurnRight()
- {
- P1= 0x9f;//1001 1111
- Delay_1ms(100);
- }
- /********************************************************************
- * 名稱 :Moto_Stop()
- * 功能 : 電機(jī)1停止,電機(jī)2停止,整車表現(xiàn)為停止。
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void Moto_Stop()
- {
- P1= 0x00;
- Delay_1ms(100);
- }
- /********************************************************************
- * 名稱 :LightTurnOn()
- * 功能 : 打開車燈。
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void LightTurnOn()
- {
- Leftdeng=0;
- Righdeng=0;
- }
- /********************************************************************
- * 名稱 :LightTurnOff()
- * 功能 : 關(guān)閉車燈。
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void LightTurnOff()
- {
- Leftdeng=1;
- Righdeng=1;
- }
- /********************************************************************
- * 名稱 :main()
- * 功能 : 主函數(shù)
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void main()
- {
- Delay_1ms(100);
- Com_Init();//串口初始化
-
- while(1)
- {
- switch(Buffer[0])
- {
- case 0: Moto_Stop(); break;//停止
- case 1: Moto_Forward(); break;//前進(jìn)
- case 2: Moto_Backward(); break;//后退
- case 3: Moto_TurnLeft(); break;//左轉(zhuǎn)
- case 4: Moto_TurnRight(); break;//右轉(zhuǎn)
- case 8: LightTurnOn(); break;//開大燈
- case 9: LightTurnOff(); break;//關(guān)大燈
- default:break;
- }
- }
- }
復(fù)制代碼
|
|