请教:串口通信时怎样发送中文字符??&LCD1602/12864送数据方式不同??
大家好,我是这个论坛的新成员,刚学AVR不到一个月。这段时间在搞AVR的串口通信时遇到一个问题,就是在写串口通信程序时怎么将中文字符串发送到电脑让串口调试助手显示出来,我下载了几个串口调试助手,有些是可以显示单片机发送过来的中文字符的,但有些却不能。现在我就想知道可不可以在写单片机串口通信程序的时候将中文字符串转换成某种格式的编码再发送到串口调试助手显示出来呢??我先贴出我的串口通信程序的主要部分://主函数
int main(void)
{
Port_Init();//端口,寄存器初始化
Usart_Init();
Usart_PutString("知识共享");
Usart_PutString("^_^");
sei(); //使能全局中断
while(1)
{
}
}
//字节发送函数
void Usart_PutChar(unsigned char cTXData)
{
while( !(UCSRA & (1 << UDRE)) );//只有数据寄存器为空时才能发送数据
UDR = cTXData; //发送数据送USART I/O数据寄存器-UDR
}
//字符串发送
void Usart_PutString(unsigned char *pcString)
{
while (*pcString)
{
Usart_PutChar(*pcString++);
}
Usart_PutChar(0x0D);
Usart_PutChar(0x0A);//结尾发送回车换行
}
这里可能涉及到的是编码的知识,我对这方面了解甚少,所以希望大家指教!在这里我还想问一个问题,就是关于LCD1602和LCD12864送显示数据时候的区别,我在写LCD1602/12864的显示程序的时候发现下面这个问题:
在写字符数据到LCD时,为什么写入LCD1602的可以不用指针来送数据,但写到12864一定要用指针来送数据?
LCD1602可以这样写数据
//在指定的(x,y)位置写入字符数据
void Write_Data_Char(unsigned char x,unsigned char y,unsigned char Data)
{
Write_Place_xy(x,y);//写显示地址
_delay_ms(1);
Write_Data_Byte(Data);//写数据
}
而LCD12864要这样来写数据
//指定位置显示一个字符
void Write_Data_Char(uchar x,uchar y,uchar *LCD_Data)
{
Write_Address(x,y);//写显示地址
_delay_ms(1);
Write_Data_Byte(*LCD_Data);//一定要用指针来送数据,跟1602不同
}
期待马老师还有论坛的其他大哥大姐们的答案,先说声谢谢!^_^...... 中文字符发内码
C51汉字解决方案
用超级终端接收
对于第二个问题,关键是Write_Data_Byte(uchar data)这样定义的还是Write_Data_Byte(uchar *data)这样定义的 呵呵,很感谢1楼的大哥帮我解答!对于第二个问题,之前我用过的是像写1602这样来写的程序,即这种方式:
//在指定的(x,y)位置写入字符数据
void Write_Data_Char(unsigned char x,unsigned char y,unsigned char Data)
{
Write_Place_xy(x,y);//写显示地址
_delay_ms(1);
Write_Data_Byte(Data);//写数据
}
但是发现显示不出来,不管是在仿真还是在硬件上,可能是我程序的其它部分出现错误吧,我再试试看! 第二个问题
Write_Data_Byte(Data);
Write_Data_Byte(*LCD_Data);
这两种写法都正确,都是传递一个值,区别就是Data里就是数据,而LCD_Data里是该数据的地址,*LCD_Data仍然是数据 呵呵,很感谢cqfeiyu大哥这么耐心给我讲解,我明白了,谢谢您!
页:
[1]