打印

超级终端也疯狂

[复制链接]
4582|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaochy1126|  楼主 | 2013-8-28 23:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

沙发
gaochy1126|  楼主 | 2013-8-28 23:29 | 只看该作者

使用特权

评论回复
板凳
gaochy1126|  楼主 | 2013-8-28 23:30 | 只看该作者

使用特权

评论回复
地板
gaochy1126|  楼主 | 2013-8-28 23:30 | 只看该作者

使用特权

评论回复
5
gaochy1126|  楼主 | 2013-8-28 23:30 | 只看该作者

使用特权

评论回复
6
gaochy1126|  楼主 | 2013-8-28 23:31 | 只看该作者

使用特权

评论回复
7
gaochy1126|  楼主 | 2013-8-28 23:31 | 只看该作者

使用特权

评论回复
8
gaochy1126|  楼主 | 2013-8-28 23:31 | 只看该作者

使用特权

评论回复
9
gaochy1126|  楼主 | 2013-8-28 23:31 | 只看该作者

使用特权

评论回复
10
gaochy1126|  楼主 | 2013-8-28 23:32 | 只看该作者

使用特权

评论回复
11
gaochy1126|  楼主 | 2013-8-28 23:32 | 只看该作者

使用特权

评论回复
12
gaochy1126|  楼主 | 2013-8-28 23:32 | 只看该作者
了解超级终端

本文为超级终端的应用总结**,实验基于51单片机,对ARM和其它MPU同样适用。在WINDOWS XP或是WINDOWS 2000操作系统下,在“「开始」菜单\程序\附件\通讯”目录下可以看到“超级终端”。这是WINDOWS自带的通信终端工具,我们用它的串口通信功能。在“文件/属性/连接到(选项卡)/连接时使用(项)”里设置 COM1(串口接啥就选啥),在“设置...”里设置为“19200  8  无  1  无”。最后点击“呼叫/呼叫”行完事了。好吧,没有介绍其它设备之前您是可以用超级终端自慰的(自己和自己玩)。将COM1串口的2、3引脚短接(接错了把电脑搞炸了别找我),即是将发出的数据接收回来。在超级终端框里输入信息同样显示出来,好像在用TXT记事本或是QQ聊天对话框一样。如果您这样玩的很开心那就不用再看下一节了,直到您还想知道更有趣的知识。


单片机平台建立

断开串口COM1的2、3引脚吧,应该和单片机互动起来才有应用的价值。之前,我们要有一块拥有串口功能的单片机实验板或是嵌入目标板,否则请您检查一下IE的地址栏,看看您是不是错输入了网址来到我的网站,希望我的地址和**的地址字符并不接近。在百度里输入“单片机串口电路”,答案会挤进您的眼睛里,那我就不费口水了。全当您有了我们所需要的设备,在51的FLASH中写入下面的程序。

#include <AT89X51.h>
#include <string.h>
//BAUD SET == 19200  8  NOR  1   NOR
//主程序
void main(){
   unsigned char dat;
    SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr
    TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload
    PCON |= 0x80;       //SMOD=1;
    TH1   = 0xFD;       //Baud:9600  fosc=11.0592MHz
    IE   |= 0x90;       //Enable Serial Interrupt
    TR1   = 1;          // timer 1 run
   while(1){
       if ( RI ){
            dat = SBUF;   //接收数据 SBUF 为单片机的接收发送缓冲寄存器
            RI = 0;
            SBUF = dat;   //发送数据
       }
   }
}





有趣的功能

向串口打印字符吧,应该是有趣的事了。您可以在超级终端上显示出操作界面。还可以把关键的字眼改变颜色、加亮或是闪烁显示,还可以用\n(换行)、\r(归位)、\x00(十六进制输入)来设置一个美丽的图景。下面的程序里我用到上面提过的功能,有兴趣研究一下是一件好事,不然就看下一节。

