单片机,C语言编程将16进制转换为ASC码 怎么用单片机编写一段程序将若干十六进制数转换为ASCII码?

\u5355\u7247\u673a\u4e2d\uff0c\u5982\u4f55\u5c0616\u8fdb\u5236\u8f6c\u6362\u4e3aASC\u7801\uff1f

1. 16\u8fdb\u5236\u6570\u4e3a0~F\u7684\u7ec4\u5408(\u4f8b\u59823FFF, \u5c31\u50cf10\u8fdb\u5236\u6570\u662f0~9\u7684\u7ec4\u5408\u4e00\u6837), \u800cASCII\u7801\u662f\u4e00\u7ec4\u7b26\u53f7\u96c6\u5408,
\u5b83\u7528\u4e00\u4e2a8\u4f4d(\u4e00\u4e2a\u5b57\u8282)\u7684\u4e8c\u8fdb\u5236\u6570\u6765\u8868\u793a\u5b57\u7b26(\u56e0\u4e3a\u8ba1\u7b97\u673a\u7528\u4e8c\u8fdb\u5236\u6570\u6765\u8fd0\u7b97), \u5176\u4e2d0~9\u5bf9\u5e94\u7684\u4e8c\u8fdb\u5236\u6570\u4e3a0x30~0x39,
A~F\u5bf9\u5e94\u7684\u4e8c\u8fdb\u5236\u6570\u4e3a0x41~0x46 (\u5c0f\u5199a~f\u4e3a0x61~0x66).

2. \u5c0616\u8fdb\u5236\u6570\u8f6c\u6362\u4e3aASCII\u7801\u5c31\u662f\u5c060~F\u8f6c\u6362\u4e3a\u5b57\u7b26"0"~"F" (\u5728\u8ba1\u7b97\u673a\u5b58\u50a8\u7684\u8868\u793a\u4e3a0x30~0x46). \u8f6c\u6362\u7684\u7b97\u6cd5\u53ef\u4ee5\u591a\u79cd, \u6bd4\u8f83\u7b80\u5355\u7684\u7b97\u6cd5\u5982\u4e0b:

a) \u5b9a\u4e49\u4e00\u4e2a\u6570\u7ec4

const byte ASCII[]={0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46}; // byte \u4e3a\u4e00\u4e2a\u5b57\u8282\u7684\u5b9a\u4e49

\u5047\u8bbei\u4e3a\u5b58\u50a8\u5355\u4e2a16\u8fdb\u5236\u7684\u6570\u5b57, \u5219\u7528ASCII[i]\u5373\u53ef\u83b7\u5f97\u76f8\u5e94\u7684ASCII\u7801
b) \u4e5f\u53ef\u4ee5\u7528\u8ba1\u7b97\u7684\u65b9\u5f0f
\u5047\u8bbei\u4e2d\u5b58\u50a8\u5355\u4e2a16\u8fdb\u5236\u7684\u6570\u5b57,
if (i > 9)
{
ascii = 0x40 + (i - 9); // A~F
}
else
{
ascii = 0x30 + i; // 0~9
}
3. \u591a\u4f4d\u6570\u768416\u8fdb\u5236\u6570\u53ef\u4ee5\u901a\u8fc7\u9010\u4f4d\u5206\u89e3\u5b9e\u73b0, \u4f8b\u59820x3AD0, \u53ef\u4ee5\u5206\u89e3\u4e3a3, A, D, 0\u8f6c\u6362. \u6bcf\u4f4d16\u8fdb\u5236\u6570\u5360\u534a\u4e2a\u5b57\u8282, \u6240\u4ee5\u5f88\u5bb9\u6613\u5229\u7528\u79fb\u4f4d(\u8fde\u7eed\u5de6\u79fb4bits)\u8fdb\u884c\u5206\u79bb.

\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

假设16进制是0—9,那么:

16进制数 + '0' = 16进制数对应的ASCII码30H—39H

16进制的A--F,可以类似的变换。

