怎么用单片机编写一段程序将若干十六进制数转换为ASCII码? 单片机中把16进制数转换为ASCII码的子程序

\u8bd5\u7528\u5355\u7247\u673a\u7f16\u5199\u4e00\u6bb5\u7a0b\u5e8f\u5c06\u82e5\u5e72\u5341\u516d\u8fdb\u5236\u6570\u8f6c\u6362\u4e3aASCII\u7801

\u4e0d\u77e5\u4f60\u8981\u7684\u662fC\u8bed\u8a00\u7684\u8fd8\u662f\u6c47\u7f16\u7684\uff0c\u90fd\u7ed9\u4f60\u5427

C\u8bed\u8a00\u7684\uff1a
#include

typedef unsigned char uchar;

#define NUMBER 10

ucharBufferIn[NUMBER]={0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef,0x1a,0x1b};//16\u8fdb\u5236\u6570\u5b58\u653e\u533a
ucharBufferOut[2*NUMBER];//ASCII\u7801\u5b58\u653e\u533a

////////////////////////////////////////////////////////////////
//\u529f\u80fd:\u5c06\u591a\u5b57\u828216\u8fdb\u5236\u6570\u8f6c\u6362\u4e3aASCII\u5b57\u7b26
//\u5165\u53e3:x:\u5f85\u8f6c\u636216\u8fdb\u5236\u6570,x>=0\u4e14x<=F
//\u51fa\u53e3:\u8fd4\u56de\u8f6c\u6362\u5b8c\u6210\u540e\u7684ASCII\u7801\u5b57\u7b26\u6570\u636e,\u8fd4\u56de0\u4e3a\u5931\u8d25
////////////////////////////////////////////////////////////////
ucharGetASCII(uchar x)
{
if(x>0x0f)
{
return 0;
}

if(x>9)
{
return ('A'+x-10);
}
return ('0'+x);
}

////////////////////////////////////////////////////////////////
//\u4e3b\u7a0b\u5e8f
////////////////////////////////////////////////////////////////
voidmain()
{
uchar i;

for(i=0;i<NUMBER;i++)
{
BufferOut[i*2] = GetASCII(BufferIn[i]/0x10);
BufferOut[i*2+1] = GetASCII(BufferIn[i]%0x10);
}
while(1);
}


\u6c47\u7f16\u7684\uff1a
;\u8bf4\u660e: LOOP1\u5faa\u73af\u4e3a\u9884\u8bbe10\u4e2a16\u8fdb\u5236\u6570\u5185\u5bb9\u7684\u521d\u59cb\u5316\u7a0b\u5e8f\uff0c\u4f5c\u4e3a\u793a\u4f8b
ORG 0000H
LJMP START
ORG 0100H
START: MOV R2, #10 ;\u9884\u7f6e10\u4e2a16\u8fdb\u5236\u6570
MOV R0, #20H ;16\u8fdb\u5236\u6570\u5b58\u653e\u8d77\u59cb\u5730\u5740
MOV A, #12H
LOOP1: MOV @R0, A
ADD A, #13H
INC R0
DJNZ R2,LOOP1 ;\u5faa\u73af10\u6b21\u900110\u4e2a\u6570
;\u4ee5\u4e0a\u81f3START\u4e3a\u521d\u59cb\u5316\u5185\u5b58\uff0c\u9884\u900110\u4e2a\u5b57\u8282\u7684\u6570\u636e

MOV R0, #20H ;16\u8fdb\u5236\u6570\u5b58\u653e\u8d77\u59cb\u5730\u5740
MOV R1, #30H ;ASCII\u6570\u5b58\u653e\u8d77\u59cb\u5730\u5740
MOV R2, #10 ;\u8f6c\u636210\u4e2a\u5b57\u8282
LCALL HEXTOASC ;\u8c03\u7528\u8f6c\u6362\u5b50\u7a0b\u5e8f
JMP $