#i nclude <AT89X51.h>
#i nclude <string.h>
void send_char_com(unsigned char ch);
void send_string_com(unsigned char *str);
void init_serialcomm(void);
void Delay(unsigned int a);
//串口初始化
void init_serialcomm(void) {//btl == 19200
    SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr
    TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload
    PCON |= 0x80;       //SMOD=1;
    TH1   = 0xFD;       //Baud:9600  fosc=11.0592MHz
    IE   |= 0x90;       //Enable Serial Interrupt
    TR1   = 1;          // timer 1 run
}
//串口接收中断函数
void serial () interrupt 4 using 3 {
    if(RI){
        unsigned char ch;
        RI = 0;
send_string_com("\x0c");
//send_char_com(0x0c);
x_welcome ();  //显示欢迎画面
x_menu (  );
}
}
//向串口发送一个字符
void send_char_com(unsigned char ch) {
SBUF=ch;
while(TI == 0);
TI=0;
}
//向串口发送一个字符串,长度不限。
//应用:send_string_com("d9887321$");
void send_string_com(unsigned char *str){
  while(*str != '\0'){
   send_char_com(*str);
         *str++;
        }
  *str = 0;
}
//欢迎画面(启动时显示)
void x_welcome ( void ){
send_string_com("\x0c\n\r\033[1;34m");
send_string_com("欢迎使用串口控制平台          ");
send_string_com("\n\rby DoYoung V1.0 2006.11.11");
}
//
void x_menu ( void ){
send_string_com("\n\n\r\033[1;31mUART> \033[1;30m");
send_string_com("请输入功能序号:        ");
send_string_com("\n\r\033[1;31mdoyoung> \033[1;30m");
}
void x_run ( void ){
send_string_com("\b\x5c");
Delay(200);
send_string_com("\b|");
Delay(200);
send_string_com("\b/");
Delay(200);
send_string_com("\b-");
Delay(200);
}
void Delay(unsigned int a){
  unsigned char i;
  while( --a != 0){
   for(i = 0; i < 125; i++);  //一个 ; 表示空语句,CPU空转。
  }          //i 从0加到125,CPU大概就耗时1毫秒
}
//主程序
main(){
init_serialcomm();  //初始化串口
x_welcome ();  //显示欢迎画面
x_menu ();
    while(1){
x_run (  ) ;            
    }
}




使用特权

评论回复
13
gaochy1126|  楼主 | 2013-8-28 23:33 | 只看该作者

ASC II码表和转义字符
我们输入的显示字符都是ASC II的标准。对于一些特殊的指令,ASC II则用转义字符更为方便。


