假定使用c语言,ascii的控制字符有一些可以采用转义字符处理:
回车键
\n
tab键
\t
等,其 *** 作方式等同字符 *** 作;
在c语言中,所有字符都可以用
int
表示
,该数值为字符的ascii码,这样我们处理控制字符的时候,就可以处理了。
如铃声bell,ascii码为7;则我们输出可采用以下代码:
int
cc=7
printf("%c",cc)
其他 *** 作大同小异。
不知你要的是C语言的还是汇编的,都给你吧C语言的:
#include <REG51.H>
typedef unsigned char uchar
#define NUMBER 10
uchar BufferIn[NUMBER]={0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef,0x1a,0x1b}//16进制数存放区
uchar BufferOut[2*NUMBER] //ASCII码存放区
////////////////////////////////////////////////////////////////
//功能: 将多字节16进制数转换为ASCII字符
//入口: x:待转换16进制数,x>=0且x<=F
//出口: 返回转换完成后的ASCII码字符数据,返回0为失败
////////////////////////////////////////////////////////////////
uchar GetASCII(uchar x)
{
if(x>0x0f)
{
return 0
}
if(x>9)
{
return ('A'+x-10)
}
return ('0'+x)
}
////////////////////////////////////////////////////////////////
//主程序
////////////////////////////////////////////////////////////////
void main()
{
uchar i
for(i=0i<NUMBERi++)
{
BufferOut[i*2] = GetASCII(BufferIn[i]/0x10)
BufferOut[i*2+1] = GetASCII(BufferIn[i]%0x10)
}
while(1)
}
汇编的:
说明: LOOP1循环为预设10个16进制数内容的初始化程序,作为示例
ORG 0000H
LJMPSTART
ORG 0100H
START: MOV R2, #10 预置10个16进制数
MOV R0, #20H16进制数存放起始地址
MOV A, #12H
LOOP1: MOV @R0,A
ADD A, #13H
INC R0
DJNZR2,LOOP1循环10次送10个数
以上至START为初始化内存,预送10个字节的数据
MOV R0, #20H16进制数存放起始地址
MOV R1, #30HASCII数存放起始地址
MOV R2, #10 转换10个字节
LCALL HEXTOASC调用转换子程序
JMP $
=======================================================
HEXTOASC:将多字节16进制数转换为ASCII字符子程序
入口: (R0)=16进制数存放起始地址指针
(R2)=字节数
出口: (R1)=转换完成后的ASC字符存放起始地址指针
算法说明:0~9:(ASCII码为30H~39H)+90H后调整后无变化,结果
为9xH,再加40H为0DxH,调整 *** 作+60H后正好为3xH
A~F:(ASCII为41H~46H),+90H后为9xH,调整 *** 作+06H后
为01H~06H,再加40H调整后不变,正好为41H~46H
=======================================================
HEXTOASC:
MOV A, @R0
SWAPA
ANL A, #0FH处理高4位
ADD A, #90H
DA A
ADDCA, #40H
DA A
MOV @R1,A 保存高4位
INC R1
MOV A, @R0
ANL A, #0FH处理低4位
ADD A, #90H
DA A
ADDCA, #40H
DA A
MOV @R1,A 保存低4位
INC R1 下一个16进制数
INC R0
DJNZR2, HEXTOASC
RET
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)