;=======================================================
;HEXTOASC\uff1a\u5c06\u591a\u5b57\u828216\u8fdb\u5236\u6570\u8f6c\u6362\u4e3aASCII\u5b57\u7b26\u5b50\u7a0b\u5e8f
;\u5165\u53e3: (R0)=16\u8fdb\u5236\u6570\u5b58\u653e\u8d77\u59cb\u5730\u5740\u6307\u9488
; (R2)=\u5b57\u8282\u6570
;\u51fa\u53e3: (R1)=\u8f6c\u6362\u5b8c\u6210\u540e\u7684ASC\u5b57\u7b26\u5b58\u653e\u8d77\u59cb\u5730\u5740\u6307\u9488
;\u7b97\u6cd5\u8bf4\u660e\uff1a0~9:(ASCII\u7801\u4e3a30H~39H)+90H\u540e\u8c03\u6574\u540e\u65e0\u53d8\u5316\uff0c\u7ed3\u679c
; \u4e3a9xH\uff0c\u518d\u52a040H\u4e3a0DxH,\u8c03\u6574\u64cd\u4f5c+60H\u540e\u6b63\u597d\u4e3a3xH;
; A~F:(ASCII\u4e3a41H~46H),+90H\u540e\u4e3a9xH,\u8c03\u6574\u64cd\u4f5c+06H\u540e
; \u4e3a01H~06H,\u518d\u52a040H\u8c03\u6574\u540e\u4e0d\u53d8\uff0c\u6b63\u597d\u4e3a41H~46H;
;=======================================================
HEXTOASC:
MOV A, @R0
SWAP A
ANL A, #0FH ;\u5904\u7406\u9ad84\u4f4d
ADD A, #90H
DA A
ADDC A, #40H
DA A
MOV @R1, A ;\u4fdd\u5b58\u9ad84\u4f4d
INC R1
MOV A, @R0
ANL A, #0FH ;\u5904\u7406\u4f4e4\u4f4d
ADD A, #90H
DA A
ADDC A, #40H
DA A
MOV @R1, A ;\u4fdd\u5b58\u4f4e4\u4f4d
INC R1 ;\u4e0b\u4e00\u4e2a16\u8fdb\u5236\u6570
INC R0
DJNZ R2, HEXTOASC
RET

END

HEX2ASC:
PUSH ACC
ANL A,#0FH
LCALL H2A
MOV R0,A
POP ACC
SWAP A
ANL A,#0FH
LCALL H2A
MOV R1,A
RET
H2A:
CJNE A,#10,HASC1
HASC1:
JC HASC2
MOV B,#41H
ADD A,B
RET
HASC2:
MOV B,#30H
ADD A,B
RET

不知你要的是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=0;i<NUMBER;i++)
{
BufferOut[i*2] = GetASCII(BufferIn[i]/0x10);
BufferOut[i*2+1] = GetASCII(BufferIn[i]%0x10);
}
while(1);
}

汇编的:
;说明: LOOP1循环为预设10个16进制数内容的初始化程序,作为示例
ORG 0000H
LJMP START
ORG 0100H
START: MOV R2, #10 ;预置10个16进制数
MOV R0, #20H ;16进制数存放起始地址
MOV A, #12H
LOOP1: MOV @R0, A
ADD A, #13H
INC R0
DJNZ R2,LOOP1 ;循环10次送10个数
;以上至START为初始化内存,预送10个字节的数据

MOV R0, #20H ;16进制数存放起始地址
MOV R1, #30H ;ASCII数存放起始地址
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
SWAP A
ANL A, #0FH ;处理高4位
ADD A, #90H
DA A
ADDC A, #40H
DA A
MOV @R1, A ;保存高4位
INC R1
MOV A, @R0
ANL A, #0FH ;处理低4位
ADD A, #90H
DA A
ADDC A, #40H
DA A
MOV @R1, A ;保存低4位
INC R1 ;下一个16进制数
INC R0
DJNZ R2, HEXTOASC
RET

