|
自己做的一個控制板,上面掛的器件比較多,IO 不夠用了,
同時也不想用按鍵來控志;
直接寫了一個的串口控制臺,用來PC下發命令字調試其它器件
(相比串口直接字節下發數據, 命令字多了穩定性和雜波干擾的可能, 重啟和插拔串口不會導致控制中心不穩
以及避除了數據與命令重復的問題),
單片機再執行命令字各種操作, -------單片機接收時先尋找第一字節=AA,再尋找第二字節55,匹配后才認為是命令字
單片機程序內簡單使用了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, 數碼管:共陽三位5631AS
電路原理圖如下:
408as.JPG (104.17 KB, 下載次數: 83)
下載附件
2020-3-20 15:14 上傳
uart1.JPG (154.87 KB, 下載次數: 87)
下載附件
2020-3-20 15:16 上傳
uart11.JPG (151.93 KB, 下載次數: 96)
下載附件
2020-3-20 15:16 上傳
單片機源程序如下:
- /******************************************/
- /************* 本地常量聲明 **************/
- #define MAIN_Fosc 22118400L //定義主時鐘
- #include "STC15Fxxxx.H"
- /*****************************************************************************/
- #include<3LED_anode.H>//數碼管驅動顯示程序
- #include<beep.H> //蜂鳴器驅動
- #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; //發送計數
- u8 RX1_Cnt; //接收計數
- bit B_TX1_Busy; //發送忙標志
- /**********************************************/
- //串口發送數組,測試數組
- 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);
- /************* 本地函數聲明 **************/
- /**********************************************/
- void main()
- {
- /**********************************************/
- unsigned char i;
- unsigned int KK;
- unsigned int sn;
- unsigned char CMD_TYPE;
-
- delay1ms(300); //延時待系統穩定
- /**********************************************/
- 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) // 接收計數有變化
- {
- rec_cnt=RX1_Cnt;
- /**********************************************/
- if(RX1_Cnt == 0) //收到過數據>=3字節,接收計數變化,尋找幀頭會有浪費
- {
-
- if(RX1_Buffer[29]==0xaa) //aa 幀頭尋找
- {
- if ((RX1_Buffer[29]==0xaa)&(RX1_Buffer[30]==0x55))//AA&55雙字節定幀
- {
- rec_cmd=RX1_Buffer[31];
- }
- }
- }
- /**********************************************/
- if(RX1_Cnt == 1) //收到過數據>=3字節,接收計數變化,尋找幀頭會有浪費
- {
- if(RX1_Buffer[30]==0xaa) //aa 幀頭尋找
- {
- if ((RX1_Buffer[30]==0xaa)&(RX1_Buffer[31]==0x55))//AA&55雙字節定幀
- {
- rec_cmd= RX1_Buffer[0];
- }
- }
- }
- /**********************************************/
- if(RX1_Cnt == 2) //收到過數據>=3字節,接收計數變化,尋找幀頭會有浪費
- {
-
- if(RX1_Buffer[31]==0xaa) //aa 幀頭尋找
- {
- if ((RX1_Buffer[31]==0xaa)&(RX1_Buffer[0]==0x55))//AA&55雙字節定幀
- {
- rec_cmd=RX1_Buffer[1];
-
-
- }
- }
-
- }
- /**********************************************/
- if(RX1_Cnt >= 3) //收到過數據>=3字節,接收計數變化,尋找幀頭會有浪費
- {
-
- if(RX1_Buffer[RX1_Cnt-3]==0xaa) //aa 幀頭尋找
- {
- if ((RX1_Buffer[RX1_Cnt-0x03]==0xaa)&(RX1_Buffer[RX1_Cnt-0x02]==0x55))//AA&55雙字節定幀
- {
- rec_cmd=RX1_Buffer[RX1_Cnt-1];
- }
- }
- }
-
- }
- }
- /************* 408AS **************/
- /********************* UART1中斷函數************************/
- /************* 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;;
- };
-
- }
- /********************* 函數************************/
- //M0,M1 IO口設定模式
- //(0,0) 標準雙向
- //(0,1) 推挽輸出,強上拉輸出
- //(1,0) 高阻,僅輸入
- //(1,1) 開漏IO,內部上拉斷開
- /***********************************************///P口初始化 DS18B數據要OD設計
- void Pinit (void){
- P3M1=P3M1SET;
- P3M0=P3M0SET;
- P1M0=P1M0SET;
- P1M1=P1M1SET;
- P2M0=P2M0SET;
- P2M1=P2M1SET;
- }
- /*******************************************/
- /**********************************************/
- /*
-
- //串口數據處理
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
|
-
-
串口控制臺.zip
2020-3-20 15:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
63.44 KB, 下載次數: 19, 下載積分: 黑幣 -5
源碼--調試用-STC15W408AS
-
-
408AS.zip
2020-3-20 15:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
334.2 KB, 下載次數: 15, 下載積分: 黑幣 -5
原理圖和數碼管以及串口控制臺編碼文檔
評分
-
查看全部評分
|