单片机中,如何将16进制转换为ASC码? 关于在单片机内二进制或16进制转换成ASC码的问题。
\u5355\u7247\u673a\u4e2d\u628a16\u8fdb\u5236\u6570\u8f6c\u6362\u4e3aASCII\u7801\u7684\u5b50\u7a0b\u5e8fHEX2ASC:
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
\u7ed9\u4f60\u6211\u4ee5\u524d\u627e\u7684\u5427\u3002
\u5e0c\u671b\u53ef\u4ee5\u5e2e\u5230\u4f60\u3002
它用一个8位(一个字节)的二进制数来表示字符(因为计算机用二进制数来运算), 其中0~9对应的二进制数为0x30~0x39,
A~F对应的二进制数为0x41~0x46 (小写a~f为0x61~0x66).
2. 将16进制数转换为ASCII码就是将0~F转换为字符"0"~"F" (在计算机存储的表示为0x30~0x46). 转换的算法可以多种, 比较简单的算法如下:
a) 定义一个数组
const byte ASCII[]={0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46}; // byte 为一个字节的定义
假设i为存储单个16进制的数字, 则用ASCII[i]即可获得相应的ASCII码
b) 也可以用计算的方式
假设i中存储单个16进制的数字,
if (i > 9)
{
ascii = 0x40 + (i - 9); // A~F
}
else
{
ascii = 0x30 + i; // 0~9
}
3. 多位数的16进制数可以通过逐位分解实现, 例如0x3AD0, 可以分解为3, A, D, 0转换. 每位16进制数占半个字节, 所以很容易利用移位(连续左移4bits)进行分离.
ASC码就是一种规定,你找到ASC码表,按照表转换就行了。当然其中数字和字母等是有规律的,仔细看看就好了。
转换原理和如何编程,可以参考:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/category/ascii%C2%EB%BA%CD16%BD%F8%D6%C6%CA%FD
一个字符加单引号 多个字符加双引号
先转换成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)(...
绛旓細//16杩涘埗鏁板瓨鏀惧尯\x0d\x0aucharBufferOut[2*NUMBER];//ASCII鐮佸瓨鏀惧尯\x0d\x0a\x0d\x0a///\x0d\x0a//鍔熻兘:灏嗗瀛楄妭16杩涘埗鏁杞崲涓ASCII瀛楃\x0d\x0a//鍏ュ彛:x:寰呰浆鎹16杩涘埗鏁,x>=0涓攛<=F\x0d\x0a//鍑哄彛:杩斿洖杞崲瀹屾垚鍚庣殑ASCII鐮佸瓧绗︽暟鎹,杩斿洖0涓哄け璐x0d\x0a///...
绛旓細鍗曠墖鏈哄崄鍏繘鍒鍜屼簩杩涘埗鏁帮紝涓嶇敤杞崲锛璁$畻鏈哄唴鐨勬暟鎹兘鏄互浜岃繘鍒朵繚瀛樼殑銆傚嚑杩涘埗鏁帮紝鍙槸浠ヤ笉鍚岀殑鏂瑰紡鏉ユ樉绀恒傛湰璐ㄤ笂鏄竴鏍风殑銆傚鏋滀竴瀹氳杞崲锛屽叿浣撳弬鑰冨涓嬶細unsigned char num; //瀹氫箟涓涓8浣嶆暟 if(num&(1<<n))...;//num 鐨勭N浣嶆槸1 else ...;//num 鐨勭N浣嶆槸0 褰撶劧鍙互鏀惧湪涓涓...
绛旓細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
绛旓細浣犵殑璇濅腑~~0x78,瑕佸湪LED鏄剧ず灞忎笂鏄剧ず78锛0x7f,灏辫鍦ㄦ樉绀哄睆涓婃樉绀7f锛燂紵锛10杩涘埗浣曟潵F锛燂紵锛熸兂瑕佹樉绀10杩涘埗寰堢畝鍗曪紝姹備綑灏辫浜唦~渚嬪 16杩涘埗鏁0X10锛涘寲鎴10杩涘埗灏辨槸16锛涚劧鍚鎶16%10 鐨勫埌鐨勪綑鏁版槸6 鏀惧湪涓綅鏁帮紝16/10寰楀埌鍗佷綅鏁1~~鐒跺悗鍙互鐩稿簲鐨勬煡琛ㄨ緭鍑簙~~...
绛旓細鍗曠墖鏈轰腑鏁板奸兘鏄2杩涘埗鐨勩侻OV A锛#1111B MOV A锛#0FH MOV A锛#16 缁撴灉閮芥槸涓鏍风殑銆
绛旓細瀵逛簬鏁版嵁娴侀渶瑕佸尯鍒嗘暟瀛楁祦鍜屽瓧绗︽祦锛屼緥濡傛暟瀛1锛屽搴斿瓧绗﹀氨鏄31銆備覆鍙f敹鍙戦渶瑕佷竴涓害瀹氾紝渚嬪鍥哄畾闀垮害鎴栨暟鎹寘鏍囪瘑锛屼綘鏀跺埌鏁版嵁鍚庢寜鐓cssii琛杞垚鏁板瓧鍙戦佸嚭鍘汇
绛旓細绋嬪簭鍐呴儴鏃犻渶杞崲锛鍙槸鍐欐硶涓嶅悓鑰屽凡锛屽崟鐗囨満鍏ㄦ槸鎸夌収浜杩涘埗澶勭悊鏁版嵁鐨勩
绛旓細unsigned char i,m i=hex/10;m=hex%10;鍏朵腑hex涓轰綘瀛樻斁鍗佸叚杩涘埗鐨勫彉閲 i涓哄崄杩涘埗鐨勫崄浣 m涓哄崄杩涘埗鐨勪釜浣 鍗虫槸shi=dd/10;ge=dd%10杩欐牱绠楋紝鑷繁鍙互璋冭瘯鐪嬬湅
绛旓細杩欎釜灏辨槸璁$畻鍏紡鎹㈢畻灏卞彲浠ヤ簡锛岋紙Vin/Vref锛*65536=AD缁撴灉 鐜板湪AD鐨勫兼槸鐭ラ亾鐨勶紝Vref鏄煡閬撶殑锛屾眰鍑篤in缁撴灉銆俈in灏辨槸鐢靛帇鍊笺