|
大家好,我是这个论坛的新成员,刚学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不同
}
期待马老师还有论坛的其他大哥大姐们的答案,先说声谢谢!^_^...... |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|