標題: 學51單片機-UART口發送一串字符 [打印本頁]
作者: jiajiamei 時間: 2015-4-8 22:38
標題: 學51單片機-UART口發送一串字符
昨天說的是如何通過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”;
作者: 不吃草的牛 時間: 2017-9-13 11:46
樓主強大,下來學習學習
作者: 墨染青衣顏s 時間: 2018-5-20 17:11
學習下
作者: hange_v 時間: 2018-5-20 19:21
啥破玩意?不用去ASCII碼表查找,直接把自己要輸出的用char類型表示就行,比如u8 table[5] = {'A', 'B', 'V', 'D' ,'E'};,通過串口輸出電腦端收到的就是ABCDE
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国v精品久久久网
|
欧美区一区二
|
男女搞黄网站
|
天天色天天干天天
|
黄色一级片黄色一级片
|
久久综合伊人
|
麻豆成人免费视频
|
人人草av|
亚洲黄色大片
|
日本久久精品视频
|
一区二区三区国产精品
|
国产成人精品av在线观
|
亚洲成人自拍
|
精品国产99久久久久久宅男i
|
欧美福利在线观看
|
一区二区不卡视频
|
日韩三级一区二区
|
黄色网视频
|
久久久www成人免费精品
|
91网站免费看
|
黄色片中文字幕
|
日韩一级黄
|
四虎影视在线
|
欧美精品一级片
|
日韩亚洲天堂
|
亚洲美女网站
|
亚洲精品一区二区三区在线观看
|
99在线播放
|
日韩精品一区在线观看
|
日日日操
|
亚洲精品成人在线
|
80日本xxxxxxxxx96
国产成人在线免费视频
|
aaaaaabbbbbb毛片|
国产成人91
|
日韩三级一区
|
午夜精品久久久久久
|
欧美视频免费在线观看
|
eeuss一区二区三区
|
国产免费成人
|
日韩中文字幕一区
|
色婷婷免费视频
|