MSP430程序库四printf和scanf函数移植探索.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MSP430程序库四printf和scanf函数移植printf 和scanf函数是C语言中最常用的输入出函数,从学习C语言开始,就开始使用这两个函数,然而当写用C语言写单片机程序时却不能使用这两个函数,总觉得单片机的C语言和一般的C语言差别很大,写起来不大方便;其实,单片机的C语言也是标准C语言上扩展或是改动的,都支持格式化输入输出函数(printf 和scanf);事实上,printf,scanf只负责格式化输入输出的字符,至于从哪儿输入,输出到哪儿,他们分别依靠getchar和putchar函数,只要实现单片机上的getchar函数和putchar函数,即可正常使用printf函数和scanf函数,这可以给我们单片机的信息交互带来很多方便。下面我们就来实现他们的移置。 硬件介绍: 硬件部分只需字符型输入输出设备:scanf从输入字符型设备读取字符,printf输出到字符型输出设备。在这里,我选用的字符型输入设备是超级终端,通过串口与单片机连接,输入字符;输出设备是超级终端和12864的液晶。scanf从串口读入字符,printf输出字符到串口和液晶。 有关串口的预提信息参考:MSP430程序库二UART异步串口。 有关液晶的具体信息参考:MSP430程序库三12864液晶程序库。 scanf还可以从按键读取信息,可以参考移置方法自行移置。 程序实现: printf 单片机在调用printf时,printf是负责将数据解析成ASCII码流,通过调用putchar函数依次将字符发出。如果在putchar内编写从串口发送一字节数据,则printf的结果将从单片机串口发送出;如果putchar是向液晶写字符,让液晶显示一个字符,则printf的结果将显示在液晶上。本程序实现putchar同时向串口和液晶同时发送一个字符(液晶是显示一个字符)。 putchar函数如下: int putchar(int ch) { putchar2Com(ch); putchar2Lcd(ch); return (ch); } 程序先向串口发送一个字符,然后像向晶发送字符。 其中:putchar2Com,向串口发送一个字符,代码如下: int putchar2Com(int ch) { if (ch == \n) // \n(回车)扩展成 \n\r (回车+换行) { UartWriteChar(\r) ; //0x0d 换行 } UartWriteChar(ch); //从串口发出数据 return (ch); } 代码仅仅调用向串口写字符的函数UartWriteChar(ch)(详见Uart.c,在二中有介绍),当要输出换行时,需先输出’\n’将光标移至本行首位置,还需要’\r’(换行)才能将光标置于下一行起始位置,即将’\n’扩展为’\r’,’\n’两个字节依次发出。 purchar2Lcd函数比较复杂,因为我所使用的12864液晶是中文字库的液晶,每行8个地址,可以显示8个中文字符或16个英文字符,而putchar只发出一个字节,需要判断每个地址的前半字还是后半字(因为每个字可以显示中文,如果中文的两个字节在相邻的两个地址上,将不会显示,或是显示乱码)。 上代码: int putchar2Lcd(int ch) { char addr,dat; if (ch == \n) // \n(回车),换行 { ChangeNextRow(); } else { addr = LcdReadAddr(); if(ch 0x80) { LcdWriteData(ch); } else { LcdWriteData(0x20); //写入一个空字符,根据地址判断是否为前半字 if(addr == LcdReadAddr()) //前半字 从新写入ch字符 { LcdWriteComm(addr); LcdWriteData(ch); } else { LcdWriteComm(addr); dat = LcdReadData();

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档