1272|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

MSP430单片机printf函数移植 [复制链接]

#include "msp430x42x.h"  /*单片机寄存器头文件*/
#include "ctype.h"       /*isdigit函数需要该头文件*/
#include "LCD_Display.h" /*LCD函数库头文件*/
char  FirstChrFlag=1;  //第一个字符标志位


/****************************************************************************
* 名    称:putchar()
* 功    能:向LCD显示屏输出一个ASCII字符。
* 入口参数:ch: 待发送的字符  
* 出口参数:发出的字符
* 说    明: printf函数会调用该函数作为底层输出。该函数将字符输出到LCD上
            因此printf的结果将显示在LCD上。
****************************************************************************/
int putchar(int ch)
{
if(FirstChrFlag) LCD_Clear(); //第一个字符到来的时候清除上一屏显示内容
FirstChrFlag=0;
if(ch=='\f')     LCD_Clear(); //'\f'表示走纸翻页,相当于清除显示
if(isdigit(ch))  LCD_InsertChar(ch-0x30); //若字符是数字则显示数字
//数字和对应ASCII字母之间差0x30   '1'=0x31 '2'=0x32... isdigit也是C语言标准函数
else             //否则,不是数字,是字母
{
    switch(ch)    //根据字母选择程序分支
    {
      case 'A': case 'a':  LCD_InsertChar(AA);break;  //字符A
      case 'B': case 'b':  LCD_InsertChar(BB);break;  //字符B
      case 'C': case 'c':  LCD_InsertChar(CC);break;  //...
      case 'D': case 'd':  LCD_InsertChar(DD);break;  
      case 'E': case 'e':  LCD_InsertChar(EE);break;
      case 'F': case 'f':  LCD_InsertChar(FF);break;
      case 'G': case 'g':  LCD_InsertChar(GG);break;
      case 'H': case 'h':  LCD_InsertChar(HH);break;
      case 'I': case 'i':  LCD_InsertChar(II);break; 
      case 'J': case 'j':  LCD_InsertChar(JJ);break;
      case 'K': case 'k':  LCD_InsertChar(KK);break;
      case 'L': case 'l':  LCD_InsertChar(LL);break;
      case 'M': case 'm':  LCD_InsertChar(mm);break;
      case 'N':            LCD_InsertChar(NN);break;
      case 'n':            LCD_InsertChar(nn);break;
      case 'O':            LCD_InsertChar(OO);break;
      case 'o':            LCD_InsertChar(oo);break;
      case 'P': case 'p':  LCD_InsertChar(PP);break; 
      case 'Q': case 'q':  LCD_InsertChar(QQ);break; 
      case 'R': case 'r':  LCD_InsertChar(rr);break; 
      case 'S': case 's':  LCD_InsertChar(SS);break; 
      case 'T': case 't':  LCD_InsertChar(tt);break; 
      case 'U': case 'v':  LCD_InsertChar(UU);break; 
      case 'V': case 'u':  LCD_InsertChar(VV);break; 
      case 'W': case 'w':  LCD_InsertChar(WW);break; 
      case 'Y': case 'y':  LCD_InsertChar(YY);break;  //...
      case 'Z': case 'z':  LCD_InsertChar(ZZ);break;  //字符Z
      case '-':            LCD_InsertChar(BR);break;  //字符-
      case '`':            LCD_InsertChar(DT);break;  //字符`
      case ' ':            LCD_InsertChar(SP);break;  //空格
      case '.':            LCDM1|=0x10;       break;  //小数点,直接显示在右下角
      case '\n': case '\r':  FirstChrFlag=1;  break;  //换行符的下一个字母将清屏
      default :            LCD_InsertChar(SP);break;//显示不出来的字母用空格替代
      } 
  } 
return(ch);  //返回显示的字符(putchar函数标准格式要求返回显示字符)
}

/****************************************************************************
* 名    称:putchar()
* 功    能:向标准终端设备发送一字节数据(1个ASCII字符)
* 入口参数:ch: 待发送的字符  
* 出口参数:发出的字符
* 说    明: UART.c内的putchar函数printf函数,这里从串口输出字符到PC机的超
            级终端软件上,printf的结果将打印到超级终端上。供对比。
****************************************************************************/
/*
int putchar(int ch)
{
  if (ch == '\n')        //  '\n'(回车)扩展成 '\n''\r' (回车+换行) 
  {
    UART_PutChar(0x0d) ; //'\r'
  }
  UART_PutChar(ch);      //从串口发出数据  
  return (ch);
}
*/

 

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表