当串口助手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.我之后是想通过两个蓝牙模块进行两个单片机之间传输据(如距离,压力等数据)。
希望大家能给些解答与建议
|