久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3918|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

MSP430單片機(jī)scanf函數(shù)移植按鈕輸入的范例程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:108615 發(fā)表于 2016-3-14 18:42 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本程序是《MSP430系列單片機(jī)系統(tǒng)工程設(shè)計(jì)與實(shí)踐》書(shū)里面的源碼,完整例程下載(包含工程文件 (例4.1.5))):http://www.zg4o1577.cn/bbs/dpj-46245-1.html

關(guān)于本程序的詳細(xì)解說(shuō)大家可以下載電子書(shū)點(diǎn)擊上圖即可
  1. /*
  2.                
  3.                       scanf函數(shù)移植按鈕輸入的范例程序

  4.   說(shuō)明:在《超級(jí)終端人機(jī)對(duì)話范例》程序中,利用串口作為標(biāo)準(zhǔn)終端輸入/輸出設(shè)備
  5.         連接PC機(jī),再通過(guò)Windows自帶"超級(jí)終端"軟件將PC機(jī)模擬成一個(gè)標(biāo)準(zhǔn)終端設(shè)備,
  6.         將printf函數(shù)的結(jié)果打印在PC機(jī)屏幕上,也能通過(guò)scanf函數(shù)從PC機(jī)鍵盤(pán)向單片
  7.         機(jī)輸入數(shù)據(jù)。
  8.             scanf函數(shù)具體從何種設(shè)備輸入上由getchar()函數(shù)決定。本例示范將
  9.         getchar()函數(shù)改寫(xiě)成為從按鈕讀入一個(gè)字符,即可從按鈕輸入數(shù)據(jù)到變量。
  10.         這樣可以很方便的借助scanf函數(shù)強(qiáng)大的格式化輸入功能輸入各種復(fù)雜的信息。
  11.             這種將不同功能的函數(shù)做成相同且簡(jiǎn)潔的接口形式,是C語(yǔ)言編程的基本
  12.         思想之一,也是C語(yǔ)言具有很強(qiáng)的通用性和移植性的原因。
  13.             MAGIC430學(xué)習(xí)板上只有3個(gè)按鈕,為了輸入10個(gè)數(shù)字和其他字符,用KEY1來(lái)
  14.         選擇字符,KEY2確認(rèn)輸入一個(gè)字符,KEY3作為回車。在實(shí)際應(yīng)用中,也會(huì)廣泛
  15.         采用類似的方法節(jié)省按鈕數(shù)量。當(dāng)然,如果按鍵數(shù)量足夠,程序可以簡(jiǎn)化。
  16.             GetChar.c文件里寫(xiě)有新的getchar()函數(shù),原來(lái)在UART.c的getchar函數(shù)(
  17.         向串口發(fā)送字符)被注釋掉了。
  18.             

  19. //=========================================================================


  20.   (C)西安電子科技大學(xué) 測(cè)控技術(shù)與儀器教研中心 編寫(xiě):謝楷 2008/02/23
  21.   
  22. */
  23. //******************************************************************************
  24. //                        
  25. //
  26. //                MSP430FE425
  27. //                +-----------------+
  28. //                |              XIN|-
  29. //                |                 | 32kHz
  30. //  +-KEY1 選擇---|P1.5         XOUT|-
  31. //  |             |                 |
  32. //  +-KEY2 確認(rèn)---|P1.6    (TXD)P2.4|----------->  //  ----> RXD(2)
  33. //  |             |                 | 300~115200 bps            
  34. //  +-KEY3 回車---|P1.7    (RXD)P2.5|<-----------  //  <---- TXD(3)  PC(DB9)
  35. //  |             |                 |
  36. // GND            |             GND |------------------------GND(5)
  37. //
  38. //******************************************************************************
  39. #include "msp430x42x.h"    /*430寄存器頭文件*/
  40. #include "stdio.h"         /*標(biāo)準(zhǔn)IO設(shè)備頭文件(printf/scanf函數(shù)所需)*/
  41. #include "LCD_Display.h"   /*LCD顯示函數(shù)庫(kù)頭文件*/
  42. #include "BasicTimer.h"    /*BasicTimer定時(shí)器函數(shù)庫(kù)*/
  43. #include "UART.h"          /*串口函數(shù)庫(kù)*/

  44. long int a,b;
  45. void main( void )
  46. {
  47.   WDTCTL=WDTPW+WDTHOLD;  //停止看門(mén)狗
  48.   FLL_CTL0|=XCAP18PF;          //配置晶振負(fù)載電容
  49.   P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4;
  50.   P2DIR|=BIT0+BIT1+BIT2+BIT3;       //不用的IO設(shè)為輸出
  51.   P1OUT=0;P2OUT=0;                  //以免不確定電平造成額外耗電
  52.   BT_Init(16);                       //BT 1/8秒中斷一次
  53.   UART_Init(4800,'n',8,1);          //串口設(shè)置4800bps,無(wú)校驗(yàn),8位數(shù)據(jù),1位停止
  54.    while(1)
  55.    {
  56.      printf("\n----------演示開(kāi)始!------------\n\n");//打印到超級(jí)終端
  57.      printf("請(qǐng)輸入一個(gè)數(shù)字A:");  //打印到超級(jí)終端     
  58.      scanf("%ld",&a);             //從按鈕輸入一個(gè)數(shù)A
  59.      printf("\n請(qǐng)輸入一個(gè)數(shù)字B:");//打印到超級(jí)終端     
  60.      scanf("%ld",&b);             //從按鈕輸入一個(gè)數(shù)B
  61.      printf("\n%ld+%ld=%ld\n",a,b,a+b); //將A+B的結(jié)果打印出來(lái)
  62.      printf("\n----------演示結(jié)束!------------\n\n");//打印到超級(jí)終端
  63.      getchar();                  //按任意鍵重新開(kāi)始
  64.    }
  65. }