用keil编

  • 鍗曠墖鏈,C璇█缂栫▼灏16杩涘埗杞崲涓篈SC鐮
    绛旓細16杩涘埗鐨凙--F锛屽彲浠ョ被浼肩殑鍙樻崲銆
  • 鍗曠墖鏈轰腑灏嗗崄鍏繘鍒鏁0x0f杞崲鎴愬崄杩涘埗鏁扮殑c璇█绋嬪簭?
    绛旓細void f(char *h,char *d) { int x=0,xx,n=0,nn;while ( *h ) { //杞崲鍗佸叚杩涘埗瀛楃涓蹭负鏁板煎瓨鏀惧埌x x*=16;if ( *h>='0' && *h<='9' ) x+=*h-'0';else if ( *h>='a' && *h<='f' ) x+=*h-'a'+10;else if ( *h>='A' && *h<='F' ) x+=*h-...
  • 鍗曠墖鏈篊51璇剧▼璁捐 16杩涘埗杞负10杩涘埗
    绛旓細void scanf(void){unsigned char recode,j;P1=~(0x01<<Seg); //琛屾壂鎻弐ecode=P1>>4; //璇诲彇鍒 if(recode<0x0f) //鍒ゆ柇鏄惁鏈夐敭鎸変笅 { if(++Delay>2) Delay=3; if(Delay==2) //寤舵椂鍘绘姈鍔 16ms {if(Conut==0){ Dis[0]=Dis[1]=Dis[2]=Dis[3...
  • 鍗曠墖鏈轰腑,濡備綍灏嗕竴涓16杩涘埗鏁拌浆涓2杩涘埗鐨勫舰寮忚緭鍑 姣斿a=0x9C,浣嗘渶 ...
    绛旓細鍙傝绋嬪簭锛歁OV R7,#8 锛涘惊鐜鏁 MOV R4,#9CH 锛涜鍏ヨ杞崲鐨勬暟鎹 LL1: MOV A,R4 RLC A MOV R4,A MOV A,#30H ADDC A,#0 MOV SBUF,A 锛鎶姹傚嚭鐨勮浆鎹㈡暟鎹敱涓插彛鍙戝嚭鍘 JB TI ,CLR TI DJNZ R7, LL1 LLEND: SJMP LLEND 鍛靛懙 ...
  • 鍗曠墖鏈篊璇█涓16杩涘埗鏁拌浆10杩涘埗鏁扮殑璁$畻鍏紡?姣斿a=0x7f,鐢ㄤ竴涓叕寮...
    绛旓細鐢–璇█鍐欑▼搴忥紝涔熶笉鐢ㄨ浆鎹㈢殑銆侰璇█灏卞彲浠ョ洿鎺ュ啓鍗佽繘鍒舵暟鐨勶紝鍐呴儴鏄粈涔堝彲浠ヤ笉鐢ㄨ冭檻銆傚彧鏄湪鏄剧ず鏃讹紝鎸夊崄杩涘埗鏁版樉绀烘椂锛屽彇鍑虹櫨锛屽崄锛屼釜浣嶅氨琛屼簡锛屼篃涓嶇敤鍏堣浆鎹㈢殑銆備綘杩欐牱濂藉儚鏄浆鎹簡锛屽彲杞崲鍚庣殑鏁帮紝鍦ㄥ唴閮ㄨ繕鏄崄鍏繘鍒舵暟锛岄偅褰撶劧鏄敊鐨勩傛墍浠ワ紝瑕佹牴鎹渶瑕佽繘琛屽垎绂绘垨鑰呰浆鎹
  • 51鍗曠墖鏈篊璇█閲 鎬庢牱灏16杩涘埗 鐩存帴鍖栨垚 10杩涘埗
    绛旓細鎴戣繖鍎挎湁涓涓杩涘埗杞崲鐨绋嬪簭锛浣犲彲浠ュ弬鑰冧竴涓嬶細include<stdio.h> include<math.h> include<string.h> int count=0;void *tentoBOH(int a,int n){ int t,i=0,j,str[50],*p;char str1[50],*q,temp;while(a!=0){ t=a%n;if(n==16){ if(t<=9&&t>=0)str1[i++]=(char)(...
  • 鎬庝箞鐢鍗曠墖鏈虹紪鍐涓娈绋嬪簭灏鑻ュ共鍗佸叚杩涘埗鏁拌浆鎹涓篈SCII鐮?
    绛旓細//16杩涘埗鏁板瓨鏀惧尯\x0d\x0aucharBufferOut[2*NUMBER];//ASCII鐮佸瓨鏀惧尯\x0d\x0a\x0d\x0a///\x0d\x0a//鍔熻兘:灏嗗瀛楄妭16杩涘埗鏁拌浆鎹涓篈SCII瀛楃\x0d\x0a//鍏ュ彛:x:寰呰浆鎹16杩涘埗鏁,x>=0涓攛<=F\x0d\x0a//鍑哄彛:杩斿洖杞崲瀹屾垚鍚庣殑ASCII鐮佸瓧绗︽暟鎹,杩斿洖0涓哄け璐x0d\x0a///...
  • 鐨51鍗曠墖鏈轰腑c璇█涓濡備綍灏嗗崄鍏繘鍒鏁杞寲涓哄崄杩涘埗
    绛旓細濡傛灉浣犱粎浠呮槸浣跨敤杞崲缁撴灉鐨勮瘽锛岄偅涔堣祴鍊艰鍙ュ彲浠ヨ嚜鍔ㄨ浆鎹傛瘮濡傦細unsigned char x,y;y=0x5a;x=y;浣犺緭鍑烘牸寮忔槸10杩涘埗锛閭d箞鍙橀噺琛ㄧず鐨勫氨鏄崄杩涘埗鏁般
  • 姹51鍗曠墖鏈烘妸4浣16杩涘埗鏁拌浆鎴10杩涘埗鏁扮殑鏂规硶
    绛旓細绋嬪簭缁忚繃浠跨湡璋冭瘯閫氳繃锛屽涓嬫墍绀:MOV R0, TL0 MOV R1, TH0 CLR A MOV R2, A, ;鍏堟竻闆 MOV R3, A,MOV R4, A,MOV R5, #16 ;鍏杞崲鍗佸叚浣嶆暟 LOOP:CLR C MOV A, R0 ;浠庡緟杞崲鏁扮殑楂樼绉诲嚭涓浣嶅埌Cy RLC A MOV R0, A MOV A, R1 RLC ...
  • 鍗曠墖鏈烘妸16杩涘埗杞负10杩涘埗
    绛旓細绋嬪簭鍐呴儴鏃犻渶杞崲锛鍙槸鍐欐硶涓嶅悓鑰屽凡锛屽崟鐗囨満鍏ㄦ槸鎸夌収浜杩涘埗澶勭悊鏁版嵁鐨勩
  • 扩展阅读:初学编程必背50个 ... 单片机数码管0到9的16进制 ... 编程必背100个代码 ... 单片机入门基础知识 ... 吓人的编程代码 ... 十六进制在线转换器 ... c++编程 ... 初学编程100个代码大全 ... c语言怎么输出16进制 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网