昨天說的是如何通過UART口發(fā)送一個英文字母,其實對照那個ASCII碼表,大小寫字母、數(shù)字、標(biāo)點,還有一些符號都可以發(fā)送,只要你找到它對應(yīng)的編碼就行。 今天說一下如何用UART口發(fā)送字符串和漢字。 如果按照昨天的思路,發(fā)送一串字母或者數(shù)字也很好實現(xiàn),我只要把這串字母或者數(shù)字對應(yīng)的ASCII碼找出來,寫進一個數(shù)組就行了。但是這樣還要查表,有點麻煩,今天說一個更簡單的方法。 假如我想發(fā)送5個字母 A,用昨天的方法,怎么實現(xiàn)?定義一個數(shù)組: Uchar table[] = {0x41,0x41,0x41,0x41,0x41}; //五個字母 A 顯得很傻,這次的方法: Uchar table[] =”AAAAA”; //五個字母A 有沒有覺得這個很高端~~~ 如果我想發(fā)送漢字呢? Uchar table[] = “大家好,我是MCU起航!”; //字符串 為什么會這樣簡單?又要扯編碼的事了,雖然我也不是很懂。 首先,我們知道計算機能識別的是二進制的編碼:0和1. 而ASCII碼是處理英文信息的標(biāo)準(zhǔn)編碼,hello,fine,thank you!等等語句都可以用ASCII碼表示。 那么漢字呢?為了讓我們國家的語言沖出亞洲,走進計算機,也要有一套統(tǒng)一的編碼。于是,1981年5月,國家標(biāo)準(zhǔn)局頒布了《信息交換用漢字編碼字符集——基本集》,代號為GB2312-8.在這套編碼里面,漢字用兩個字節(jié)表示。 而我們寫的這一串字符,在進行編譯的時候,KEIL會幫我們生成相應(yīng)的編碼,統(tǒng)稱為:機內(nèi)碼!漢字有漢字的機內(nèi)碼,英文有英文的機內(nèi)碼。 說了這么多,開始寫程序,還是昨天的電路,今個顯示的字符多一點!如下圖: 
- /**********************51單片機學(xué)習(xí)例程************************
- * 平臺: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; //暫時關(guān)閉中斷
- 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) //發(fā)送一個字節(jié)的數(shù)據(jù),形參d即為待發(fā)送數(shù)據(jù)。
- {
-
- SBUF=d; //將數(shù)據(jù)寫入到串口緩沖
- sending=1; //設(shè)置發(fā)送標(biāo)志
- while(sending); //等待發(fā)送完畢
- }
- void sendc(unsigned char * pd)
- {
- while((*pd)!='\0') //發(fā)送字符串,直到遇到0才結(jié)束
- {
- send(*pd); //發(fā)送一個字符
- pd++; //移動到下一個字符
- }
- }
- int main()
- {
- init();
- while(1)
- {
- delay(200);
- sendc(zifuchuan);
- }
- return(0);
- }
- void uart(void) interrupt 4 //串口發(fā)送中斷
- {
- if(RI) //收到數(shù)據(jù)
- {
- RI=0; //清中斷請求
- }
- else //發(fā)送完一字節(jié)數(shù)據(jù)
- {
- TI=0;
- sending=0; //清正在發(fā)送標(biāo)志
- }
- }
復(fù)制代碼 下載鏈接:
UART_CHAR.zip
(31.79 KB, 下載次數(shù): 94)
2015-4-8 22:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
對了,留個思考題,如果在字符串的結(jié)尾加上 \r 或者 \n 是什么效果,大家可以試試! Uchar table[] =”AAAAA\r”;
|