復(fù)制代碼

puchar.c
  1. #include "msp430x42x.h"  /*單片機(jī)寄存器頭文件*/
  2. #include "ctype.h"       /*isdigit函數(shù)需要該頭文件*/
  3. #include "LCD_Display.h" /*LCD函數(shù)庫(kù)頭文件*/
  4. char  FirstChrFlag=1;  //第一個(gè)字符標(biāo)志位


  5. /****************************************************************************
  6. * 名    稱:putchar()
  7. * 功    能:向LCD顯示屏輸出一個(gè)ASCII字符。
  8. * 入口參數(shù):ch: 待發(fā)送的字符  
  9. * 出口參數(shù):發(fā)出的字符
  10. * 說(shuō)    明: printf函數(shù)會(huì)調(diào)用該函數(shù)作為底層輸出。該函數(shù)將字符輸出到LCD上
  11.             因此printf的結(jié)果將顯示在LCD上。
  12. ****************************************************************************/
  13. int putchar(int ch)
  14. {
  15. if(FirstChrFlag) LCD_Clear(); //第一個(gè)字符到來(lái)的時(shí)候清除上一屏顯示內(nèi)容
  16. FirstChrFlag=0;
  17. if(ch=='\f')     LCD_Clear(); //'\f'表示走紙翻頁(yè),相當(dāng)于清除顯示
  18. if(isdigit(ch))  LCD_InsertChar(ch-0x30); //若字符是數(shù)字則顯示數(shù)字
  19. //數(shù)字和對(duì)應(yīng)ASCII字母之間差0x30   '1'=0x31 '2'=0x32... isdigit也是C語(yǔ)言標(biāo)準(zhǔn)函數(shù)
  20. else             //否則,不是數(shù)字,是字母
  21. {
  22.     switch(ch)    //根據(jù)字母選擇程序分支
  23.     {
  24.       case 'A': case 'a':  LCD_InsertChar(AA);break;  //字符A
  25.       case 'B': case 'b':  LCD_InsertChar(BB);break;  //字符B
  26.       case 'C': case 'c':  LCD_InsertChar(CC);break;  //...
  27.       case 'D': case 'd':  LCD_InsertChar(DD);break;  
  28.       case 'E': case 'e':  LCD_InsertChar(EE);break;
  29.       case 'F': case 'f':  LCD_InsertChar(FF);break;
  30.       case 'G': case 'g':  LCD_InsertChar(GG);break;
  31.       case 'H': case 'h':  LCD_InsertChar(HH);break;
  32.       case 'I': case 'i':  LCD_InsertChar(II);break;
  33.       case 'J': case 'j':  LCD_InsertChar(JJ);break;
  34.       case 'K': case 'k':  LCD_InsertChar(KK);break;
  35.       case 'L': case 'l':  LCD_InsertChar(LL);break;
  36.       case 'M': case 'm':  LCD_InsertChar(mm);break;
  37.       case 'N':            LCD_InsertChar(NN);break;
  38.       case 'n':            LCD_InsertChar(nn);break;
  39.       case 'O':            LCD_InsertChar(OO);break;
  40.       case 'o':            LCD_InsertChar(oo);break;
  41.       case 'P': case 'p':  LCD_InsertChar(PP);break;
  42.       case 'Q': case 'q':  LCD_InsertChar(QQ);break;
  43.       case 'R': case 'r':  LCD_InsertChar(rr);break;
  44.       case 'S': case 's':  LCD_InsertChar(SS);break;
  45.       case 'T': case 't':  LCD_InsertChar(tt);break;
  46.       case 'U': case 'v':  LCD_InsertChar(UU);break;
  47.       case 'V': case 'u':  LCD_InsertChar(VV);break;
  48.       case 'W': case 'w':  LCD_InsertChar(WW);break;
  49.       case 'Y': case 'y':  LCD_InsertChar(YY);break;  //...
  50.       case 'Z': case 'z':  LCD_InsertChar(ZZ);break;  //字符Z
  51.       case '-':            LCD_InsertChar(BR);break;  //字符-
  52.       case '`':            LCD_InsertChar(DT);break;  //字符`
  53.       case ' ':            LCD_InsertChar(SP);break;  //空格
  54.       case '.':            LCDM1|=0x10;       break;  //小數(shù)點(diǎn),直接顯示在右下角
  55.       case '\n': case '\r':  FirstChrFlag=1;  break;  //換行符的下一個(gè)字母將清屏
  56.       default :            LCD_InsertChar(SP);break;//顯示不出來(lái)的字母用空格替代
  57.       }
  58.   }
  59. return(ch);  //返回顯示的字符(putchar函數(shù)標(biāo)準(zhǔn)格式要求返回顯示字符)
  60. }

  61. /****************************************************************************
  62. * 名    稱:putchar()
  63. * 功    能:向標(biāo)準(zhǔn)終端設(shè)備發(fā)送一字節(jié)數(shù)據(jù)(1個(gè)ASCII字符)
  64. * 入口參數(shù):ch: 待發(fā)送的字符  
  65. * 出口參數(shù):發(fā)出的字符
  66. * 說(shuō)    明: UART.c內(nèi)的putchar函數(shù)printf函數(shù),這里從串口輸出字符到PC機(jī)的超
  67.             級(jí)終端軟件上,printf的結(jié)果將打印到超級(jí)終端上。供對(duì)比。
  68. ****************************************************************************/
  69. /*
  70. int putchar(int ch)
  71. {
  72.   if (ch == '\n')        //  '\n'(回車)擴(kuò)展成 '\n''\r' (回車+換行)
  73.   {
  74.     UART_PutChar(0x0d) ; //'\r'
  75.   }
  76.   UART_PutChar(ch);      //從串口發(fā)出數(shù)據(jù)  
  77.   return (ch);
  78. }
  79. */
