wgrk.net
当前位置:首页 >> 51单片机串口通信发送字母或数字,为什么电脑显示... >>

51单片机串口通信发送字母或数字,为什么电脑显示...

波特率,校验位

汉字的话就是传送的GB2312编码,即传说的区位码,一个编码是两个字节,每个字节的值都是大于0x80的,这样跟ASCII码分开。当把编码转换为对应的汉字的时候,就需要在汉字库中根据编码来计算汉字的位置了。

不知道你的发送值范围如果是小于16的数,那么修改如下: void send_com(unsigned char x) { SBUF=x+128; while(TI==0); TI=0; }

你这里的难点在于"只发送一次",可以定义一个标志变量初始为0,当P1.1=0时且标志为0,向串口发送一个数据,并置该标志为1,即使P1.1依然为0也不会一直发送;当检测到P1.1=1时,置标志为0,以便下次再触发。其他依此类推。

汉字乱码是因为你显示汉字的时候使用的码和原来传输的码不匹配,和用什么通信无关

#include#include#define uchar unsigned char#define uint unsigned intsbit SPK=P3^7;uchar FRQ=0x00;//延时void DelayMS(uint ms){uchar i;while(ms--) for(i=0;i

这就对了 0 的ascii码就是48 0-48 1-49 2-50 ........ 9-57 你是按字符发送的,如果用16进制发送,就会发多少得多少了

要写串口程序的代码,串口一般就是波特率问题,下来就是通讯协议的问题,如果只是这4个数字,分开发1234就可以了,

用指针

//代码来自 单片机小精灵v1.3//波特率9600 11.0592晶振 方式2#include void InitUART(void){ TMOD = 0x20; SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; ES = 1; TR1 = 1;}void SendOneByte(unsigned char c){ SBUF = c; while(!T...

网站首页 | 网站地图
All rights reserved Powered by www.wgrk.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com