找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3971|回复: 0
打印 上一主题 下一主题
收起左侧

MSP430单片机超级终端人机对话程序

[复制链接]
跳转到指定楼层
楼主
ID:108615 发表于 2016-3-14 19:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本程序是《MSP430系列单片机系统工程设计与实践》书里面的源码,(包含工程文件 (例4.1.123)))完整例程下载:http://www.51hei.com/bbs/dpj-46245-1.html

关于本程序的详细解说大家可以下载电子书点击上图即可
  1. /*
  2.                
  3.                   MSP430F4XX系列单片机超级终端交互范例程序

  4.   说明:该程序示范用串口作为标准终端输入/输出设备的范例。Windows自带有"超级
  5.         终端"软件,运行后可以将PC机模拟成一个标准终端设备,其中PC机的屏幕变
  6.         成字符型输出终端设备,PC机键盘变成标准字符输入设备。printf/scanf函数
  7.         可以向标准字符终端设备打印/获取信息,因此,通过串口连接到PC机并运行
  8.         超级终端软件后,可以将printf函数的结果打印在PC机屏幕上,也能从PC机键
  9.         盘向单片机输入数据和信息。终端最常用的场合有:
  10.         1。利用超级终端软件,能够在没有显示、键盘设备的单片机系统上方便地构
  11.            造一种人机交互方法。且几乎无成本。
  12.         2。对于某些隐蔽的功能(如系统校准菜单),不向用户开放,由终端进行操作,
  13.            供厂家维护使用。
  14.         3。系统运行过程中,从终端输出日志信息、系统状态、各种参数等数据。从
  15.            而为检修提供便利。
  16.         4。软件设计过程中,用于调试软件。特别对于某些不允许暂停的程序(比如对
  17.            机械系统的控制),开发环境提供的变量查看功能要求暂停程序才能查看,
  18.            而利用终端可以在运行中察看变量、跟踪路径等。

  19.             从 开始->程序->附件->通讯->超级终端 运行软件,第一次运行会要求输
  20.         入电话和区号(早期Modem设备的要求,随便填)。输入文件名,选择串口号,设
  21.         置波特率4800,8位数据,无校验,无流量控制,连接。程序由6段范例构成,
  22.         演示时,依次恢复每一段运行。
  23.             scanf/printf函数只负责格式化输入/输出字符数据流,printf函数具体输
  24.         出到何种设备上由putchar()函数决定。scanf函数从何设备上获取字符数据流
  25.         由getchar()函数决定。在UART.c文件中提供了向串口发送数据的putchar函数
  26.         和从串口读入字符的函数getchar函数,因此scanf/printf函数所操作的设备是
  27.         串口。超级终端软件可以将串口字符映射到屏幕上,也可将PC键盘的输入发送到
  28.         串口上,并能解析控制字符(\n\r\f\t等)。因此借助超级终端软件可以将计算机
  29.         的屏幕和键盘映射为单片机的屏幕和键盘。当然,也可编写其他的putchar函数
  30.         例如将字符显示在LCD上,则printf的打印结果会输出在LCD上。(参考《深入剖
  31.         析printf函数》程序范例);或编写从按钮读入字符的getchar函数,则scanf的
  32.         输入从按钮得到(参考《scanf函数移植》程序范例)
  33.             在所有的C语言编译器中,均有printf/scanf等IO接口函数,一般由编译器
  34.         厂商以库程序的形式提供。IAR的编译器提供两种库程序:CLIB和DLIB,其默认
  35.         是DLIB。但DLIB是为C++语言提供的库,若用C语言编程应该使用CLIB。在工程
  36.         管理窗口的工程名上右键->Options 弹出设置菜单,在General Options项内选
  37.         择Library Configuration页,选择当前库为CLIB。还可在Library Option页内
  38.         设置printf/scanf函数的大小。越大兼容的格式越多,但程序编译出来也越大。
  39.         可根据实际需要自行配置。
  40.             除了printf/scanf函数外,CLIB库还提供上百个标准C语言函数,各个函数
  41.         的功能、用法、头文件可参考<<IAR C LIBRARY FUNCTIONS Reference Guide>>
  42.         该文件位于 EW430安装目录\430\doc\clib.pdf
  43.             

  44. //=========================================================================


  45.   (C)西安电子科技大学 测控技术与仪器教研中心 编写:谢楷
  46.   
  47. */
  48. //******************************************************************************
  49. //                        
  50. //               MSP430FE425
  51. //           +-----------------+
  52. //           |              XIN|-
  53. //           |                 | 32kHz
  54. //           |             XOUT|-
  55. //           |                 |
  56. //           |        (TXD)P2.4|----------->(TTL/232)----> RXD(2)
  57. //           |                 | 4800 bps ,n,8,1            
  58. //           |        (RXD)P2.5|<-----------(TTL/232)<---- TXD(3)  PC(DB9)
  59. //           |                 |
  60. //           |             GND |---------------------------GND(5)
  61. //
  62. //******************************************************************************
  63. #include "msp430x42x.h"    /*430寄存器头文件*/
  64. #include "UART.h"          /*串口通讯程序库头文件*/
  65. #include "stdio.h"         /*标准IO设备头文件(printf/scanf函数所需)*/
  66. #include "math.h"          /*数学函数库*/
  67. #include "LCD_Display.h"   /*LCD显示函数库头文件*/
  68. #include "ADC16.h"         /*ADCc采样函数库头文件*/
  69. int Count=0;                      //打印次数
  70. long Number;
  71. long High,Weight,BMI;  
  72. int ADC_Value,i;
  73.   
  74. void main( void )
  75. { unsigned long int i=0;
  76.   WDTCTL=WDTPW+WDTHOLD;  //停止看门狗
  77.   FLL_CTL0|=XCAP18PF;          //配置晶振负载电容
  78.   P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4;
  79.   P2DIR|=BIT0+BIT1+BIT2+BIT3;       //不用的IO设为输出
  80.   P1OUT=0;P2OUT=0;                  //以免不确定电平造成额外耗电
  81.   BTCTL=0;//LCD会用到BasicTimer,BTCTL在复位过程不会自动初始化,需要人工清零
  82.   LCD_Init();              //初始化液晶显示
  83.   UART_Init(4800,'n',8,1); //串口初始化,设置成4800bps,无校验,8位数据,1位停止
  84.   ADC16_Init(2,0,'S',1);   //ADC2设为外部输入,数据格式有符号,1倍放大
  85.    while(1)
  86.    {
  87.      for(i=0;i<80000;i++);                      //延迟
  88. //---------------------------------------------------------------------     
  89.    //基本功能演示范例
  90.      printf("\nHello World!\n");                //打印到超级终端
  91.      printf("欢迎光临\n");                      //中文也支持!
  92.      //Count++;
  93.      //printf("第%d次打印\n",Count);              //能够支持格式化数据打印
  94.      //printf("根号%d等于%f\n",Count,sqrt(Count));      //能够支持浮点数
  95.      //printf("根号%d约等于%.2f\n",Count,sqrt(Count));  //能够支持小数格式
  96.      
  97. //---------------------------------------------------------------------
  98. /*   //输入数字到变量
  99.    printf("请输入数:");
  100.    scanf("%ld",&Number);
  101.    printf("%ld平方等于%ld\n\n",Number,Number*Number);
  102. */
  103. //---------------------------------------------------------------------
  104. /*   //调试显示函数的例子      
  105.    printf("请输入显示数值:");
  106.    scanf("%ld",&Number);
  107.    LCD_DisplayLongNumber(Number);
  108. */
  109. //---------------------------------------------------------------------      
  110. /* //暂停程序,单步调试的例子
  111.    getchar();                //暂停在此,每按回车一次,运行一次
  112.    Count++;
  113.    LCD_DisplayNumber(Count);
  114.    printf("Count=%d\n",Count);
  115. */
  116. //---------------------------------------------------------------------
  117. /*  //调试ADC的例子
  118.   ADC16_VrefOn();        //打开基准源
  119.   Analog_On();           //打开外设电源P2.2(如果有必要)
  120.   for(i=0;i<100;i++);    //略延迟,等待稳定
  121.   ADC_Value=ADC16_Sample(2,1); //ADC2单次采样
  122.   ADC16_VrefOff();        //打开基准源
  123.   Analog_Off();           //关闭外设电源P2.2(如果有必要)
  124.   printf("ADC2的采样值=%d   ",ADC_Value);
  125.   printf("对应电压=%.4fV\n",(float)ADC_Value*0.6/32768);   
  126. */
  127. //---------------------------------------------------------------------      
  128. /* //计算肥胖率的例子(人机对话)
  129.     printf("请输入身高(cm):");
  130.     scanf("%ld",&High);
  131.     printf("请输入体重(kg):");
  132.     scanf("%ld",&Weight);
  133.     BMI=Weight*100000/(High*High);
  134.     printf("您的肥胖率=%ld.%ld\n",BMI/10,BMI%10);
  135.     if(BMI<180)      printf("太瘦了,多吃点!!\n\n");
  136.     else if(BMI<240) printf("太帅了,请保持!!\n\n");
  137.     else if(BMI<280) printf("再瘦一点点就帅了,加油!!\n\n");
  138.     else if(BMI<320) printf("轻度肥胖,要注意哦!!\n\n");
  139.     else if(BMI<360) printf("中度肥胖,要减肥了!!\n\n");
  140.     else             printf("重度肥胖,随便吃吧,已经没救了!!\n\n");
  141. */
  142. //---------------------------------------------------------------------      
  143.    }
  144. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表