ascii编码(zhuan)

最近编程要用到,放在这里以便查阅^_^
ascii编码

       Decimal   Octal   Hex    Binary     Value

------- ----- --- ------ -----

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)

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 ETB

ENQ (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 EOT

CAN (cancel)

EM (end of medium)

SUB (substitute)

ESC (escape)

FS (file separator)

GS (group separator)

RS (record separator)

US (unit separator)
io0809a equ 298h io8255A equ 288h io8255C equ 28Ah io8255B equ 289h io8255KZ equ 28Bh DATA SEGMENT s1 db '.' s2 db 'The temperature is :','$' hum DB 20h hum1 db 20h hum2 db 20h buff db 100 DUP(?) TISHI dw 0B5B1H,0C7B0H,0CEC2H,0B6C8H,003AH HZ_ADR DB ? ;HZ_ADR2 DB ? HZ_TABtwo dw 3 DUP(?),0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0BEAFH,0B1A8H,0A3A1H,0CEC2H,0B6C8H,0B9FDH,0B8DFH,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H ;液晶显示屏高温警报 HZ_TAB DW 3 DUP(?),0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H,0B0A0H ;液晶显示屏正常显示温度 led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;0-9段 buffer1 db 4 dup(?) ;存放要显示的十位和个位和小数点后一位,第三位为空位(无效位) bz dw ? ;位 LED2 DB 71H,71H,71H,71H,71H,71H,71H,71H,71H,71H ;七段数管高温警报显示'F' DATA ENDS code segment assume cs:code,ds:data start: mov ax,data mov ds,ax l01: CALL caiji ;调用采集子程序 CALL qiuhe ;调用求和子程序,求取10次采集数据的平均数 CALL zhuan ;调用十位数字转换子程序 call disp ;调用显示子程序 mov di,offset buffer1 ;将温度数据的各位数字的ascii转换成原本数字 mov al,hum2 sub al,30h mov[di],al ;将小数点后一位数字送给存储变量buffer1的第一个地址空间 inc di mov al,hum1 sub al,30h mov[di],al ;将个位数字送给buffer1的第二个地址空间 inc di inc di ;buffer1的第三个地址空间为空 mov al,hum sub al,30h mov [di],al ;将十位数字送给buffer1的第四个地址空间 CALL QIDUAN ;调用七段数管显示 MOV AL,10 ;判断温度是否大于30度 MUL hum1 MOV AH,00H add al,hum cmp AX,30 JC next6 call yejing ;若小于30度,调用正常情况下液晶显示屏子程序 jmp exit1 next6: call yejing1 ;若大于30度,调用高温情况下液晶显示屏子程序,显示警报 CALL QIDUAN1 ;若大于30度,调用高温情况下七段数管子程序,显示警报 exit1: mov ah,01 int 21h cmp al,27 jz exit jmp start exit: mov ah,4ch ;结束主程序 int 21h caiji proc near ;数据采集子程序 mov bl,0 mov si,offset buff ccc: ;数据采集子程序 ,启动A/D转换器 MOV DX,io0809a out dx,al mov cx,0ffh delay: loop delay ;延时 IN AL,DX ;读出转换好的数据 mov [si],al inc si inc bl cmp bl,10 ;采集10次 jne ccc RET ;返回主程序 caiji endp qiuhe proc near clc mov ax,00 mov cx,10 mov si,offset buff q01: add al,[si] ;数据相加,送给AL jnc q02 inc ah ;若相加结果溢出,(AH)+1 q02: inc si ;将之前采集到的10次历史数据进行相加 loop q01 mov bx,ax ;10次数据之和送给BX mov ax,bx mov bl,10 div bl ;求得的和对10进行除法运算 mov ah,0h ;将余数置零(舍去余数),留取除数(平均数) ret qiuhe endp zhuan proc near mov ah,00 mov bl,50 div bl ;将10次温度的平均数除以50 mov bl,ah ;余数送给BL寄存器 mov dl,al ;商送给DL寄存器 cmp dl,9 jle ddd ;若商小于等于9,转移到ddd add dl,7 ddd: add dl,30h mov hum,dl ;商转换为ASCII后送给hum mov al,bl ;余数送给AL寄存器 mov ah,00 mov bl,5 div bl ;将余数对5进行除法运算 mov dl,al ;商送给DL cmp dl,9 jle eee ;若商小于等于9,转移到eee add dl,7 ;若商大于9,加7 eee: add dl,30h mov hum1,dl ;商转换为ASCII后送给hum1 mov dl,ah cmp dl,9 jle fff ;若余数小于等于9,跳转fff add dl,7 ;大于9,加7 fff: add dl,30h mov hum2,dl ;余数转换为ascii,送hum2 ret zhuan endp disp proc near ;显示子程序 mov ax,data mov ds,ax mov dx,offset s2 ;显示"THE TEMPERATURE IS:" mov ah,09h int 21h mov dl,hum ;显示十位数字 mov ah,02 int 21h mov dl,hum1 ;显示个位数字 mov ah,02 int 21h mov dl,s1 ;显示小数点 mov ah,02 int 21h mov dl,hum2 ;显示小数点后一位数字 mov ah,02 int 21h MOV DL,0F8H ;显示'°' MOV AH,02 INT 21H mov dl,43h ;显示'C' mov ah,02 int 21h mov dl,21h ;显示! mov ah,02 int 21h mov dl,0ah ;换行 mov ah,02 int 21h mov dl,0dh ;归为 mov ah,02 int 21h ret disp endp QIDUAN PROC NEAR ;七段数管显示子程序 mov dx,io8255KZ ;写8255芯片的控制字 mov al,80h ;将8255设为B口输出 out dx,al mov di,offset buffer1 ;将缓冲区地址送给DI mov cx,050h ;循环次数 loop99: ;循环显示,视觉暂留 mov bh,04 lll:mov byte ptr bz,bh ;把位送给BH寄存器 push di ;DI入栈 dec di ;地址-1 add di, bz ;地址+位数 mov bl,[di] ;地址中的数送给BL pop di mov bh,0 ;BX高8位置零 mov si,offset led ;将led数表偏移地址送给SI add si,bx ;求出BL中的数对应的led数地址 mov al,byte ptr [si] ;将对应数字的段送给AL mov bx,bz cmp bx,02 jne nopoint ;如果位不为2,则不加小数点 point:ADD AL,80H ;若位为2,数字段最高位置1,加小数点 nopoint: mov dx,io8255B out dx,al ;8255的B口输出该数 mov al,byte ptr bz ;使相应的数管工作 mov dx,io8255C ;送位至C口 out dx,al push cx mov cx,100 ;设置循环次数 delay99: loop delay99 ;插入一个延时 pop cx mov al,00h out dx,al mov bh,byte ptr bz ;将此时的位送给BH shr bh,1 ;将bh右移一位,位数-1 jnz lll ;如果位数不为0,没有完成,则跳转lll loop loop99 ;返回循环显示 ret endp QIDUAN QIDUAN1 PROC NEAR ;高温情况下七段数管子程序 mov dx,io8255KZ ;写8255芯片的控制字 mov al,80h out dx,al mov di,offset buffer1 ;将缓冲区地址送给DI MOV AL,[DI] mov dx,io8255B ;从8255芯片B口输出 OUT DX,AL mov cx,050h ;循环次数 loop100: ;循环显示 mov bh,02 lll2:mov byte ptr bz,bh ;把位送给BH寄存器 push di ;DI入栈 dec di ;地址-1 add di, bz ;地址+位数 mov bl,[di] ;地址中的数送给BL pop di mov bh,0 ;BX高8位置零 mov si,offset LED2 ;将led数表偏移地址送给SI add si,bx ;求出BL中的数对应的led数地址 mov al,byte ptr [si] mov dx,io8255B out dx,al ;8255的B口输出该数 mov al,byte ptr bz ;使相应的数管工作 mov dx,io8255C ;送位至C口 out dx,al push cx mov cx,100 ;设置循环次数 delay100: loop delay100 ;插入一个延时 pop cx mov al,00h out dx,al mov bh,byte ptr bz ;将此时的位送给BH shr bh,1 ;将bh右移一位,位数-1 jnz lll2 ;如果位数不为0,没有完成,则跳转lll loop loop100 ret endp QIDUAN1 YEJING PROC NEAR ;液晶显示屏子程序 MOV DI,OFFSET HZ_TAB MOV AL,hum1 mov [DI],AL ;将要显示的温度数据以及'度'送给HZ_TAB INC DI MOV AL,hum mov [DI],AL INC DI MOV AL,hum2 MOV [DI],AL INC DI mov al,2EH MOV [DI],AL inc di mov AX,0B6C8H MOV [DI],AX MOV DX,IO8255KZ ;初始化8255控制字,将A口设置为输出,C口设置为输出 MOV AL,80H OUT DX,AL ;8255初始化 CALL CLEAR ;调用LCD清零程序 LEA BX, HZ_TAB MOV CH,2 ;在第二行显示 CALL LCD_DISP LEA BX, HZ_TAB MOV CH,3 ;在第三行显示 CALL LCD_DISP RET YEJING ENDP YEJING1 PROC NEAR ;高温情况下液晶显示器子程序 MOV DI,OFFSET HZ_TABtwo MOV AL,hum1 ;将要显示的温度数据以及'度'送给HZ_TABtwo mov [DI],AX INC DI MOV AL,hum MOV AH,00H mov [DI],AX INC DI MOV AL,hum2 MOV AH,00H MOV [DI],AX INC DI mov al,2EH MOV AH,00H MOV [DI],AX inc di mov ax,0B6C8H MOV [DI],AX MOV DX,IO8255KZ ;初始化8255控制字,将A口设置为输出,C口设置为输出 MOV AL,80H OUT DX,AL ;8255初始化 CALL CLEAR ;调用LCD清零程序 LEA BX, HZ_TABtwo MOV CH,2 ;在第二行显示 CALL LCD_DISPtwo LEA BX, HZ_TABtwo MOV CH,3 ;在第三行显示 CALL LCD_DISPtwo RET YEJING1 ENDP CLEAR PROC MOV AL,0CH MOV DX, IO8255A OUT DX,AL ;设置命令将LCD清零 CALL CMD_SETUP ;启动LCD执行命令,调用CMD 子程序执行clear程序 RET CLEAR ENDP LCD_DISP PROC ;此函数主要目的是显示一行的信息 LEA BX, HZ_TAB ;将汉字编码表的首地址放入BX中 CMP CH, 2 ;判断行数 JZ DISP_SEC ;如果为2,跳转至 DISP_SEC MOV BYTE PTR HZ_ADR,88H ADD BX,16 ;如果不是,将汉字编码表指向第三行 JMP next DISP_SEC: MOV BYTE PTR HZ_ADR,90H next: mov cl,8 ;cl内储一行的汉字个数 continue: push cx MOV AL,HZ_ADR MOV DX, IO8255A OUT DX, AL CALL CMD_SETUP ;设置地址命令 MOV AX,[BX] ;将汉字编码送入高字节中 PUSH AX MOV AL,AH ;先输出高八位 MOV DX, IO8255A OUT DX,AL CALL DATA_SETUP CALL DELAY2 ;延时函数 POP AX MOV DX, IO8255A ;再输出低八位 OUT DX, AL CALL DATA_SETUP CALL DELAY2 ;延时函数 INC BX ;修改显示内缓冲区指针 INC BX ;将BX指针加2,指向下一个汉字 INC BYTE PTR HZ_ADR ;将显示地址加一 POP CX DEC CL ;判断一行的数字是否显示完毕 JNZ CONTINUE ;如果显示完毕则结束程序 RET LCD_DISP ENDP LCD_DISPtwo PROC ;此函数主要目的是显示一行的信息 LEA BX, HZ_TABtwo ;将汉字编码表的首地址放入BX中 CMP CH, 2 ;判断行数 JZ DISP_SEC2 ;如果为2,跳转至 DISP_SEC2 MOV BYTE PTR HZ_ADR,88H ADD BX,16 ;如果不是,将汉字编码表指向第三行 JMP next7 DISP_SEC2: MOV BYTE PTR HZ_ADR,90H next7: mov cl,8 ;cl内储一行的汉字个数 continue7: push cx MOV AL,HZ_ADR MOV DX, IO8255A OUT DX, AL CALL CMD_SETUP ;设置地址命令 MOV AX,[BX] ;将汉字编码送入高字节中 PUSH AX MOV AL,AH ;先输出高八位 MOV DX, IO8255A OUT DX,AL CALL DATA_SETUP CALL DELAY2 ;延时函数 POP AX MOV DX, IO8255A ;再输出低八位 OUT DX, AL CALL DATA_SETUP CALL DELAY2 ;延时函数 INC BX ;修改显示内缓冲区指针 INC BX ;将BX指针加2,指向下一个汉字 INC BYTE PTR HZ_ADR ;将显示地址加一 POP CX DEC CL ;判断一行的数字是否显示完毕 JNZ CONTINUE7 ;如果显示完毕则结束程序 RET LCD_DISPtwo ENDP CMD_SETUP PROC MOV DX, IO8255C ;将地址指向端口C NOP MOV AL,00000000B ;将PC1与PC0置零即芯片的I端与W端置零;PC1置0,pc0置0 (LCD I端=0,W端=0)W:读写选择,0为写数据,1为读数据,I:高电平将D0-D7位数据送入显示RAM,直接显示相应的字符,低电平为将D0-D7位数据送入指令寄存器后执行 OUT DX, AL call delay2 NOP MOV AL,00000100B ;将PC2置1,即芯片E端置1,使之有效 OUT DX, AL NOP call delay2 MOV AL, 00000000B ;将PC2置0,遇下降沿,将写入的数据锁定 OUT DX, AL call delay2 RET CMD_SETUP ENDP ;CMD_set的作用是将I口置为低电平,将D0-D7位数据送入指令寄存器后执行,例如clear的特定功能就是通过设置I口为低电平才可执行 DATA_SETUP PROC MOV DX, IO8255C ;指向8255C口 MOV AL,00000001B ;将PC0置1,即I端置1 OUT DX, AL NOP call delay2 MOV AL,00000101B ;PC2置1,E端置1,准备锁存数据 OUT DX, AL NOP call delay2 MOV AL, 00000001B ;PC2置0,下降沿,锁存输入数据 OUT DX, AL NOP call delay2 RET DATA_SETUP ENDP ;DATA_set的作用是将I口置为高电平,将D0-D7位数据送入显示RAM直接输出,也就是程序的显示屏输出部分 DELAY2 PROC ;循环延时函数 push cx push dx MOV CX, 0Ffffh x1: loop x1 pop dx pop cx RET DELAY2 ENDP code ends end start修改代
最新发布
09-23
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值