當串口助手HEX發送45時,LCD1602顯示并不是35,而是69 ,- void Usart() interrupt 4
- {
- uchar D1,D2,D3,Data;
- EA = 0;
- Data=SBUF; //出去接收到的數據
- RI = 0; //清除接收中斷標志位
- D1 = Data/100;
- Data = Data%100;
- D2 = Data/10;
- D3 = Data%10;
- LcdWriteCom(0xC0 + 8);
- LcdWriteData(D1+0x30);
- LcdWriteData(D2+0x30);
- LcdWriteData(D3+0x30);
- EA = 1;
- }
復制代碼 通過發現修改了一下
- void Usart() interrupt 4
- {
- uchar D1,D2,D3,Data;
- EA = 0;
- Data=SBUF; //出去接收到的數據
- RI = 0; //清除接收中斷標志位
- if(Data < 100 && Data >= 0) //輸入十進制數小于64
- {
- D1 = Data%16; //個位
- Data = Data/16;
- D2 = Data%16; //十位
- D3 = 0;
- }
- if(Data >= 100 && Data < 256) //輸入十進制數大于等于64 小于100
- {
- D1 = Data%16; //個位
- Data = Data/16;
- D2 = Data%16; //十位
- D3 = 0;
- }
- LcdWriteCom(0xC0 + 8);
- LcdWriteData(D3+0x30);
- LcdWriteData(D2+0x30);
- LcdWriteData(D1+0x30);
- EA = 1;
- }
復制代碼
這個原因是:45是通過十六進制發送,即4*16+5*1=69。
有個疑問:串口助手發送45,單片機接收的不也應該是45嗎?應該只是傳輸是以十六進制傳輸?!
現在的結果是:
我最高發送十進制99(十六進制255),發送十進制100/101(十六進制256/257)就顯示000/001了(好像是Hex發送時只能使兩位數,100就是發送10 0, 101就是10 1);
我想問下就是:1.我要串口發送十進制數大于100(如125),這樣現在的程序轉換就不行了,應該怎么傳輸125這個數?
(定義數組,再依次傳 1 , 2 , 5 ,在LCD顯示???)
2.我之后是想通過兩個藍牙模塊進行兩個單片機之間傳輸據(如距離,壓力等數據)。
希望大家能給些解答與建議  
|