欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

學(xué)51單片機(jī)-UART口發(fā)送一串字符

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:74835 發(fā)表于 2015-4-8 22:38 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
      
       昨天說的是如何通過UART口發(fā)送一個(gè)英文字母,其實(shí)對(duì)照那個(gè)ASCII碼表,大小寫字母、數(shù)字、標(biāo)點(diǎn),還有一些符號(hào)都可以發(fā)送,只要你找到它對(duì)應(yīng)的編碼就行。
       今天說一下如何用UART口發(fā)送字符串和漢字。
       如果按照昨天的思路,發(fā)送一串字母或者數(shù)字也很好實(shí)現(xiàn),我只要把這串字母或者數(shù)字對(duì)應(yīng)的ASCII碼找出來,寫進(jìn)一個(gè)數(shù)組就行了。但是這樣還要查表,有點(diǎn)麻煩,今天說一個(gè)更簡單的方法。
       假如我想發(fā)送5個(gè)字母 A,用昨天的方法,怎么實(shí)現(xiàn)?定義一個(gè)數(shù)組:
       Uchar table[] = {0x41,0x41,0x41,0x41,0x41};              //五個(gè)字母 A
       顯得很傻,這次的方法:
       Uchar table[] =”AAAAA”;                            //五個(gè)字母A
       有沒有覺得這個(gè)很高端~~~
       如果我想發(fā)送漢字呢?
       Uchar table[] = “大家好,我是MCU起航!”;                     //字符串
       為什么會(huì)這樣簡單?又要扯編碼的事了,雖然我也不是很懂。
首先,我們知道計(jì)算機(jī)能識(shí)別的是二進(jìn)制的編碼:0和1.
而ASCII碼是處理英文信息的標(biāo)準(zhǔn)編碼,hello,fine,thank you!等等語句都可以用ASCII碼表示。
那么漢字呢?為了讓我們國家的語言沖出亞洲,走進(jìn)計(jì)算機(jī),也要有一套統(tǒng)一的編碼。于是,1981年5月,國家標(biāo)準(zhǔn)局頒布了《信息交換用漢字編碼字符集——基本集》,代號(hào)為GB2312-8.在這套編碼里面,漢字用兩個(gè)字節(jié)表示。
而我們寫的這一串字符,在進(jìn)行編譯的時(shí)候,KEIL會(huì)幫我們生成相應(yīng)的編碼,統(tǒng)稱為:機(jī)內(nèi)碼!漢字有漢字的機(jī)內(nèi)碼,英文有英文的機(jī)內(nèi)碼。
說了這么多,開始寫程序,還是昨天的電路,今個(gè)顯示的字符多一點(diǎn)!如下圖:

  1. /**********************51單片機(jī)學(xué)習(xí)例程************************
  2. *  平臺(tái):Keil U4 + STC89C52
  3. *  名稱:UART口傳輸一個(gè)字符 A
  4. *  編寫:起航
  5. *  晶體:11.0592MHZ
  6. ******************************************************************/

  7. #include <reg52.h>
  8. #define jingzhen     11059200UL                         /*使用11.0592M晶體*/         
  9. #define botelv   9600UL                     /*波特率定義為9600*/
  10. unsigned char zifuchuan[]="大家好,我是MCU起航!";                        //待顯示字符。
  11. volatile unsigned char sending;

  12. void delay(unsigned char i)
  13. {
  14.         unsigned char j,k;
  15.         for(j=i;j>0;j--)
  16.                 for(k=90;k>0;k--);
  17. }
  18. void init(void)                                //串口初始化
  19. {
  20. EA=0; //暫時(shí)關(guān)閉中斷
  21. TMOD&=0x0F;  //定時(shí)器1模式控制在高4位
  22. TMOD|=0x20;    //定時(shí)器1工作在模式2,自動(dòng)重裝模式
  23. SCON=0x50;     //串口工作在模式1
  24. TH1=256-jingzhen/(botelv*12*16);  //計(jì)算定時(shí)器重裝值
  25. TL1=256-jingzhen/(botelv*12*16);
  26. PCON|=0x80;    //串口波特率加倍
  27. ES=1;         //串行中斷允許
  28. TR1=1;        //啟動(dòng)定時(shí)器1
  29. REN=1;        //允許接收
  30. EA=1;         //允許中斷
  31. }

  32. void send(unsigned char d)                  //發(fā)送一個(gè)字節(jié)的數(shù)據(jù),形參d即為待發(fā)送數(shù)據(jù)。
  33. {

  34. SBUF=d; //將數(shù)據(jù)寫入到串口緩沖
  35. sending=1;         //設(shè)置發(fā)送標(biāo)志
  36. while(sending); //等待發(fā)送完畢
  37. }

  38. void sendc(unsigned char * pd)
  39. {
  40. while((*pd)!='\0') //發(fā)送字符串,直到遇到0才結(jié)束
  41. {
  42.   send(*pd); //發(fā)送一個(gè)字符
  43.   pd++;  //移動(dòng)到下一個(gè)字符
  44. }
  45. }

  46. int main()
  47. {
  48.         init();
  49.         while(1)
  50.         {
  51.                         delay(200);
  52.                         sendc(zifuchuan);
  53.         }
  54.         return(0);
  55. }

  56. void uart(void) interrupt 4                 //串口發(fā)送中斷
  57. {
  58. if(RI)    //收到數(shù)據(jù)
  59. {
  60.   RI=0;   //清中斷請(qǐng)求
  61. }
  62. else      //發(fā)送完一字節(jié)數(shù)據(jù)
  63. {
  64.   TI=0;
  65.   sending=0;  //清正在發(fā)送標(biāo)志
  66. }
  67. }
復(fù)制代碼
       下載鏈接: UART_CHAR.zip (31.79 KB, 下載次數(shù): 94)
       對(duì)了,留個(gè)思考題,如果在字符串的結(jié)尾加上 \r  或者  \n 是什么效果,大家可以試試!
       Uchar table[] =”AAAAA\r”;      




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂2 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:208733 發(fā)表于 2017-9-13 11:46 | 只看該作者
樓主強(qiáng)大,下來學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

板凳
ID:325608 發(fā)表于 2018-5-20 17:11 | 只看該作者
學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

地板
ID:190832 發(fā)表于 2018-5-20 19:21 | 只看該作者
啥破玩意?不用去ASCII碼表查找,直接把自己要輸出的用char類型表示就行,比如u8 table[5] = {'A', 'B', 'V', 'D' ,'E'};,通過串口輸出電腦端收到的就是ABCDE
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表