51单片机用汇编把16进制转化为10进制
单片机汇编进制转换问题,十六进制,十进制,BCD
此属本人原创请尊重知识产权:多字节十六进制转换为十进制(多字节十六进制除十运算)MOV 40H,#0FFH ;三字节数据的低位存放地址MOV 41H,#0FFHMOV 42H,#0FFH ;三字节数据的高位存放地址MOV R0,#50H ;转换后十进制数存放的首地址(个位)MOV R2,#7 ;取十进制的位数减一(如FFFFFFH转换为十进制是16777215,八位减一就是7)CFYS:MOV R1,#40H ;给高字节地址MOV B,#00H ;避免影响下一轮运算SCCF:MOV A,@R1ANL A,#0F0H ;屏蔽低四位ORL A,B ;合并给A(被除数)SWAP AMOV B,#10DIV ABSWAP A ;高位在AXCH A,@R1 ;商高位在ANL A,#0FH ;屏蔽高四位XCH A,BSWAP AORL A,B ;合并给A(被除数)MOV B,#10DIV ABORL A,@R1 ;合并给A(被除数)MOV @R1,AINC R1CJNE R1,#43H,SCCF ;是否完成一次除十运算MOV @R0,BINC R0DJNZ R2,CFYS ;是否完成全部运算MOV @R0,A(以上程序编写于2014/10/03上午)BCD码和十六进制的转换大家都知道汇编语言里把十六进制转换为BCD码用DA指令,但是没有哪条指令能把BCD码转换为16进制,我曾经也很为此困惑,但最终我解决了此问题,看程序!假如R0里储存的是37分钟的BCD码,那么R0里的数是37H,要把它转换成37的十六进制25H存入R1中。
我们现实的算法是37/16=25H就可以得出结果,但是机器没那么聪明,因为37H是十六进制。
汇编程序解决的方法如下:MOV A,R0 ;ANL A,#0FH ;屏蔽高4位(即屏蔽分钟的十位)MOV R2,A ;把个位的值给R2MOV A,R0 ;ANL A,#0F0H ;屏蔽低4位(即屏蔽分钟的个位)SWAP A ;高低字节互换MOV B,#10 ;给B赋值(也可以赋0AH)MUL AB ;A乘B得出十位的十六进制值ADD A,R2 ;十位的值加上个位的值MOV R1,A ;把转换好的十六进制值给R1(以上程序编写于2014/09/13中午)。
16进制转化为10进制的方法
16进制转化为10进制的方法16进制转换为10进制的方法在计算机科学中,十进制(Decimal)和十六进制(Hexadecimal)是常见的数字系统。
在日常生活和计算机中,我们常使用十进制数字系统。
然而,在计算机科学和编程领域,十六进制也是非常重要的。
因此,了解如何将十六进制数转换为十进制数是非常有用的。
本文将详细介绍如何将16进制转换为10进制的方法,以及具体的步骤和示例。
一、理解十进制和十六进制在开始转换之前,我们首先需要了解十进制和十六进制之间的差异。
十进制是一种基于10个数字(0-9)的数字系统。
它的位置权重递增,从右到左,每个位置上的权重是10的幂(10^0, 10^1, 10^2, ...)。
例如,数字512的意思是5 * 10^2 + 1 * 10^1 + 2 * 10^0。
十六进制是一种基于16个数字(0-9, A-F)的数字系统。
它的位置权重递增,从右到左,每个位置上的权重是16的幂(16^0, 16^1, 16^2, ...)。
例如,十六进制数5A的意思是5 * 16^1 + 10 * 16^0。
二、将16进制转换为10进制的步骤下面是将16进制数转换为10进制数的步骤:步骤1:将16进制数的每个数字与其相应的权重相乘。
步骤2:将步骤1中的结果相加。
让我们通过一个示例来演示这个过程。
示例:将十六进制数3E7转换为十进制数。
步骤1:将16进制数的每个数字与其相应的权重相乘。
3E7 = 3 * 16^2 + E * 16^1 + 7 * 16^0步骤2:将步骤1中的结果相加。
3 * 16^2 + 14 * 16^1 + 7 * 16^0 = 768 + 224 + 7 = 999因此,十六进制数3E7等于十进制数999。
三、其他注意事项1. 当遇到十六进制数的字母A、B、C、D、E和F时,分别对应十进制数10、11、12、13、14和15。
例如,十六进制数4A2F转换为十进制数的步骤如下:4A2F = 4 * 16^3 + 10 * 16^2 + 2 * 16^1 + 15 * 16^0= 16384 + 40960 + 32 + 15= 573912. 使用计算器或编程语言来实现转换更加简便。
16进制转方法
16进制转方法在计算机科学中,16进制是一种常用的数值表示方法。
它使用了16个数字来表示数值,包括0-9和A-F。
16进制转方法是将一个16进制数值转换为另一种表示方法的过程,可以是转换为10进制、二进制或其他进制。
一、16进制转10进制方法将一个16进制数值转换为对应的10进制数值,可以按照以下步骤进行:1. 首先,将16进制数值中的每一位数字乘以对应的权值。
权值从右往左依次为16^0, 16^1, 16^2, ...,以此类推。
2. 然后,将每一位数字乘以权值后的结果相加,得到最终的10进制数值。
例如,将16进制数值0xAB转换为10进制数值,可以按照以下步骤进行计算:0xAB = 10 * 16^1 + 11 * 16^0 = 160 + 11 = 171因此,16进制数值0xAB转换为10进制数值为171。
二、16进制转二进制方法将一个16进制数值转换为对应的二进制数值,可以按照以下步骤进行:1. 首先,将16进制数值中的每一位数字转换为对应的4位二进制数值。
2. 然后,将每一位数字转换后的4位二进制数值拼接在一起,得到最终的二进制数值。
例如,将16进制数值0xAB转换为二进制数值,可以按照以下步骤进行计算:0xA = 1010 (将A转换为4位二进制数值)0xB = 1011 (将B转换为4位二进制数值)因此,16进制数值0xAB转换为二进制数值为10101011。
三、其他进制的转换方法除了将16进制转换为10进制和二进制,还可以将16进制转换为其他进制,如8进制或者任意进制。
将16进制转换为8进制,可以按照以下步骤进行:1. 首先,将16进制数值中的每一位数字转换为对应的3位8进制数值。
2. 然后,将每一位数字转换后的3位8进制数值拼接在一起,得到最终的8进制数值。
例如,将16进制数值0xAB转换为8进制数值,可以按照以下步骤进行计算:0xA = 12 (将A转换为3位8进制数值)0xB = 13 (将B转换为3位8进制数值)因此,16进制数值0xAB转换为8进制数值为124。
16进制转化为10进制的方法
16进制转化为10进制的方法16进制转换为10进制的方法在计算机科学中,十进制(Decimal)和十六进制(Hexadecimal)是常见的数字系统。
在日常生活和计算机中,我们常使用十进制数字系统。
然而,在计算机科学和编程领域,十六进制也是非常重要的。
因此,了解如何将十六进制数转换为十进制数是非常有用的。
本文将详细介绍如何将16进制转换为10进制的方法,以及具体的步骤和示例。
一、理解十进制和十六进制在开始转换之前,我们首先需要了解十进制和十六进制之间的差异。
十进制是一种基于10个数字(0-9)的数字系统。
它的位置权重递增,从右到左,每个位置上的权重是10的幂(10^0, 10^1, 10^2, ...)。
例如,数字512的意思是5 * 10^2 + 1 * 10^1 + 2 * 10^0。
十六进制是一种基于16个数字(0-9, A-F)的数字系统。
它的位置权重递增,从右到左,每个位置上的权重是16的幂(16^0, 16^1, 16^2, ...)。
例如,十六进制数5A的意思是5 * 16^1 + 10 * 16^0。
二、将16进制转换为10进制的步骤下面是将16进制数转换为10进制数的步骤:步骤1:将16进制数的每个数字与其相应的权重相乘。
步骤2:将步骤1中的结果相加。
让我们通过一个示例来演示这个过程。
示例:将十六进制数3E7转换为十进制数。
步骤1:将16进制数的每个数字与其相应的权重相乘。
3E7 = 3 * 16^2 + E * 16^1 + 7 * 16^0步骤2:将步骤1中的结果相加。
3 * 16^2 + 14 * 16^1 + 7 * 16^0 = 768 + 224 + 7 = 999因此,十六进制数3E7等于十进制数999。
三、其他注意事项1. 当遇到十六进制数的字母A、B、C、D、E和F时,分别对应十进制数10、11、12、13、14和15。
例如,十六进制数4A2F转换为十进制数的步骤如下:4A2F = 4 * 16^3 + 10 * 16^2 + 2 * 16^1 + 15 * 16^0= 16384 + 40960 + 32 + 15= 573912. 使用计算器或编程语言来实现转换更加简便。
16进制转化为10进制的方法
16进制转化为10进制的方法16进制转换为10进制的方法在计算机科学中,十进制(Decimal)和十六进制(Hexadecimal)是常见的数字系统。
在日常生活和计算机中,我们常使用十进制数字系统。
然而,在计算机科学和编程领域,十六进制也是非常重要的。
因此,了解如何将十六进制数转换为十进制数是非常有用的。
本文将详细介绍如何将16进制转换为10进制的方法,以及具体的步骤和示例。
一、理解十进制和十六进制在开始转换之前,我们首先需要了解十进制和十六进制之间的差异。
十进制是一种基于10个数字(0-9)的数字系统。
它的位置权重递增,从右到左,每个位置上的权重是10的幂(10^0, 10^1, 10^2, ...)。
例如,数字512的意思是5 * 10^2 + 1 * 10^1 + 2 * 10^0。
十六进制是一种基于16个数字(0-9, A-F)的数字系统。
它的位置权重递增,从右到左,每个位置上的权重是16的幂(16^0, 16^1, 16^2, ...)。
例如,十六进制数5A的意思是5 * 16^1 + 10 * 16^0。
二、将16进制转换为10进制的步骤下面是将16进制数转换为10进制数的步骤:步骤1:将16进制数的每个数字与其相应的权重相乘。
步骤2:将步骤1中的结果相加。
让我们通过一个示例来演示这个过程。
示例:将十六进制数3E7转换为十进制数。
步骤1:将16进制数的每个数字与其相应的权重相乘。
3E7 = 3 * 16^2 + E * 16^1 + 7 * 16^0步骤2:将步骤1中的结果相加。
3 * 16^2 + 14 * 16^1 + 7 * 16^0 = 768 + 224 + 7 = 999因此,十六进制数3E7等于十进制数999。
三、其他注意事项1. 当遇到十六进制数的字母A、B、C、D、E和F时,分别对应十进制数10、11、12、13、14和15。
例如,十六进制数4A2F转换为十进制数的步骤如下:4A2F = 4 * 16^3 + 10 * 16^2 + 2 * 16^1 + 15 * 16^0= 16384 + 40960 + 32 + 15= 573912. 使用计算器或编程语言来实现转换更加简便。
十六进制转十进制设计
综合实验报告实验名称:十六进制转十进制设计学院:机械与汽车工程学院专业:测控技术与仪器班级:测控091班姓名:张兵学号:3090103124时间2012.11.26—2012.12.7指导教师:姚宏志题目:利用51单片机实现2字节16进制数转换成10进制数实验一、实验目的:1、学习了解掌握A T89C51单片机的基本知识以及设计基本的单片机电路。
2、学习利用Altium Designer画PCB电路板并焊接电路。
3、学习利用仿真软件仿真电路。
4、学习掌握LED数码管的基本知识以及keilC51编程的相关知识。
二、实验器材:AT89C51单片机、74LS07芯片(2个)、引脚底座(14引脚2个、40引脚1个)、电容(2个)、排阻、四位一体数码管(1个)、晶振(12MHz)、开关3个、导线若干等。
三、实验说明实验用到的元器件:51单片机、74LS07驱动器、八段共阴极LED、排阻等。
元器件的工作原理及使用方法:首先来说明单片机的工作原理,我们本实验用到为单片机的最小系统,最小系统,一有时钟源,即晶振。
二有复位电路。
时钟源提供单片机基准时钟信号,保证各指令的正常运行,复位电路则是用于复位还原。
其次来说明74ls07,74ls07是集电极开路六正相高压驱动器,在这次我做的试验中是用它来给八段数码管提供电压进而驱动其工作。
数码管此次用到的是八段共阴极的数码管,共a、b、c、e、f、g、dp,通过在P0口赋予不同的电平来控制相应的段位处于不同的状态(高电平点亮、低电平不亮)。
四、实验原理:1、AT89C51单片机的资料:AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用A TMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
16进制字符串转换为10进制整数值
16进制字符串转换为10进制整数值摘要:1.16进制字符串转换为10进制整数的原理2.转换步骤和方法3.示例及计算过程4.编程实现及代码展示正文:在我们日常生活中,16进制字符串与10进制整数之间的转换是很常见的。
比如在计算机编程领域,16进制字符串常常用于表示颜色值、文件大小等。
接下来,我们将详细介绍如何将16进制字符串转换为10进制整数值。
1.16进制字符串转换为10进制整数的原理16进制字符串其实就是一种基数为16的数字表示方式,它的每一位数值都小于16。
与10进制数类似,16进制数也采用位权原理,只是基数变为16。
每一位的位权是16的相应次方,如16的0次方、1次方、2次方等。
2.转换步骤和方法要将16进制字符串转换为10进制整数,我们可以按照以下步骤进行:(1)将16进制字符串中的每个字符对应到相应的16进制数值,即A对应10,B对应11,C对应12,以此类推,直到F对应15。
(2)将每个字符对应的16进制数值与对应位上的位权相乘。
(3)将所有乘积相加,得到最终的10进制整数值。
3.示例及计算过程以字符串"1A2B3C"为例,我们来演示一下转换过程:(1)将字符串中的每个字符对应到相应的16进制数值:A对应10,B对应11,C对应12。
(2)计算每个字符对应的位权:第一位:16的0次方= 1第二位:16的1次方= 16第三位:16的2次方= 256(3)将每个字符对应的16进制数值与对应位上的位权相乘,然后将所有乘积相加:10 * 1 + 11 * 16 + 12 * 256 = 10 + 176 + 3072 = 3248所以,字符串"1A2B3C"转换为10进制整数为3248。
4.编程实现及代码展示下面是一段Python代码,实现了16进制字符串到10进制整数的转换:```pythondef hex_to_decimal(hex_str):decimal = 0for i, char in enumerate(hex_str):decimal += dict["A"][char] * (16 ** i)return decimalhex_str = "1A2B3C"decimal = hex_to_decimal(hex_str)print("16进制字符串", hex_str, "转换为10进制整数为:", decimal)```运行这段代码,输出结果为:```16进制字符串1A2B3C 转换为10进制整数为:3248```通过以上讲解,相信大家已经掌握了16进制字符串转换为10进制整数的技巧。
16进制转化为10进制的方法
16进制转化为10进制的方法16进制转换为10进制的方法在计算机科学中,十进制(Decimal)和十六进制(Hexadecimal)是常见的数字系统。
在日常生活和计算机中,我们常使用十进制数字系统。
然而,在计算机科学和编程领域,十六进制也是非常重要的。
因此,了解如何将十六进制数转换为十进制数是非常有用的。
本文将详细介绍如何将16进制转换为10进制的方法,以及具体的步骤和示例。
一、理解十进制和十六进制在开始转换之前,我们首先需要了解十进制和十六进制之间的差异。
十进制是一种基于10个数字(0-9)的数字系统。
它的位置权重递增,从右到左,每个位置上的权重是10的幂(10^0, 10^1, 10^2, ...)。
例如,数字512的意思是5 * 10^2 + 1 * 10^1 + 2 * 10^0。
十六进制是一种基于16个数字(0-9, A-F)的数字系统。
它的位置权重递增,从右到左,每个位置上的权重是16的幂(16^0, 16^1, 16^2, ...)。
例如,十六进制数5A的意思是5 * 16^1 + 10 * 16^0。
二、将16进制转换为10进制的步骤下面是将16进制数转换为10进制数的步骤:步骤1:将16进制数的每个数字与其相应的权重相乘。
步骤2:将步骤1中的结果相加。
让我们通过一个示例来演示这个过程。
示例:将十六进制数3E7转换为十进制数。
步骤1:将16进制数的每个数字与其相应的权重相乘。
3E7 = 3 * 16^2 + E * 16^1 + 7 * 16^0步骤2:将步骤1中的结果相加。
3 * 16^2 + 14 * 16^1 + 7 * 16^0 = 768 + 224 + 7 = 999因此,十六进制数3E7等于十进制数999。
三、其他注意事项1. 当遇到十六进制数的字母A、B、C、D、E和F时,分别对应十进制数10、11、12、13、14和15。
例如,十六进制数4A2F转换为十进制数的步骤如下:4A2F = 4 * 16^3 + 10 * 16^2 + 2 * 16^1 + 15 * 16^0= 16384 + 40960 + 32 + 15= 573912. 使用计算器或编程语言来实现转换更加简便。
51单片机16进制转10进制算法
51单片机16进制转10进制算法下面是一个将16进制转换成10进制的算法的具体步骤:步骤1:获取16进制数据首先,需要获取16进制数据。
在51单片机中,可以通过串口、外设等方式获取16进制数据。
这个数据通常是一个字符串形式的16进制数值。
步骤2:拆分数据将获取的16进制数据进行拆分。
将每位16进制字符分离出来,以便进行后续的计算。
例如,对于字符串"2A",可以将其拆分为"2"和"A"两个字符。
步骤3:转换字符为数字将拆分后的字符转换为对应的数字。
对于字符"0"~"9",可以直接将其转换为数字0~9;对于字符"A"~"F",需要将其转换为数字10~15、可以使用switch语句或者查表的方式进行转换。
步骤4:计算10进制值根据拆分并转换后的数字,计算出对应的10进制数值。
根据16进制的权值,将每位的数字乘以相应的权值,并求和得到最终的10进制值。
步骤5:输出结果将最终的10进制值输出。
可以通过串口、LED等方式将结果输出到外部设备。
这是一个简单的将16进制转换成10进制的算法,并且可以很容易地在51单片机上实现。
但需要注意的是,算法中需要考虑错误处理和异常情况,例如输入数据不合法或者超出范围等情况。
可以添加对这些情况的判断和处理,以提高算法的健壮性和可靠性。
实际上,在51单片机的开发环境中,一般会提供库函数或者API来实现16进制与10进制的转换。
这些库函数或API会更加高效和方便,推荐使用它们来进行16进制转换,而不是自己编写算法。
总结:本文介绍了在51单片机中如何实现将16进制转换成10进制的算法。
算法的步骤包括获取16进制数据、拆分数据、转换字符为数字、计算10进制值和输出结果。
在实际开发中,可以使用库函数或API来实现这个转换,以提高效率和方便性。
对于特殊情况,还需要添加错误处理和异常情况的判断和处理,以提高算法的健壮性和可靠性。
16进制转化为10进制的方法
16进制转化为10进制的方法
十六进制是一种使用16个不同数字来表示数字的方式,包括0-9和
A-F。
在将十六进制转换为十进制时,需要使用一些简单的计算方法。
以下是将十六进制数转换为十进制数的步骤:
1.确定每个十六进制数字所代表的值。
0-9的十六进制数字与其在十
进制中的值相同。
而十六进制中的A-F分别对应十进制中的10-15
2.将十六进制数从右向左的顺序写下来,并从最右边的数字开始。
3.对于每个十六进制数字,将其与16的幂相乘,幂数从0开始递增。
4.执行第3步中的乘法运算,然后将结果相加,直到处理完所有的十
六进制数字。
5.最后的结果即为转换后的十进制数。
下面是一个具体的例子来说明这个方法:
将十六进制数0x2F转换为十进制数。
1.确定每个十六进制数字所代表的值:
-0的十进制值为0
-2的十进制值为2
-F的十进制值为15
2.将十六进制数从右向左的顺序写下来:2F
3.对于每个十六进制数字,将其与16的幂相乘,幂数从0开始递增:
-2*16^0=2
-F*16^1=15*16=240
4.将相乘的结果相加:2+240=242
5.结果为242,所以0x2F的十进制值为242
通过使用上述步骤,可以将任何十六进制数转换为十进制数。
16位16进制数转换为10进制数
你好,首先感谢你选择我为你撰写文章。
今天我将为你撰写一篇关于16位16进制数转换为10进制数的文章。
1. 了解16位16进制数在计算机科学中,16进制数是一种基于16个符号表示数字的计数系统。
这16个符号分别是0-9和A-F,其中A-F分别代表10-15。
16位16进制数则是由16个这样的符号组成的数字。
一个16位16进制数可以是"3A82F109BCD456EF"。
2. 转换为10进制数的方法要将16位16进制数转换为10进制数,我们可以使用以下公式:十进制数 = (an * 16^n) + (an-1 * 16^n-1) + ... + (a1 * 16^1) + (a0 * 16^0)其中,an到a0是16进制数的各个位上的数字,n是该数字的位数减1。
3. 示例让我们来看一个例子,假设我们有一个16位16进制数"3A82F109BCD456EF",现在我们要将它转换为10进制数。
根据上面的公式,我们可以逐位计算:3 * 16^15 + A * 16^14 + 8 * 16^13 + 2 * 16^12 + F * 16^11 + 1 * 16^10 + 0 * 16^9 + 9 * 16^8 + B * 16^7 + C * 16^6 + D *16^5 + 4 * 16^4 + 5 * 16^3 + 6 * 16^2 + E * 16^1 + F * 16^0然后将每一项计算出来再相加,就可以得到该16进制数对应的10进制数了。
4. 总结通过以上的例子,我们可以看到将16位16进制数转换为10进制数并不复杂,只需按照公式逐位计算,即可得到结果。
这也提醒我们在编程和计算机科学领域,对16进制和10进制数之间的相互转换要有清晰的认识和理解。
5. 我的观点个人认为,对于计算机科学和编程来说,理解进制转换是非常重要的。
而16位16进制数转换为10进制数是这个领域中的一个基础知识点,掌握了这个知识点后,可以更好地理解计算机中数字的存储和运算方式,也有助于提高编程能力。
16进制转换为10进制的方法
16进制转换为10进制的方法
嘿,朋友们!今天咱就来讲讲 16 进制转换为 10 进制的超实用方法!
这可有意思啦,就好像你有一把神奇的钥匙,可以打开不同数字世界之间的大门。
比如说,16 进制里有个数字 A,你知道它在 10 进制里是多少吗?哈哈,别急,听我慢慢道来。
其实呢,转换方法很简单啦。
先把 16 进制的每一位数字,按照从右到左的顺序,依次用它乘以 16 的相应次幂。
哎呀,这就好像搭积木一样,一块一块往上垒。
比如一个 16 进制数 3A,3 就乘以 16 的 1 次方,A 可不是10 哦,而是 10 呢,它要乘以 16 的 0 次方。
然后把这些结果加起来,哇塞,10 进制的数就出来啦!就像变魔术一样神奇!
你看,这多有趣啊,一点都不难吧?赶紧去试试,把那些 16 进制的数字都变成你熟悉的 10 进制吧!这可是个超酷的技能呢!
我的观点结论就是:16 进制转 10 进制真的超简单,学会这个方法,
你就能在数字的世界里自由穿梭啦!。
51单片机实现2,8,10,16进制转换[实践]
51单片机实现2,8,10,16进制转换[实践] #include<reg52.h>sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^4;sbit key2=P3^5; sbit key3=P3^6; sbit key4=P3^7; #define uchar unsigned char#define uint unsigned int uinta,b,c,d,e,f,g,h,j,num,temp,num1,num2,num3,num4,num5,num6;ucharSHZ[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void dkeyscan(); void jia();void jian(); void cheng(); void chu(); void deng(); void qingchu();void delay(uchar z); void display1(); void display2(); voiddisplay3(); void display4(); void display5(); void display6(); void display7(); void jinzhi2(); void jinzhi8(); void jinzhi10(); voidjinzhi16(); void jkeyscan(); void chushi(); void jiance(); void main() { chushi();while(1){P3=0xff;dkeyscan();P3=0xff;delay(2);// P3=0xff;jkeyscan();// P3=0xff;if(num3==2)jinzhi2();if(num3==8)jinzhi8();if(num3==10)jinzhi10();if(num3==16)jinzhi16();jiance();display7();}}void delay(uchar z) {uchar x,y;for(x=z;x>0;x--)for(y=110;y>0;y--); }void chushi(){num3=10;num1=10;a=b=c=d=e=f=g=h=j=0; }void jinzhi2() //二进制数 {if(num1==16){num2=a+b*16+c*16*16+d*16*16*16+e*16*16*16*16+f*16*16*16*16*16; a=num2%2;b=num2/2%2;c=num2/2/2%2;d=num2/2/2/2%2;e=num2/2/2/2/2%2;f=num2/2/2/2/2/2%2;h=num2/2/2/2/2/2/2%2;j=num2/2/2/2/2/2/2/2%2;num1=2;}if(num1==8){num2=a+b*8+c*8*8+d*8*8*8+e*8*8*8*8+f*8*8*8*8*8;a=num2%2;b=num2/2%2;c=num2/2/2%2;d=num2/2/2/2%2;e=num2/2/2/2/2%2;f=num2/2/2/2/2/2%2;h=num2/2/2/2/2/2/2%2;j=num2/2/2/2/2/2/2/2%2;num1=2;}if(num1==10){a=num2%2;b=num2/2%2;c=num2/2/2%2;d=num2/2/2/2%2;e=num2/2/2/2/2%2;f=num2/2/2/2/2/2%2;h=num2/2/2/2/2/2/2%2;j=num2/2/2/2/2/2/2/2%2;num1=2;}}void jinzhi8(){if(num1==2){num2=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2; a=num2%8;b=num2/8%8;c=num2/8/8%8;d=num2/8/8/8%8;e=num2/8/8/8/8%8;f=num2/8/8/8/8/8%8;num1=8;}if(num1==10){a=num2%8;b=num2/8%8;c=num2/8/8%8;d=num2/8/8/8%8;e=num2/8/8/8/8%8;f=num2/8/8/8/8/8%8;num1=8;}if(num1==16){num2=a+b*16+c*16*16+d*16*16*16+e*16*16*16*16+f*16*16*16*16*16; a=num2%8;b=num2/8%8;c=num2/8/8%8;d=num2/8/8/8%8;e=num2/8/8/8/8%8;f=num2/8/8/8/8/8%8;num1=8;}}void jinzhi10(){if(num1==16){num2=a+b*16+c*16*16+d*16*16*16+e*16*16*16*16+f*16*16*16*16*16; f=num2%1000000/100000;e=num2%100000/10000;d=num2%10000/1000;c=num2%1000/100;b=num2%100/10;a=num2%10;num1=10;}if(num1==8){num2=a+b*8+c*8*8+d*8*8*8+e*8*8*8*8+f*8*8*8*8*8;f=num2%1000000/100000;e=num2%100000/10000;d=num2%10000/1000;c=num2%1000/100;b=num2%100/10;a=num2%10;num1=10;}if(num1==2){num2=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2; f=num2%1000000/100000;e=num2%100000/10000;d=num2%10000/1000;c=num2%1000/100;b=num2%100/10;a=num2%10;num1=10;}}void jinzhi16(){if(num1==2){num2=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2; a=num2%16;b=num2/16%16;c=num2/16/16%16;d=num2/16/16/16%16;e=num2/16/16/16/16%16;f=num2/16/16/16/16/16%16;num1=16;}if(num1==8){num2=a+b*8+c*8*8+d*8*8*8+e*8*8*8*8+f*8*8*8*8*8;a=num2%16;b=num2/16%16;c=num2/16/16%16;d=num2/16/16/16%16;e=num2/16/16/16/16%16;f=num2/16/16/16/16/16%16;num1=16;}if(num1==10){num2=a+b*10+c*10*10+d*10*10*10+e*10*10*10*10+f*10*10*10*10*10; a=num2%16;b=num2/16%16;c=num2/16/16%16;d=num2/16/16/16%16;e=num2/16/16/16/16%16;f=num2/16/16/16/16/16%16;num1=16;}}void jiance() {if(j==0){if(h==0){if(f==0){if(e==0){if(d==0){if(c==0){if(b==0){if(a==0){num=0;}else num=1; }else num=2;}else num=3;}else num=4;}else num=5;}else num=6;}else num=6;}else num=6;}void dkeyscan() {P3=0xff;if(key1==0) {delay(10);if(key1==0) {num3=2;while(!key1);delay(10); while(!key1); P3=0xff;}}if(key2==0) {delay(10);if(key2==0) {num3=8;while(!key2); delay(10); while(!key2); P3=0xff;}}if(key3==0) {delay(10);if(key3==0) {num3=10; while(!key3);delay(10);while(!key3);P3=0xff;}}if(key4==0){delay(10);if(key4==0){num3=16;while(!key4);delay(10);while(!key4);P3=0xff;}}}void jia(){// if(num1==16)// num2=a+b*16+c*16*16+d*16*16*16+e*16*16*16*16+f*16*16*16*16*16; if(num1==10)num2=a+b*10+c*10*10+d*10*10*10+e*10*10*10*10+f*10*10*10*10*10;if(num1==8)num2=a+b*8+c*8*8+d*8*8*8+e*8*8*8*8+f*8*8*8*8*8;if(num1==2)num2=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2+h*2*2*2*2*2*2+j*2*2*2 *2*2*2*2;a=b=c=d=e=f=g=h=j=0;num=0;num4=1;}void jian(){// if(num1==16)// num2=a+b*16+c*16*16+d*16*16*16+e*16*16*16*16+f*16*16*16*16*16;if(num1==10)num2=a+b*10+c*10*10+d*10*10*10+e*10*10*10*10+f*10*10*10*10*10;if(num1==8)num2=a+b*8+c*8*8+d*8*8*8+e*8*8*8*8+f*8*8*8*8*8;if(num1==2)num2=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2+h*2*2*2*2*2*2+j*2*2*2 *2*2*2*2;a=b=c=d=e=f=g=h=j=0;num=0;num4=2;}void cheng(){// if(num1==16)// num2=a+b*16+c*16*16+d*16*16*16+e*16*16*16*16+f*16*16*16*16*16;if(num1==10)num2=a+b*10+c*10*10+d*10*10*10+e*10*10*10*10+f*10*10*10*10*10;if(num1==8)num2=a+b*8+c*8*8+d*8*8*8+e*8*8*8*8+f*8*8*8*8*8;if(num1==2)num2=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2+h*2*2*2*2*2*2+j*2*2*2 *2*2*2*2;a=b=c=d=e=f=g=h=j=0;num=0;num4=3;}void chu(){// if(num1==16)// num2=a+b*16+c*16*16+d*16*16*16+e*16*16*16*16+f*16*16*16*16*16;if(num1==10)num2=a+b*10+c*10*10+d*10*10*10+e*10*10*10*10+f*10*10*10*10*10;if(num1==8)num2=a+b*8+c*8*8+d*8*8*8+e*8*8*8*8+f*8*8*8*8*8;if(num1==2)num2=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2+h*2*2*2*2*2*2+j*2*2*2 *2*2*2*2;a=b=c=d=e=f=g=h=j=0;num=0;num4=4;}void yunsuan(){if(num4==1)num6=num5+num2;if(num4==2)num6=num2-num5;if(num4==3)num6=num2*num5;if(num4==4)num6=num2/num5;}void deng(){// if(num1==16)// num5=a+b*16+c*16*16+d*16*16*16+e*16*16*16*16+f*16*16*16*16*16;if(num1==10){num5=a+b*10+c*10*10+d*10*10*10+e*10*10*10*10+f*10*10*10*10*10; yunsuan();f=num6%1000000/100000;e=num6%100000/10000;d=num6%10000/1000;c=num6%1000/100;b=num6%100/10;a=num6%10;}if(num1==8){num5=a+b*8+c*8*8+d*8*8*8+e*8*8*8*8+f*8*8*8*8*8;yunsuan();a=num6%8;b=num6/8%8;c=num6/8/8%8;d=num6/8/8/8%8;e=num6/8/8/8/8%8;f=num6/8/8/8/8/8%8;}if(num1==2){num5=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2+h*2*2*2*2*2*2+j*2*2*2 *2*2*2*2;yunsuan();a=num2%2;b=num2/2%2;c=num2/2/2%2;d=num2/2/2/2%2;e=num2/2/2/2/2%2;f=num2/2/2/2/2/2%2;h=num2/2/2/2/2/2/2%2;j=num2/2/2/2/2/2/2/2%2;}num=0;}void qingchu(){g=0;a=b;b=c;c=d;d=e;e=f;f=h;h=j;j=g;num--; }void anjian1(uchar x ) { if(num1==2){g=x;j=h;h=f;f=e;e=d;d=c;c=b;b=a;a=g;num++;}}void anjian2(uchar x) { if(num1==8){g=x;f=e;e=d;d=c;c=b;b=a;a=g;num++;}}void anjian3(uchar x) { if(num1==10){g=x;f=e;e=d;d=c;c=b;b=a;a=g;num++;}}void anjian4(uchar x) { if(num1==16){g=x;f=e;e=d;d=c;c=b;b=a;a=g;num++;}}void jkeyscan() {P3=0xfe; //第1次检验temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xee: if(num1==2) {g=0;j=h;h=f;f=e;e=d;d=c;c=b;b=a;a=g;num++;if(num==1)num=0;}anjian2(1);anjian3(1);anjian4(1);break;case 0xde: anjian1(1); anjian2(2);anjian3(2);anjian4(2);break;case 0xbe: anjian2(3); anjian3(3);anjian4(3);break;case 0x7e: anjian4(4); jia();break;}temp=temp&0xf0;while(temp!=0xf0){temp=P3;temp=temp&0xf0;}delay(5);while(temp!=0xf0){temp=P3;temp=temp&0xf0;}P3=0xff;}}P3=0xfd; //第2次检验temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed: anjian2(4); anjian3(4);anjian4(5);break;case 0xdd: anjian2(5); anjian3(5);anjian4(6);break;case 0xbd: anjian2(6); anjian3(6);anjian4(7);break;case 0x7d: anjian4(8); jian();break;}temp=temp&0xf0;while(temp!=0xf0){temp=P3;temp=temp&0xf0;}delay(5);while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfb; //第3次检验temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb: anjian2(7); anjian3(7);anjian4(9);break;case 0xdb: anjian2(8); anjian3(8);anjian4(10);break;case 0xbb: anjian3(9); anjian4(11);break;case 0x7b:anjian4(12); cheng();break;}temp=temp&0xf0; while(temp!=0xf0) {temp=P3;temp=temp&0xf0;}delay(5);while(temp!=0xf0) {temp=P3;temp=temp&0xf0;}}}P3=0xf7; //第4次检验temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:anjian4(13); deng();break;case 0xd7: anjian4(14); if(num1==10){g=0;f=e;e=d;d=c;c=b;b=a;a=g;num++;if(num==1)num=0;}if(num1==8){g=0;f=e;e=d;d=c;c=b;b=a;a=g;num++;if(num==1)num=0;}break;case 0xb7:anjian4(15); qingchu();break;case 0x77: if(num1==16) {g=0;f=e;e=d;d=c;c=b;b=a;a=g;num++;if(num==1)num=0;}chu();break;}temp=temp&0xf0; while(temp!=0xf0) {temp=P3;temp=temp&0xf0; }delay(5);while(temp!=0xf0) {temp=P3;temp=temp&0xf0; }}}P3=0xff;}void display1() {wela=1; //第1个数字P0=0xdf;wela=0;P0=0x00;dula=1;P0=SHZ[a];dula=0;delay(1);P0=0x00;dula=1;P0=0x00;dula=0; }void display2() { wela=1; //第2个数字P0=0xef;wela=0;P0=0x00;dula=1;P0=SHZ[b];dula=0;delay(1);P0=0x00;dula=1;P0=0x00;dula=0; }void display3() { wela=1; //第3个数字P0=0xf7;wela=0;P0=0x00;dula=1;P0=SHZ[c];dula=0;delay(1);P0=0x00;dula=1;P0=0x00;dula=0; }void display4() { wela=1; //第4个数字P0=0xfb;wela=0;P0=0x00;dula=1;P0=SHZ[d];dula=0;delay(1);P0=0x00;dula=1;P0=0x00;dula=0; }void display5() { wela=1; //第5个数字P0=0xfd;wela=0;P0=0x00;dula=1;P0=SHZ[e];dula=0;delay(1);P0=0x00;dula=1;P0=0x00;dula=0; }void display6() { wela=1; //第6个数字P0=0xfe;wela=0;P0=0x00;dula=1;P0=SHZ[f];dula=0;delay(1);P0=0x00;dula=1;P0=0x00;dula=0;}void display7() { if(num==0) display1();if(num==1){display1();}if(num==2){display1(); display2();}if(num==3){display1(); display2(); display3();}if(num==4) {display1(); display2(); display3(); display4(); }if(num==5) {display1(); display2(); display3(); display4(); display5(); }if(num==6) {display1(); display2(); display3(); display4(); display5(); display6(); }if(num==7) num=6; }。
汇编十六进制数与十进制数之间的转换
北华航天工业学院课程设计报告(论文)设计课题:代码转换(十六进制数向十进制数之间的转换)专业班级:电子信息工程学生姓名:指导教师:设计时间:2010年12月19日北华航天工业学院电子工程系微机原理课程设计任务书指导教师:教研室主任:年月日目录内容摘要 (1)一.课设概述 (2)1.设计内容 (2)2.实验要求 (2)3.实验目的 (2)二.设计环境 (2)1.Masm for window集成实验环境介绍 (2)2.DOS系统功能调用 (2)3.汇编语言的上机过程 (3)三.设计方案 (4)1.设计思想 (4)2.设计方案 (4)四.总原理图 (6)五.程序清单 (6)1.方法一 (6)2.方法二 (9)六.运行结果 (12)七.实验体会 (12)八.参考文献 (13)内容摘要汇编语言是一种面向计算机的程序设计语言,和机器语言相比,汇编语言编写程序可以用助记符来表示指令的操作码和操作数,也可以用标号来替代地址,常量和变量,还引入了新的汇编指令——伪指令和宏指令。
高级程序设计语言使用了更接近人们的自然语言和习惯的教学语言来描述具体的算法,使编写的程序更加直观和简练。
高级语言通常都包含有各种函数计算,字符串处理,数据I/O等功能。
高级语言通常是独立于具体机器的,程序员可不必了解机器的指令系统和内部的具体结构,可以把精力集中在正确掌握语言的语法桂策和程序运算上。
编写的程序容易被阅读和修改。
此次课设内容以微软公司的宏汇编MASM为背景,主要学习汇编的语法规则,同时应用一些磁盘操作系统的功能调用和基本输入输出系统的中断调用。
DOS是用户和微型计算机之间的接口,用户依靠DOS来管理微型计算机。
DOS向用户提供了许多命令及系统功能,用户可以在DOS 提示符下键入命令来实现对计算机的操作。
课设中多次用到DOS指令。
索引关键词:汇编语言伪指令宏指令DOS中断一.课设概述1.设计内容:编程实现十六进制数向十进制数之间的转换。
16进制转换算成10进制程序
STC 单片机中的eeprom写入和读取6位的10进制数需要进行数据类型转换吗?具体是怎样现的呢?2013-06-04 10:24满意回答提问者采纳2013-06-04 10:276位10进制数,转换为16进制,再写入EEPROM.long x;分4个字节写入uchar c1;c1= x>>24; //最高字节c1=x>>16; //次高字节c1=x>>8; //次低字节c1=x&0xff; //最低字节分别写入就可以了。
追问我用的是stc12C5A60S2单片机,我将转化轩16进制的数保存在一个数组,然后整个数组写进去,当需要的时候再读出来还原成十进制数可否呢?回答当然可以。
追问想了一下,不知应该如何用单片机C语言去实现啊,可以指导下不?提问者评价谢谢哈评论| ningling_21 知道达人| 来自团队单片机学习| 十级采纳率26%擅长:其他编程语言汇编语言C/C++16进制转换算成10进制程序来源:本站整理作者:佚名2009年01月14日 23:33分享[导读] 16进制转换算成10进制程序unsigned char d[10]; //用于显示的10位显示缓存//======================关键词:进制16进制转换算成10进制程序unsigned char d[10]; //用于显示的10位显示缓存//============================================== ==========//16进制to10进制输出子程序:显示数据,起始位,结束位,有无小数点//============================================== ==========void output(unsigned long dd,unsigned char s,unsigned chare,unsigned char dip) {unsigned long div;unsigned char tm[8],i,j;div=10000000;for (i=0;i<8;i++) {tm[i]=dd/div;dd%=div;div/=10;}for (i=0;i<6;i++) {if (tm[i]!=0) break;tm[i]=nul;}tm[5]|=dip; //小数点控制,请看“串行LED数码管显示驱动程序”j=7;for (i=s;i<e;i++) {d[i]=tm[j];j--;}}//把显示位5-9位的10进制数转换成为16进制数 unsigned int input(void) {unsigned int dd,dat;dd=10000;dat=0;for (i=5;i<10;i++) {dat+=dd*temp;dd/=10;}return(dat);}/* 89C51系列CPU编程器接收CPU程序*/ #i nclude <reg51.h>#i nclude <intrins.h>#i nclude <absacc.h>#define e 8#define p 9#define l 10sbit led=P3^2;sbit p27=P2^7;sbit p26=P2^6;sbit p36=P3^6;sbit p37=P3^7;sbit rst=P3^3;sbit ale=P3^5;sbit vpp=P3^4;bit b_break;unsigned int adds;// 13.8mSvoid int_t0(void) interrupt 1 {TH0=-100;b_break=1;}void wait(unsigned char w) {unsigned int t=w*184;b_break=0;TL0=-t%256-1;TH0=-t/256;while (b_break==0) {}}void nop(void) {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}unsigned char command(void) {TH0=-100;b_break=0;while (RI==0) {if (b_break==1) return(0);}RI=0;return(SBUF);}void earsure(unsigned char cpu) {switch (cpu) {case 1: //89C51case 2:rst=p26=1;p27=p36=p37=0;nop();vpp=1;nop();ale=0;wait(110);ale=1;nop();break;case 3:case 4:break;case 5:case 6:break;}}void program(unsigned char cpu) {unsigned int bdata adds=0;unsigned char d;switch (cpu) {case 1: //89C51case 2:p36=p37=1;rst=1;while (1) {TH0=-100;b_break=0;while (RI==0) {if (b_break==1) return;}RI=0;d=SBUF;//addressP0=adds%256;P2=adds/256;p27=1;//dataP1=d;nop(); //48clcl//vppvpp=1;nop(); //48clcl//aleale=0;wait(1);//100uSale=1;nop(); //10uSvpp=0;nop(); //48clclp27=0;nop(); //48clclP1=0xff;TH0=-100;b_break=0;while (d!=P1) {if (b_break==1) return;} //data pollingSBUF=d;adds++;}break;case 3:case 4:case 5:case 6:break;}}void lock(unsigned char cpu) {unsigned char i;switch (cpu) {case 1: //89c51case 2://lock 1rst=p26=p36=p27=p37=1;nop();vpp=1;nop();ale=0;// for (i=0;i<6;i++) wait(100);wait(1);ale=1;nop();vpp=0;nop();//lock 2rst=p26=p27=1;p36=p37=0;nop();vpp=1;nop();ale=0;// for (i=0;i<6;i++) wait(100);wait(1);ale=1;nop();vpp=0;nop();//lock 3rst=p26=p36=1;p27=p37=0;nop();vpp=1;nop();ale=0;// for (i=0;i<6;i++) wait(100);wait(1);ale=1;nop();vpp=0;nop();break;case 3:case 4:case 5:case 6:break;}}void main(void) {unsigned char disp,flash,temp,cpu;EA=1;SCON=0xd8;PCON=0x80;TMOD=0x21;TL1=TH1=0xff;TR1=1;TH0=-100;ET0=TR0=1;flash=0x80;while (1) {temp=command();switch (temp) {case 0:case 1: //89c51case 2: //89C52case 3: //80f51case 4: //80F52case 5: //87F51case 6:cpu=temp;SBUF=temp;break;//87f52case e:SBUF=temp;earsure(cpu);break; //erasurecase p:SBUF=temp;program(cpu);break; //programcase l:lock(cpu);SBUF=temp;break; //lockdefault:SBUF=temp;break;}b_break=0;if ((++disp)>flash) {disp=0;led=!led;}}}//HT1380实时时钟驱动程序sbit clock_dat=P0^1;sbit clock_clk=P0^2;sbit clock_rst=P0^3;sbit a0=ACC^0;sbit a1=ACC^1;sbit a2=ACC^2;sbit a3=ACC^3;sbit a4=ACC^4;sbit a5=ACC^5;sbit a6=ACC^6;sbit a7=ACC^7;void clock_out(unsigned char dd) {ACC=dd;clock_dat=a0;clock_clk=1;clock_clk=0;clock_dat=a1;clock_clk=1;clock_clk=0;clock_dat=a2;clock_clk=1;clock_clk=0;clock_dat=a3;clock_clk=1;clock_clk=0;clock_dat=a4;clock_clk=1;clock_clk=0;clock_dat=a5;clock_clk=1;clock_clk=0;clock_dat=a6;clock_clk=1;clock_clk=0;clock_dat=a7;clock_clk=1;clock_clk=0;}unsigned char clock_in(void) {clock_dat=1;a0=clock_dat;clock_clk=1;clock_clk=0;a1=clock_dat;clock_clk=1;clock_clk=0;a2=clock_dat;clock_clk=1;clock_clk=0;a3=clock_dat;clock_clk=1;clock_clk=0;a4=clock_dat;clock_clk=1;clock_clk=0;a5=clock_dat;clock_clk=1;clock_clk=0;a6=clock_dat;clock_clk=1;clock_clk=0;a7=clock_dat;return(ACC);}unsigned char read_clock(unsigned char ord) { unsigned char dd=0;clock_clk=0;clock_rst=0;clock_rst=1;clock_out(ord);dd=clock_in();clock_rst=0;clock_clk=1;return(dd);}void write_clock(unsigned char ord,unsigned char dd) { clock_clk=0;clock_rst=0;clock_rst=1;clock_out(ord);clock_out(dd);clock_rst=0;clock_clk=1;}/*单个汉字库字摸提取程序,tc2.0编译*/#i nclude "stdio.h"#i nclude "dos.h"#i nclude "process.h"#i nclude "string.h"void main(void) {long int num_bytes,qm,wm;unsigned char d,i,j,k,a[132],b[132];unsigned char * data;unsigned char * hz;static unsigned char dd[103];FILE *fp;if ((fp=fopen("hzk16f","rb"))==NULL) {printf("can't open hzk16\n");exit(1);}clrscr();while (1) {data=(unsigned char *) malloc(33);printf("please input:\n");scanf("%s",dd); /*输入一个汉字*/qm=* dd; /*通过区位码计算其在hzk16f文件中的偏移地址*/qm=qm-161;if (qm>87) exit(0);wm=* (dd+1);wm=wm-161;if (wm>94) exit(0);num_bytes=((long)qm*94+wm)*32;fseek(fp,num_bytes,SEEK_SET);fgets(data,33,fp);for (i=0;i<32;i++) b[i]=* data++;for (i=0;i<32;i+=2) a[i/2]=b[i];for (i=0;i<32;i+=2) a[i/2+16]=b[i+1];for (i=8;i<16;i++) b[i]=a[i];for (i=8;i<16;i++) a[i]=a[i+8];for (i=8;i<16;i++) a[i+8]=b[i];/*转换,hzf16f在电脑的储存格式是以行为字节计算的,一般的lcd都采用以列为字节计算*/for (k=0;k<32;k+=8) {for (j=0;j<8;j++) {d=0;for (i=0;i<8;i++) {if (a[i+k]>=0x80) {switch (i) {case 0:d+=1;break;case 1:d+=2;break;case 2:d+=4;break;case 3:d+=8;break;case 4:d+=0x10;break;case 5:d+=0x20;break;case 6:d+=0x40;break;case 7:d+=0x80;break;}}}for (i=0;i<8;i++) a[i+k]<<=1;b[j+k]=d;}}clrscr();printf("/*%s:*/\n",dd); /*输出0x00格式的16进制数*/ for (k=0;k<32;k+=8) {for (j=0;j<8;j++) printf("0x%x,",b[j+k]);printf("\n");}getch();}}//按键扫描驱动程序unsigned char key,key_h,kpush;unsigned int key_l;//按键连接到p1.0、p1.1、p1.2void int_t0(void) interrupt 1 {unsigned char dd,i;TL0=TL0+30;TH0=0xfb; //800/* 按键判别*/if ((P1&0x7)==0x7) {if ((key_l>30)&&(key_l<800)&&(key_h>30)) {//释放按键,如果之前按键时间少于1秒,读入键值key=kpush;}if ((++key_h)>200) key_h=200;key_l=0;if (key>=0x80) key=0;//如果之前的按键为长按1秒,清除键值} else {kpush=P1&0x7;key_l++;if ((key_l>800)&&(key_h>30)) {//如果按键超过1秒,键值加0x80标志长按键key=kpush|0x80;key_h=0;key_l=0;}}}void main(void) {TMOD=0x1;TR0=1;ET0=1;EA=1;while (1) {while (!key) {}switch (key) {case 1:break;case 2:break;}}//串行驱动led显示,//一个74hc595位移寄存器驱动三极管驱动led位,//两个74hc595驱动led段,方式位5位x8段x2=10个数码管 //5分频,每次扫描时间位1.25ms//定义特殊符号#define nul 0xf#define qc 0xc#define qb 0xb#define q_ 0xa#define q__ 0xd#define q___ 0xe#define qp 0x10#define qe 0x11#define qj 0x12#define qn 0x13#define qf 0x14#define qa 0x15#define qr 0x16#define qd 0x17#define qu 0x18#define ql 0x19#define qh 0x1a#define qwen 0x1b#define qt 0x1c#define qla 0x1d#define qlb 0x1e#define qlc 0x1f#define qld 0x20#define qle 0x21#define qlf 0x22#define qlg 0x23#define qldp 0x24//显示段信息,不同led排列组合的段信息只需更改8个数值即可。
16进制转10进制的算法
将16进制转换为10进制的算法涉及到一个简单的转换过程。
在计算机科学中,这种转换通常称为“基数转换”。
具体来说,从16进制(也称为基数16)转换到10进制(也称为基数10)可以通过以下步骤完成:
1. 识别16进制数的每一位,从右向左(从低位到高位)。
2. 将每一位的值与16的特定次幂相乘。
例如,位于右侧的最低位(也称为最低有效位或LSB)与16的0次幂相乘,然后是下一位与16的1次幂相乘,再下一位与16的2次幂相乘,依此类推。
3. 将所有乘积相加,得到的结果就是10进制表示。
例如,考虑16进制数 'A3'。
* A 在16进制中代表10(在10进制中),而 3 在16进制中代表3(在10进制中)。
* 所以,'A3' 在16进制下等于 10*16^1 + 3*16^0 = 160 + 3 = 163。
因此,16进制 'A3' 转换为10进制等于 163。
请注意,这种转换对于任何大于1的基数都是有效的。
基数可以是2、3、4、5、6、7、8、9、10等等。
然而,对于大于10的基数,
我们通常使用字母来表示数字大于9的值。
例如,在基数12中,我们使用字母A到L来表示数字10到21。
16进制转化为10进制的方法
16进制转化为10进制的方法16进制是一种常用的数制,它是基于16个符号(0-9和A-F)来表示数字的系统。
在计算机科学和信息技术领域,16进制十分常见,尤其在表示内存地址、颜色值和字符编码等方面。
但是,有时候我们需要将16进制表示的数值转换为10进制,也就是我们常用的十进制,这篇文章将介绍一种方法来实现这个转换过程。
要将一个16进制数转换为10进制,我们需要了解16进制和10进制之间的关系。
在10进制系统中,每一位上的数字乘以10的幂次方,并将所有结果相加,就得到了10进制数值。
同样地,在16进制系统中,每一位上的数字乘以16的幂次方,并将所有结果相加,就得到了16进制数值。
让我们来看一个简单的例子,将16进制数值"2A"转换成10进制。
计算过程如下:(2 * 16^1) + (10 * 16^0) = (2 * 16) + (10 * 1) = 32 + 10 = 42因此,16进制数值"2A"转换为10进制为42。
现在,让我们来看一个稍复杂一些的例子,将16进制数值"FFC3"转换为10进制。
同样地,我们需要确定每一位所对应的权重。
在这个例子中,"F"位的权重是16的三次方,"F"位的权重是16的二次方,"C"位的权重是16的一次方,而"3"位的权重是16的零次方。
接下来,我们将每一位的数值乘以对应的权重,并将结果相加。
计算过程如下:(15 * 16^3) + (15 * 16^2) + (12 * 16^1) + (3 * 16^0) = (15 * 4096) + (15 * 256) + (12 * 16) + (3 * 1) = 61440 + 3840 + 192 + 3 = 65575因此,16进制数值"FFC3"转换为10进制为65575。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mov L_byte,A
mov A,M_byte
rlc A
mov M_byte,A
; 转换后的4位BCD码整数在RW1、RW2中。程序编码19, 时钟周期264
HEX2BCD: mov RW1,#0
mov RW2,#0
mov RW7,#16 ; 循环16次
BYTS4D: mov A,L_byte ; 最低位的内容→A
希望高手能帮我解释轻触一点点,谢啦
最佳答案 这个程序是正确的。
程序循环了16次。
把 M_byte,L_byte,左移了16次,最高位,依次移进了Cy;
用 ADDC 指令,把 RW1,RW2,左移了16次,并把Cy,加入到了最低位。
ADDC 指令后面,是十进制调整指令,所以,RW1,RW2 中的内容就
mov RW1,A ; 高位数≤6,不用调整
djnz RW7,BYTS4D ; 处理完16bit?否,继续
ret
mov A,RW2 ; BCD码带进位自身相加(×2)
addc A,RW2
da A ; 十进制调整
mov RW2,A
mov A,RW1
51单片机用汇编把16进制转化为10进制,这个程序不是很懂,希望高手能详细解释下 浏览次数:473次悬赏分:5 | 解决时间:2010-7-9 14:25 | 提问者:kaosmys
; ①十六进制整数转换成BCD码整数子程序(最大值HEX=0x270F,BCD=9999)
; 待转换的十六进制整数在M_byte、L_byte
首先 mov A,L_byte
rlc A
mov L_byte,A 不理解,感觉好像没有什么用,只是把高低字节加上进位标志不断的循环左移
其次 mov A,RW2
addc A,RW2
da A RW1,RW2里面首先就是清零的,怎么加都是0啊,为什么要自加呢?是不是这个程序本身就不全面?这个是我在网上找的