END

  • 鍏充簬51鍗曠墖鏈鸿嫢骞鐨勯棶棰,鎬ャ傘傘
    绛旓細鍏充簬51鍗曠墖鏈鸿嫢骞鐨勯棶棰,鎬ャ傘傘//瀹為檯鏅舵尟涓11.0592MHz//涓烘柟渚胯绠,鍋囪涓12MHz#include<reg52.h> //鍖呭惈52鍗曠墖鏈哄ご鏂囦欢#define uchar unsigned char //瀹忓畾涔#
  • 鍗曠墖鏈C璇█,鎬庝箞瀛樺偍鍜岃皟鐢涓娈鏁版嵁
    绛旓細姣斿涓涓鐝殑瀛︾敓鎴愮哗,鎬庝箞瀛樺偍鍒板閮‵LASH閲岄潰,鍙堟槸濡備綍璋冪敤鐨勫笇鏈涚粰娈典唬鐮,骞跺姞浠ヨ鏄,涓囧垎鎰熻阿 wjlslm | 娴忚1326 娆 |涓炬姤 鎴戞湁鏇村ソ鐨勭瓟妗堟帹鑽愪簬2016-04-22 04:19:07 鏈浣崇瓟妗 MSP430 FLASH鍨鍗曠墖鏈鐨凢LASH瀛樺偍鍣ㄦā鍧楁牴鎹笉鍚岀殑瀹归噺鍒嗕负鑻ュ共娈,鍏朵腑淇℃伅瀛樺偍鍣⊿egmengA鍙奡egmentB鍚勬湁128瀛楄妭,鍏朵粬娈垫湁512瀛...
  • c璇█缂栦竴娈靛皬绋嬪簭,鍦ㄦ恫鏅跺睆涓婂疄鐜版樉绀"ABCD1234".鐢ㄥ崟鐗囨満AT 89c51
    绛旓細RW=1;EN=1; //EN=1锛屾墠鍏佽璇鍐 _nop_(); //绌烘搷浣 _nop_();_nop_();_nop_(); //绌烘搷浣滃洓涓満鍣ㄥ懆鏈燂紝缁欑‖浠跺弽搴旀椂闂 result=BF; //灏嗗繖纰屾爣蹇楃數骞宠祴缁檙esult EN=0;return result;} / 鍑芥暟鍔熻兘锛氬皢妯″紡璁剧疆鎸囦护鎴栨樉绀哄湴鍧鍐欏叆娑叉櫠妯″潡 鍏ュ彛鍙傛暟锛歞ictate / void Write...
  • 姹涓涓崟鐗囨満浜ら氱伅鐨绋嬪簭
    绛旓細Flash_Count=0;P1=0xf3;//鍗楀寳缁跨伅浜紝涓滆タ绾㈢伅浜 delay(10000);while(++Flash_Count!=5){ P1=0xf5;//鍗楀寳榛勭伅浜紝涓滆タ绾㈢伅浜 delay(500);P1=0xf7;//鍗楀寳榛勭伅鐏紝涓滆タ绾㈢伅浜 delay(500);} //榛勭伅浜伃5娆 Flash_Count=0;} //涓绋嬪簭 void main(){ init();i=0;j=0;...
  • 缂栧啓涓涓AT89C52鍗曠墖鏈鎺у埗鍥涚浉鍗曞洓鎷嶆杩涚數鏈烘眹缂绋嬪簭,鎬ョ敤...
    绛旓細1瀹為獙浠诲姟鍩轰簬MCS-51绯诲垪鍗曠墖鏈篈T89C51,璁捐涓涓鎺у埗姝ヨ繘鐢靛姩鏈虹殑鎺у埗瑁呯疆銆2璁捐瑕佹眰:1)閲囩敤鍗曠墖鏈鎺у埗涓涓皬鍔熺巼鍥涚浉鍥涙媿鐨勬杩涚數鏈哄伐浣,姝ヨ繘鐢垫満姝ヨ窛涓1.5搴,鏈澶х浉鐢垫祦100mA... 1 瀹為獙浠诲姟鍩轰簬MCS-51绯诲垪鍗曠墖鏈篈T89C51,璁捐涓涓帶鍒舵杩涚數鍔ㄦ満鐨勬帶鍒惰缃2 璁捐瑕佹眰:1) 閲囩敤鍗曠墖鏈烘帶鍒朵竴涓皬鍔熺巼鍥涚浉鍥涙媿鐨...
  • 缂栧啓51鍗曠墖鏈瀹炵幇娑叉櫠涓婂瓧鐨勫惊鐜樉绀哄拰绉诲姩绋嬪簭?
    绛旓細鍦1602鐨勭涓琛 寰幆鏄剧ず welcome to china //鐢1602寰幆鍙崇Щ鏄剧ず"Welcome to China"include<reg52.h> //鍖呭惈鍗曠墖鏈瀵勫瓨鍣ㄧ殑澶存枃浠 include<intrins.h> //鍖呭惈_nop_()鍑芥暟瀹氫箟鐨勫ご鏂囦欢 sbit RS=P2^0; //瀵勫瓨鍣ㄩ夋嫨浣嶏紝灏哛S浣嶅畾涔変负P2.0寮曡剼 sbit RW=P2^1; //璇诲啓閫夋嫨浣嶏紝灏...
  • 鍗曠墖鏈姹缂栧啓绋嬪簭,C51
    绛旓細10.绛:0000H:鍗曠墖鏈澶嶄綅鍏ュ彛鍦板潃;0003H:澶栭儴涓柇0鐨勪腑鏂湇鍔绋嬪簭鍏ュ彛鍦板潃;000BH:瀹氭椂/璁℃暟鍣0婧㈠嚭涓柇鏈嶅姟绋嬪簭鍏ュ彛鍦板潃;0013H:澶栭儴涓柇1鐨勪腑鏂湇鍔$▼搴忓叆鍙e湴鍧;001BH:瀹氭椂/璁℃暟鍣1婧㈠嚭涓柇鏈嶅姟绋嬪簭鍏ュ彛鍦板潃;0023H:涓茶鍙g殑涓柇鏈嶅姟绋嬪簭鍏ュ彛鍦板潃銆 绔3 80C51鐨勬寚浠ょ郴缁 1.绛:鎵ц鏃堕棿鐭1涓鏈哄櫒鍛ㄦ湡鎸囦护鏈64鏉,...
  • 缁樺埗涓鍗曠墖鏈鏈灏忕郴缁熺數璺浘,缂栧啓绋嬪簭鎺у埗P1.7鍙h緭鍑轰綆鐢靛钩,骞剁偣浜彂鍏...
    绛旓細澶у閮界煡閬擄紝51鍗曠墖鏈鏄渶瀹规槗鍏ラ棬鐨勶紝涓嶄粎鍥犱负鍏剁紪绋嬬畝鍗曪紝鏇撮噸瑕佺殑鏄綉涓婄殑璧勬枡闈炲父涓板瘜銆傛墍浠ヤ竴鑸涔犲崟鐗囨満寮鍙戠殑閮藉皢51鍗曠墖鏈轰綔涓哄叆闂ㄥ紑鍙戠殑棣栭夈傛垜瀛︿範51鍗曠墖鏈虹殑鏃跺欐槸閲囩敤杩欐牱鐨涓涓姝ラ杩涜瀛︿範鐨勶細绗竴姝(鐔熸倝鐨勮繃绋)锛氫拱浜嗕竴娆51鍗曠墖鏈哄紑鍙戞澘锛岀劧鍚庡氨寮濮嬩簡鎴戠殑瀛︿範涔嬫梾锛屽垰寮濮嬬殑鏃跺欐病鏈夊幓鐪...
  • 鍏充簬鍗曠墖鏈C璇█涓涓鐨绋嬪簭鑻ュ共闂銆傗啌鈫撯啌
    绛旓細uchar i;sbit RS=P2^0;//瀹氫箟鎺у埗绠¤剼鍜鍗曠墖鏈鐨勮繛鎺 sbit RW=P2^1;//鍚屼笂 sbit LCDEN=P2^2;//鍚屼笂 /*寤舵椂鍑芥暟delay*/ void delay(uint z){ uint x;uchar y;for(x=z;x>0;x--)for(y=110;y>0;y--);} /*1602鍐欐寚浠わ紝鐪嬬湅1602鐨刣atasheet鐨勬椂搴忓氨鐭ラ亾浜*/ void ...
  • 姹涓涓崟鐗囨満绋嬪簭
    绛旓細include<reg51.h> define uint unsigned int define uchar unsigned char sbit rw=P2^5;sbit rs=P2^6;sbit re=P2^7;uchar code zmo0[]="I LOVE YOU!";uchar code zmo1[]="THAT IS REAL!";uchar i;void delay(uint u){ uchar v;for(u;u>0;u--)for(v=150;v>0;v--);} void...
  • 本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网