昨天說的是如何通過UART口發送一個英文字母,其實對照那個ASCII碼表,大小寫字母、數字、標點,還有一些符號都可以發送,只要你找到它對應的編碼就行。 今天說一下如何用UART口發送字符串和漢字。 如果按照昨天的思路,發送一串字母或者數字也很好實現,我只要把這串字母或者數字對應的ASCII碼找出來,寫進一個數組就行了。但是這樣還要查表,有點麻煩,今天說一個更簡單的方法。 假如我想發送5個字母 A,用昨天的方法,怎么實現?定義一個數組: Uchar table[] = {0x41,0x41,0x41,0x41,0x41}; //五個字母 A 顯得很傻,這次的方法: Uchar table[] =”AAAAA”; //五個字母A 有沒有覺得這個很高端~~~ 如果我想發送漢字呢? Uchar table[] = “大家好,我是MCU起航!”; //字符串 為什么會這樣簡單?又要扯編碼的事了,雖然我也不是很懂。 首先,我們知道計算機能識別的是二進制的編碼:0和1. 而ASCII碼是處理英文信息的標準編碼,hello,fine,thank you!等等語句都可以用ASCII碼表示。 那么漢字呢?為了讓我們國家的語言沖出亞洲,走進計算機,也要有一套統一的編碼。于是,1981年5月,國家標準局頒布了《信息交換用漢字編碼字符集——基本集》,代號為GB2312-8.在這套編碼里面,漢字用兩個字節表示。 而我們寫的這一串字符,在進行編譯的時候,KEIL會幫我們生成相應的編碼,統稱為:機內碼!漢字有漢字的機內碼,英文有英文的機內碼。 說了這么多,開始寫程序,還是昨天的電路,今個顯示的字符多一點!如下圖: 
- /**********************51單片機學習例程************************
- * 平臺:Keil U4 + STC89C52
- * 名稱:UART口傳輸一個字符 A
- * 編寫:起航
- * 晶體:11.0592MHZ
- ******************************************************************/
- #include <reg52.h>
- #define jingzhen 11059200UL /*使用11.0592M晶體*/
- #define botelv 9600UL /*波特率定義為9600*/
- unsigned char zifuchuan[]="大家好,我是MCU起航!"; //待顯示字符。
- volatile unsigned char sending;
- void delay(unsigned char i)
- {
- unsigned char j,k;
- for(j=i;j>0;j--)
- for(k=90;k>0;k--);
- }
- void init(void) //串口初始化
- {
- EA=0; //暫時關閉中斷
- TMOD&=0x0F; //定時器1模式控制在高4位
- TMOD|=0x20; //定時器1工作在模式2,自動重裝模式
- SCON=0x50; //串口工作在模式1
- TH1=256-jingzhen/(botelv*12*16); //計算定時器重裝值
- TL1=256-jingzhen/(botelv*12*16);
- PCON|=0x80; //串口波特率加倍
- ES=1; //串行中斷允許
- TR1=1; //啟動定時器1
- REN=1; //允許接收
- EA=1; //允許中斷
- }
- void send(unsigned char d) //發送一個字節的數據,形參d即為待發送數據。
- {
-
- SBUF=d; //將數據寫入到串口緩沖
- sending=1; //設置發送標志
- while(sending); //等待發送完畢
- }
- void sendc(unsigned char * pd)
- {
- while((*pd)!='\0') //發送字符串,直到遇到0才結束
- {
- send(*pd); //發送一個字符
- pd++; //移動到下一個字符
- }
- }
- int main()
- {
- init();
- while(1)
- {
- delay(200);
- sendc(zifuchuan);
- }
- return(0);
- }
- void uart(void) interrupt 4 //串口發送中斷
- {
- if(RI) //收到數據
- {
- RI=0; //清中斷請求
- }
- else //發送完一字節數據
- {
- TI=0;
- sending=0; //清正在發送標志
- }
- }
復制代碼 下載鏈接:
UART_CHAR.zip
(31.79 KB, 下載次數: 94)
2015-4-8 22:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
對了,留個思考題,如果在字符串的結尾加上 \r 或者 \n 是什么效果,大家可以試試! Uchar table[] =”AAAAA\r”;
|