復(fù)制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品日韩在线观看 | 亚洲精品天堂 | 午夜一区 | 久久国产精品久久国产精品 | 亚洲欧美中文日韩在线v日本 | 亚洲视频一区在线观看 | 99re在线免费视频 | 国产精品久久久久久久粉嫩 | 成人免费一区二区三区牛牛 | 麻豆国产一区二区三区四区 | 视频在线一区二区 | 亚洲精品久久区二区三区蜜桃臀 | 久久躁日日躁aaaaxxxx | 欧美一区二区三区视频在线播放 | 国产美女在线免费观看 | 国产精品爱久久久久久久 | www.99re | 亚洲自拍偷拍欧美 | 精区3d动漫一品二品精区 | av毛片 | 免费一区二区三区 | 99精品国产一区二区三区 | 在线色| 午夜视频大全 | 久久亚洲精品久久国产一区二区 | 久久久蜜桃一区二区人 | 久久99精品久久久久蜜桃tv | 粉嫩一区二区三区国产精品 | av高清毛片 | 久久一 | 欧美一区二区三区在线观看视频 | 国产精品99久久久久久久久 | 精品国产乱码久久久久久影片 | 欧美a在线 | 亚洲视频在线观看 | 亚洲一区日韩 | 日韩免费一级 | av网站在线免费观看 | 中文字幕不卡在线观看 | 国产视频第一页 | 中文视频在线 |