|
本程序是《MSP430系列單片機(jī)系統(tǒng)工程設(shè)計(jì)與實(shí)踐》書里面的源碼,(包含工程文件 (例4.1.123)))完整例程下載:http://www.torrancerestoration.com/bbs/dpj-46245-1.html
‘
關(guān)于本程序的詳細(xì)解說(shuō)大家可以下載電子書點(diǎn)擊上圖即可
- /*
-
- MSP430F4XX系列單片機(jī)超級(jí)終端交互范例程序
- 說(shuō)明:該程序示范用串口作為標(biāo)準(zhǔn)終端輸入/輸出設(shè)備的范例。Windows自帶有"超級(jí)
- 終端"軟件,運(yùn)行后可以將PC機(jī)模擬成一個(gè)標(biāo)準(zhǔn)終端設(shè)備,其中PC機(jī)的屏幕變
- 成字符型輸出終端設(shè)備,PC機(jī)鍵盤變成標(biāo)準(zhǔn)字符輸入設(shè)備。printf/scanf函數(shù)
- 可以向標(biāo)準(zhǔn)字符終端設(shè)備打印/獲取信息,因此,通過(guò)串口連接到PC機(jī)并運(yùn)行
- 超級(jí)終端軟件后,可以將printf函數(shù)的結(jié)果打印在PC機(jī)屏幕上,也能從PC機(jī)鍵
- 盤向單片機(jī)輸入數(shù)據(jù)和信息。終端最常用的場(chǎng)合有:
- 1。利用超級(jí)終端軟件,能夠在沒(méi)有顯示、鍵盤設(shè)備的單片機(jī)系統(tǒng)上方便地構(gòu)
- 造一種人機(jī)交互方法。且?guī)缀鯚o(wú)成本。
- 2。對(duì)于某些隱蔽的功能(如系統(tǒng)校準(zhǔn)菜單),不向用戶開(kāi)放,由終端進(jìn)行操作,
- 供廠家維護(hù)使用。
- 3。系統(tǒng)運(yùn)行過(guò)程中,從終端輸出日志信息、系統(tǒng)狀態(tài)、各種參數(shù)等數(shù)據(jù)。從
- 而為檢修提供便利。
- 4。軟件設(shè)計(jì)過(guò)程中,用于調(diào)試軟件。特別對(duì)于某些不允許暫停的程序(比如對(duì)
- 機(jī)械系統(tǒng)的控制),開(kāi)發(fā)環(huán)境提供的變量查看功能要求暫停程序才能查看,
- 而利用終端可以在運(yùn)行中察看變量、跟蹤路徑等。
- 從 開(kāi)始->程序->附件->通訊->超級(jí)終端 運(yùn)行軟件,第一次運(yùn)行會(huì)要求輸
- 入電話和區(qū)號(hào)(早期Modem設(shè)備的要求,隨便填)。輸入文件名,選擇串口號(hào),設(shè)
- 置波特率4800,8位數(shù)據(jù),無(wú)校驗(yàn),無(wú)流量控制,連接。程序由6段范例構(gòu)成,
- 演示時(shí),依次恢復(fù)每一段運(yùn)行。
- scanf/printf函數(shù)只負(fù)責(zé)格式化輸入/輸出字符數(shù)據(jù)流,printf函數(shù)具體輸
- 出到何種設(shè)備上由putchar()函數(shù)決定。scanf函數(shù)從何設(shè)備上獲取字符數(shù)據(jù)流
- 由getchar()函數(shù)決定。在UART.c文件中提供了向串口發(fā)送數(shù)據(jù)的putchar函數(shù)
- 和從串口讀入字符的函數(shù)getchar函數(shù),因此scanf/printf函數(shù)所操作的設(shè)備是
- 串口。超級(jí)終端軟件可以將串口字符映射到屏幕上,也可將PC鍵盤的輸入發(fā)送到
- 串口上,并能解析控制字符(\n\r\f\t等)。因此借助超級(jí)終端軟件可以將計(jì)算機(jī)
- 的屏幕和鍵盤映射為單片機(jī)的屏幕和鍵盤。當(dāng)然,也可編寫其他的putchar函數(shù)
- 例如將字符顯示在LCD上,則printf的打印結(jié)果會(huì)輸出在LCD上。(參考《深入剖
- 析printf函數(shù)》程序范例);或編寫從按鈕讀入字符的getchar函數(shù),則scanf的
- 輸入從按鈕得到(參考《scanf函數(shù)移植》程序范例)
- 在所有的C語(yǔ)言編譯器中,均有printf/scanf等IO接口函數(shù),一般由編譯器
- 廠商以庫(kù)程序的形式提供。IAR的編譯器提供兩種庫(kù)程序:CLIB和DLIB,其默認(rèn)
- 是DLIB。但DLIB是為C++語(yǔ)言提供的庫(kù),若用C語(yǔ)言編程應(yīng)該使用CLIB。在工程
- 管理窗口的工程名上右鍵->Options 彈出設(shè)置菜單,在General Options項(xiàng)內(nèi)選
- 擇Library Configuration頁(yè),選擇當(dāng)前庫(kù)為CLIB。還可在Library Option頁(yè)內(nèi)
- 設(shè)置printf/scanf函數(shù)的大小。越大兼容的格式越多,但程序編譯出來(lái)也越大。
- 可根據(jù)實(shí)際需要自行配置。
- 除了printf/scanf函數(shù)外,CLIB庫(kù)還提供上百個(gè)標(biāo)準(zhǔn)C語(yǔ)言函數(shù),各個(gè)函數(shù)
- 的功能、用法、頭文件可參考<<IAR C LIBRARY FUNCTIONS Reference Guide>>
- 該文件位于 EW430安裝目錄\430\doc\clib.pdf
-
- //=========================================================================
- (C)西安電子科技大學(xué) 測(cè)控技術(shù)與儀器教研中心 編寫:謝楷
-
- */
- //******************************************************************************
- //
- // MSP430FE425
- // +-----------------+
- // | XIN|-
- // | | 32kHz
- // | XOUT|-
- // | |
- // | (TXD)P2.4|----------->(TTL/232)----> RXD(2)
- // | | 4800 bps ,n,8,1
- // | (RXD)P2.5|<-----------(TTL/232)<---- TXD(3) PC(DB9)
- // | |
- // | GND |---------------------------GND(5)
- //
- //******************************************************************************
- #include "msp430x42x.h" /*430寄存器頭文件*/
- #include "UART.h" /*串口通訊程序庫(kù)頭文件*/
- #include "stdio.h" /*標(biāo)準(zhǔn)IO設(shè)備頭文件(printf/scanf函數(shù)所需)*/
- #include "math.h" /*數(shù)學(xué)函數(shù)庫(kù)*/
- #include "LCD_Display.h" /*LCD顯示函數(shù)庫(kù)頭文件*/
- #include "ADC16.h" /*ADCc采樣函數(shù)庫(kù)頭文件*/
- int Count=0; //打印次數(shù)
- long Number;
- long High,Weight,BMI;
- int ADC_Value,i;
-
- void main( void )
- { unsigned long int i=0;
- WDTCTL=WDTPW+WDTHOLD; //停止看門狗
- FLL_CTL0|=XCAP18PF; //配置晶振負(fù)載電容
- P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4;
- P2DIR|=BIT0+BIT1+BIT2+BIT3; //不用的IO設(shè)為輸出
- P1OUT=0;P2OUT=0; //以免不確定電平造成額外耗電
- BTCTL=0;//LCD會(huì)用到BasicTimer,BTCTL在復(fù)位過(guò)程不會(huì)自動(dòng)初始化,需要人工清零
- LCD_Init(); //初始化液晶顯示
- UART_Init(4800,'n',8,1); //串口初始化,設(shè)置成4800bps,無(wú)校驗(yàn),8位數(shù)據(jù),1位停止
- ADC16_Init(2,0,'S',1); //ADC2設(shè)為外部輸入,數(shù)據(jù)格式有符號(hào),1倍放大
- while(1)
- {
- for(i=0;i<80000;i++); //延遲
- //---------------------------------------------------------------------
- //基本功能演示范例
- printf("\nHello World!\n"); //打印到超級(jí)終端
- printf("歡迎光臨\n"); //中文也支持!
- //Count++;
- //printf("第%d次打印\n",Count); //能夠支持格式化數(shù)據(jù)打印
- //printf("根號(hào)%d等于%f\n",Count,sqrt(Count)); //能夠支持浮點(diǎn)數(shù)
- //printf("根號(hào)%d約等于%.2f\n",Count,sqrt(Count)); //能夠支持小數(shù)格式
-
- //---------------------------------------------------------------------
- /* //輸入數(shù)字到變量
- printf("請(qǐng)輸入數(shù):");
- scanf("%ld",&Number);
- printf("%ld平方等于%ld\n\n",Number,Number*Number);
- */
- //---------------------------------------------------------------------
- /* //調(diào)試顯示函數(shù)的例子
- printf("請(qǐng)輸入顯示數(shù)值:");
- scanf("%ld",&Number);
- LCD_DisplayLongNumber(Number);
- */
- //---------------------------------------------------------------------
- /* //暫停程序,單步調(diào)試的例子
- getchar(); //暫停在此,每按回車一次,運(yùn)行一次
- Count++;
- LCD_DisplayNumber(Count);
- printf("Count=%d\n",Count);
- */
- //---------------------------------------------------------------------
- /* //調(diào)試ADC的例子
- ADC16_VrefOn(); //打開(kāi)基準(zhǔn)源
- Analog_On(); //打開(kāi)外設(shè)電源P2.2(如果有必要)
- for(i=0;i<100;i++); //略延遲,等待穩(wěn)定
- ADC_Value=ADC16_Sample(2,1); //ADC2單次采樣
- ADC16_VrefOff(); //打開(kāi)基準(zhǔn)源
- Analog_Off(); //關(guān)閉外設(shè)電源P2.2(如果有必要)
- printf("ADC2的采樣值=%d ",ADC_Value);
- printf("對(duì)應(yīng)電壓=%.4fV\n",(float)ADC_Value*0.6/32768);
- */
- //---------------------------------------------------------------------
- /* //計(jì)算肥胖率的例子(人機(jī)對(duì)話)
- printf("請(qǐng)輸入身高(cm):");
- scanf("%ld",&High);
- printf("請(qǐng)輸入體重(kg):");
- scanf("%ld",&Weight);
- BMI=Weight*100000/(High*High);
- printf("您的肥胖率=%ld.%ld\n",BMI/10,BMI%10);
- if(BMI<180) printf("太瘦了,多吃點(diǎn)!!\n\n");
- else if(BMI<240) printf("太帥了,請(qǐng)保持!!\n\n");
- else if(BMI<280) printf("再瘦一點(diǎn)點(diǎn)就帥了,加油!!\n\n");
- else if(BMI<320) printf("輕度肥胖,要注意哦!!\n\n");
- else if(BMI<360) printf("中度肥胖,要減肥了!!\n\n");
- else printf("重度肥胖,隨便吃吧,已經(jīng)沒(méi)救了!!\n\n");
- */
- //---------------------------------------------------------------------
- }
- }
復(fù)制代碼
|
|