|
自己做的一個控制板,上面掛的器件比較多,IO 不夠用了,
同時也不想用按鍵來控志;
直接寫了一個的串口控制臺,用來PC下發(fā)命令字調(diào)試其它器件
(相比串口直接字節(jié)下發(fā)數(shù)據(jù), 命令字多了穩(wěn)定性和雜波干擾的可能, 重啟和插拔串口不會導致控制中心不穩(wěn)
以及避除了數(shù)據(jù)與命令重復的問題),
單片機再執(zhí)行命令字各種操作, -------單片機接收時先尋找第一字節(jié)=AA,再尋找第二字節(jié)55,匹配后才認為是命令字
單片機程序內(nèi)簡單使用了16組CMD, 可以按照自行情況修改,很好用 ,測試了1w次沒有問題
| 幀頭1 | 幀頭2 | CMD(理論可以做254組命令字,0初值) | 幀頭 | AA | 55 | 1 | 幀頭 | AA | 55 | 2 | 幀頭 | AA | 55 | 3 | 幀頭 | AA | 55 | 4 | 幀頭 | AA | 55 | 5 | 幀頭 | AA | 55 | 6 | 幀頭 | AA | 55 | 7 | 幀頭 | AA | 55 | 8 | 幀頭 | AA | 55 | 9 | 幀頭 | AA | 55 | 10 | 幀頭 | AA | 55 | .. | 幀頭 | AA | 55 | .. | 幀頭 | AA | 55 | FE | 幀頭 | AA | 55 | FF |
單片機用的STC15FW408AS, 數(shù)碼管:共陽三位5631AS
電路原理圖如下:
408as.JPG (104.17 KB, 下載次數(shù): 83)
下載附件
2020-3-20 15:14 上傳
uart1.JPG (154.87 KB, 下載次數(shù): 87)
下載附件
2020-3-20 15:16 上傳
uart11.JPG (151.93 KB, 下載次數(shù): 96)
下載附件
2020-3-20 15:16 上傳
單片機源程序如下:
- /******************************************/
- /************* 本地常量聲明 **************/
- #define MAIN_Fosc 22118400L //定義主時鐘
- #include "STC15Fxxxx.H"
- /*****************************************************************************/
- #include<3LED_anode.H>//數(shù)碼管驅(qū)動顯示程序
- #include<beep.H> //蜂鳴器驅(qū)動
- #include<UART1.H> // UART1, 408AS沒有串口2,TIMER1
- #include<led.H> // LED顯示燈
- /*****************************************************************************/
- //IO 設置
- //P1 標準雙向
- #define P1M0SET 0x00 //設置I/O口工作方式//00000000(左到右,高到低位)
- #define P1M1SET 0x00 //設置I/O口工作方式//00000000
- // P2 標準雙向
- #define P2M0SET 0x00 //設置I/O口工作方式//00000000
- #define P2M1SET 0x00 //設置I/O口工作方式//00000000
- //P3.6 (DS18B20---DATA OD門)
- #define P3M0SET 0x40 //設置I/O口工作方式//01000000
- #define P3M1SET 0x40 //設置I/O口工作方式//01000000
- /************* 串口部分 **************/
- u8 idata RX1_Buffer[RX1_Lenth]; //接收緩沖
- u8 TX1_Cnt; //發(fā)送計數(shù)
- u8 RX1_Cnt; //接收計數(shù)
- bit B_TX1_Busy; //發(fā)送忙標志
- /**********************************************/
- //串口發(fā)送數(shù)組,測試數(shù)組
- unsigned char code TXtest_data[]={
- 0x88,0x99,0x66,0x77,0x99,
- };//
- /**********************************************/
- unsigned int tmp=0;
- unsigned int tem=0;//
- unsigned char rec_cnt=0;
- unsigned char rec_cmd=0;
- /***********************************************/
- void rec_cmd1(void);
- void CMD_DO(void);
- void trans_tmp(void);
- void Pinit (void);
- /************* 本地函數(shù)聲明 **************/
- /**********************************************/
- void main()
- {
- /**********************************************/
- unsigned char i;
- unsigned int KK;
- unsigned int sn;
- unsigned char CMD_TYPE;
-
- delay1ms(300); //延時待系統(tǒng)穩(wěn)定
- /**********************************************/
- beepdi(); //蜂鳴
- /**********************************************/
- UART1_init (); //串口初始化 串口1,timer2
- /**********************************************/
- REN = 1; //允許接收
- ES = 1; //允許中斷
- EA = 1; //允許全局中斷
- /**********************************************/
- ledoff(1);
- ledoff(2);
- ledoff(3);
- ledoff(4);
- /**********************************************/
- SendString("STC15W408AS Uart Test !\r\n");
- SendString("幀頭:");
- SendString("aa:");
- SendString("55:");
- /**********************************************/
-
-
-
- while (1)
- {
-
- rec_cmd1();
- CMD_DO();
-
- }
- /**********************************************/
- /**********************************************/
- }
- /************* 408AS **************/
- void rec_cmd1(void)
- {
-
-
- if (rec_cnt!=RX1_Cnt) // 接收計數(shù)有變化
- {
- rec_cnt=RX1_Cnt;
- /**********************************************/
- if(RX1_Cnt == 0) //收到過數(shù)據(jù)>=3字節(jié),接收計數(shù)變化,尋找?guī)^會有浪費
- {
-
- if(RX1_Buffer[29]==0xaa) //aa 幀頭尋找
- {
- if ((RX1_Buffer[29]==0xaa)&(RX1_Buffer[30]==0x55))//AA&55雙字節(jié)定幀
- {
- rec_cmd=RX1_Buffer[31];
- }
- }
- }
- /**********************************************/
- if(RX1_Cnt == 1) //收到過數(shù)據(jù)>=3字節(jié),接收計數(shù)變化,尋找?guī)^會有浪費
- {
- if(RX1_Buffer[30]==0xaa) //aa 幀頭尋找
- {
- if ((RX1_Buffer[30]==0xaa)&(RX1_Buffer[31]==0x55))//AA&55雙字節(jié)定幀
- {
- rec_cmd= RX1_Buffer[0];
- }
- }
- }
- /**********************************************/
- if(RX1_Cnt == 2) //收到過數(shù)據(jù)>=3字節(jié),接收計數(shù)變化,尋找?guī)^會有浪費
- {
-
- if(RX1_Buffer[31]==0xaa) //aa 幀頭尋找
- {
- if ((RX1_Buffer[31]==0xaa)&(RX1_Buffer[0]==0x55))//AA&55雙字節(jié)定幀
- {
- rec_cmd=RX1_Buffer[1];
-
-
- }
- }
-
- }
- /**********************************************/
- if(RX1_Cnt >= 3) //收到過數(shù)據(jù)>=3字節(jié),接收計數(shù)變化,尋找?guī)^會有浪費
- {
-
- if(RX1_Buffer[RX1_Cnt-3]==0xaa) //aa 幀頭尋找
- {
- if ((RX1_Buffer[RX1_Cnt-0x03]==0xaa)&(RX1_Buffer[RX1_Cnt-0x02]==0x55))//AA&55雙字節(jié)定幀
- {
- rec_cmd=RX1_Buffer[RX1_Cnt-1];
- }
- }
- }
-
- }
- }
- /************* 408AS **************/
- /********************* UART1中斷函數(shù)************************/
- /************* 408AS **************/
- void CMD_DO(void)
- {
-
- switch(rec_cmd)
- {
- case 0x1://
- ledon(0x01);
- rec_cmd=0;
- break;//
- case 0x02://
- ledon(0x02);
- rec_cmd=0;
- break;//
- case 0x03://
- ledon(0x03);
- rec_cmd=0;
- break;//
- case 0x04://
- ledon(0x04);
- rec_cmd=0;
- break;//
- case 0x5://
- displayHH1(1) ;
- rec_cmd=0;
- break;//
- case 0x06://
- displayHH1(2);
- rec_cmd=0;
- break;//
- case 0x07://
- displayHH1(3);
- rec_cmd=0;
- break;//
- case 0x08://
- displayHH1(4);
- rec_cmd=0;
- break;//
- case 0x9://
- displayHH2(1) ;
- rec_cmd=0;
- break;//
- case 0x0a://
- displayHH2(2);
- rec_cmd=0;
- break;//
- case 0x0b://
- displayHH2(3);
- rec_cmd=0;
- break;//
- case 0x0c://
- displayHH2(4);
- rec_cmd=0;
- break;//
- case 0x0d://
- displayHH3(1) ;
- rec_cmd=0;
- break;//
- case 0x0e://
- displayHH3(2);
- rec_cmd=0;
- break;//
- case 0x0f://
- displayHH3(3);
- rec_cmd=0;
- break;//
- case 0x10://
- displayHH3(4);
- rec_cmd=0;
- break;//
- case 0x11://
- displayHH3(8);
- rec_cmd=0;
- break;//
- default :
- rec_cmd=0;;
- };
-
- }
- /********************* 函數(shù)************************/
- //M0,M1 IO口設定模式
- //(0,0) 標準雙向
- //(0,1) 推挽輸出,強上拉輸出
- //(1,0) 高阻,僅輸入
- //(1,1) 開漏IO,內(nèi)部上拉斷開
- /***********************************************///P口初始化 DS18B數(shù)據(jù)要OD設計
- void Pinit (void){
- P3M1=P3M1SET;
- P3M0=P3M0SET;
- P1M0=P1M0SET;
- P1M1=P1M1SET;
- P2M0=P2M0SET;
- P2M1=P2M1SET;
- }
- /*******************************************/
- /**********************************************/
- /*
-
- //串口數(shù)據(jù)處理
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
|
-
-
串口控制臺.zip
2020-3-20 15:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
63.44 KB, 下載次數(shù): 19, 下載積分: 黑幣 -5
源碼--調(diào)試用-STC15W408AS
-
-
408AS.zip
2020-3-20 15:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
334.2 KB, 下載次數(shù): 15, 下載積分: 黑幣 -5
原理圖和數(shù)碼管以及串口控制臺編碼文檔
評分
-
查看全部評分
|