Decimal   Octal   Hex    Binary     Value
          10       08     16      02   
        -------    -----      *---       ------            -----
         000      000    000   00000000      NUL    (Null char.)
         001      001    001   00000001      SOH    (Start of Header)发送文件首
         002      002    002   00000010      STX    (Start of Text)文本开始
         003      003    003   00000011      ETX    (End of Text)文本尾
         004      004    004   00000100      EOT    (End of Transmission)发送结束
         005      005    005   00000101      ENQ    (Enquiry)
         006      006    006   00000110      ACK    (Acknowledgment)确认
         007      007    007   00000111      BEL    (Bell)蜂鸣
         008      010    008   00001000       BS    (Backspace)退格
         009      011    009   00001001       HT    (Horizontal Tab)
         010      012    00A   00001010       LF    (Line Feed)换行
         011      013    00B   00001011       VT    (Vertical Tab)
         012      014    00C   00001100       FF    (Form Feed)换页/清屏
         013      015    00D   00001101       CR    (Carriage Return)回车
         014      016    00E   00001110       SO    (Shift Out)SHIFT 松开
         015      017    00F   00001111       SI    (Shift In)按下
         016      020    010   00010000      DLE    (Data Link Escape)清除
         017      021    011   00010001      DC1 (XON) (Device Control 1)
         018      022    012   00010010      DC2       (Device Control 2)
         019      023    013   00010011      DC3 (XOFF)(Device Control 3)
         020      024    014   00010100      DC4       (Device Control 4)
         021      025    015   00010101      NAK    (Negative Acknowledgement)
         022      026    016   00010110      SYN    (Synchronous Idle)
         023      027    017   00010111      ETB    (End of Trans. Block)
         024      030    018   00011000      CAN    (Cancel)
         025      031    019   00011001       EM    (End of Medium)
         026      032    01A   00011010      SUB    (Substitute)
         027      033    01B   00011011      ESC    (Escape)退出
         028      034    01C   00011100       FS    (File Separator)
         029      035    01D   00011101       GS    (Group Separator)
         030      036    01E   00011110       RS    (Request to Send/Record Separator)
         031      037    01F   00011111       US    (Unit Separator)
         032      040    020   00100000       SP    (Space)空格
         033      041    021   00100001        !    (exclamation mark)
         034      042    022   00100010        "    (double quote)
         035      043    023   00100011        #    (number sign)
         036      044    024   00100100        $    (dollar sign)
         037      045    025   00100101        %    (percent)
         038      046    026   00100110        &    (ampersand)
         039      047    027   00100111        '    (single quote)
         040      050    028   00101000        (    (left/opening parenthesis)
         041      051    029   00101001        )    (right/closing parenthesis)
         042      052    02A   00101010        *    (asterisk)
         043      053    02B   00101011        +    (plus)
         044      054    02C   00101100        ,    (comma)
         045      055    02D   00101101        -    (minus or dash)
         046      056    02E   00101110        .    (dot)
         047      057    02F   00101111        /    (forward slash)
         048      060    030   00110000        0
         049      061    031   00110001        1
         050      062    032   00110010        2
         051      063    033   00110011        3
         052      064    034   00110100        4
         053      065    035   00110101        5
         054      066    036   00110110        6
         055      067    037   00110111        7
         056      070    038   00111000        8
         057      071    039   00111001        9
         058      072    03A   00111010        :    (colon)
         059      073    03B   00111011        ;    (semi-colon)
         060      074    03C   00111100        <    (less than)
         061      075    03D   00111101        =    (equal sign)
         062      076    03E   00111110        >    (greater than)
         063      077    03F   00111111        ?    (question mark)
         064      100    040   01000000        @    (AT symbol)
         065      101    041   01000001        A
         066      102    042   01000010        B
         067      103    043   01000011        C
         068      104    044   01000100        D
         069      105    045   01000101        E
         070      106    046   01000110        F
         071      107    047   01000111        G
         072      110    048   01001000        H
         073      111    049   01001001        I
         074      112    04A   01001010        J
         075      113    04B   01001011        K
         076      114    04C   01001100        L
         077      115    04D   01001101        M
         078      116    04E   01001110        N
         079      117    04F   01001111        O
         080      120    050   01010000        P
         081      121    051   01010001        Q
         082      122    052   01010010        R
         083      123    053   01010011        S
         084      124    054   01010100        T
         085      125    055   01010101        U
         086      126    056   01010110        V
         087      127    057   01010111        W
         088      130    058   01011000        X
         089      131    059   01011001        Y
         090      132    05A   01011010        Z
         091      133    05B   01011011        [    (left/opening bracket)
         092      134    05C   01011100        \    (back slash)
         093      135    05D   01011101        ]    (right/closing bracket)
         094      136    05E   01011110        ^    (caret/cirumflex)
         095      137    05F   01011111        _    (underscore)
         096      140    060   01100000        `
         097      141    061   01100001        a
         098      142    062   01100010        b
         099      143    063   01100011        c
         100      144    064   01100100        d
         101      145    065   01100101        e
         102      146    066   01100110        f
         103      147    067   01100111        g
         104      150    068   01101000        h
         105      151    069   01101001        i
         106      152    06A   01101010        j
         107      153    06B   01101011        k
         108      154    06C   01101100        l
         109      155    06D   01101101        m
         110      156    06E   01101110        n
         111      157    06F   01101111        o
         112      160    070   01110000        p
         113      161    071   01110001        q
         114      162    072   01110010        r
         115      163    073   01110011        s
         116      164    074   01110100        t
         117      165    075   01110101        u
         118      166    076   01110110        v
         119      167    077   01110111        w
         120      170    078   01111000        x
         121      171    079   01111001        y
         122      172    07A   01111010        z
         123      173    07B   01111011        {    (left/opening brace)
         124      174    07C   01111100        |    (vertical bar)
         125      175    07D   01111101        }    (right/closing brace)
         126      176    07E   01111110        ~    (tilde)
         127      177    07F   01111111      DEL    (delete)

前32个控制字符的详细解释(英文):
NUL (null)
SOH (start of heading)
STX (start of text)
ETX (end of text)
EOT (end of transmission) - Not the same as
ETBENQ (enquiry)ACK (acknowledge)
BEL (bell) - Caused teletype machines to ring a bell.  
Causes a beep in many common terminals and terminal emulation programs.
BS  (backspace) - Moves the cursor (or print head) move backwards (left)  one space.
TAB (horizontal tab) - Moves the cursor (or print head) right to the next tab stop.  
The spacing of tab stops is dependent on the output device, but is often either 8 or 10.
LF  (NL line feed, new line) - Moves the cursor (or print head) to a new line.  On Unix systems, moves to a new line AND all the way to the left.
VT  (vertical tab)
FF  (form feed) - Advances paper to the top of the next page (if the output device is a printer).
CR  (carriage return) - Moves the cursor all the way to the left, but does not advance to the next line.
SO  (shift out) - Switches output device to alternate character set.
SI  (shift in)  - Switches output device back to default character set.DLE (data link escape)
DC1 (device control 1)
DC2 (device control 2)
DC3 (device control 3)
DC4 (device control 4)
NAK (negative acknowledge)
SYN (synchronous idle)
ETB (end of transmission block) - Not the same as
EOTCAN (cancel)EM  (end of medium)
SUB (substitute)ESC (escape)
FS  (file separator)
GS  (group separator)
RS  (record separator)
US  (unit separator)         



常用的转义字符

在windows自带的超级终端中,如何清屏?
--通过发送0x0C(12)即可实现清屏。
--在“输入字符串”内容中输入 \x0c\0  :字符串结束标志;
--- 在上面的程序里找到 while(*str != '\0') ,您就会知道 \0 的功能了。它可以表示字符串的结束,您可以不用担心指针会溢出。
\n  :换行(asc II码为10);
--- 一般和 \r 配合使用以代表回车。因为 \n 只是表示换行而并不让光标回到行首, \r 是实现了回行首的功能。
\t  :横向跳格;                              
\b  :退格;
\r  :回车(ascⅱ码为13);
\f  :走纸换页;
\\  :字符\(ascⅱ码为92);
--- \ 是转义字符的表示符,当只想打一个 \ 时就可以打两个。
           
\'  :单引号;
'\"':双引号;
--- ' 在C里有特殊用法,所以这个表示只打印这个符号。
\d05:用8进制表示字符;
\x1c:用16进制表示字符
--- 有一些功能没有转义字符,我们就可以用这个指令直接表示指令。\x1c 相当于发送 0x1c 对应的ASC码功能。


关于颜色

在 ANSI 兼容终端里,可以用彩色显示文本而不仅仅是黑白。但是我们自己编写的程序能否输出彩色的字符呢?当然答案是肯定的。下面的语句就输出高亮的黑色背景的绿色字。
printf("\033[1;40;32m good!!! \033[0m Hello,NSFocus \n");
\033 声明了转义序列的开始,然后是 [ 开始定义颜色。后面的 1 定义了高亮显示字符。然后是背景颜色,这里面是40,表示黑色背景。接着是前景颜色,这里面是32,表示绿色。我们用 \033[0m 关闭转义序列, \033[0m 是终端默认颜色。通过上面的介绍,就知道了如何输出彩色字符了。因此,我就不再多说了。下面是对于彩色字符颜色的一些定义。

    前景            背景              颜色
    ---------------------------------------
    30                40              黑色
    31                41              紅色
    32                42              綠色
    33                43              黃色
    34                44              藍色
    35                45              紫紅色
    36                46              青藍色
    37                47              白色
   
代码              意义
    -------------------------
    0                终端默认设置(黑底白字)
    1                高亮显示
    4                使用下划线
    5                闪烁
    7                反白显示
    8                不可见

使用特权

评论回复
14
周立功GD32| | 2013-8-29 08:45 | 只看该作者
秘密终于被你发现了!
网上流传有N多串口调试助手软件,但大都功能不全,所以我一直用超级终端

使用特权

评论回复
15
gaochy1126|  楼主 | 2013-8-29 09:30 | 只看该作者
周立功GD32 发表于 2013-8-29 08:45
秘密终于被你发现了!
网上流传有N多串口调试助手软件,但大都功能不全,所以我一直用超级终端 ...

这可木法跟您比,这才是找到一点点头绪而已的。

使用特权

评论回复
16
hudi008| | 2013-8-29 10:09 | 只看该作者
这个文档不错,用来学习用的。

使用特权

评论回复
17
江枫渔火| | 2013-8-29 10:18 | 只看该作者
总结的不错,不过不看好超级终端,现在用的还是以前系统的版本,win7以后好像是没有了。

但是CRT不错~功能更全。

网上流传的N多串口调试助手其实都不怎么好用,没有终端特性,只当是按钮发来发去还行~也有部分工具对字符处理不好,乱码,或收消息错漏的情况也有,还有一部分则是功能大杂烩,甚至穿插广告~显得很不专业
大概制作工具的人是搞电子出身的~而非专业搞PC软件的~

使用特权

评论回复
18
gaochy1126|  楼主 | 2013-8-29 10:28 | 只看该作者
江枫渔火 发表于 2013-8-29 10:18
总结的不错,不过不看好超级终端,现在用的还是以前系统的版本,win7以后好像是没有了。

但是CRT不错~功能 ...

看到周立功GD32做的东西真的不错,所以就像试试。

使用特权

评论回复
19
q379479344| | 2013-8-29 11:17 | 只看该作者
学习

使用特权

评论回复
20
gaochy1126|  楼主 | 2013-8-29 11:50 | 只看该作者
q379479344 发表于 2013-8-29 11:17
学习

:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:这个社会混好的两种人:一是有权有势,二是没脸没皮的。

1050

主题

11299

帖子

26

粉丝