单片机C51课程设计 16进制转为10进制

程序刚运行时,数码管全黑。从键盘输入并在数码管上回显十六进制数。最先键入的数是最低位,刚键入的数在数码管显示器的最左边显示,并将原键入的数依次向右移动一位。若多于四个,则仅显示后键入的四个数。
从键盘键入一个4位十六进制数(0000~270F),大约两秒后显示出对应十进制数(0000~9999)。
就是如何将输入的四个十六进制数字进行转换然后取低四位依次输出在数码管上面,按键就是0-f的,我已经搞好了按键后输出对应数字的程序,现在就不知道如何转换的程序和取低位的程序还有延时2s后输出十进制数的程序的插入在其中也不知道那几个程序如何写()
输出的程序是void main()
{
BYTE i=0;
initial();
while(1)
{
i=keyscan();
if(i!=0xbb)
{
sendto(LED_TAB[i]);
Longdelay(50);
}
哎,请给出详细的,因为不知道在哪里插入才可以正确运行,本人C学的不太好,我们主修的时候都是汇编语言

他的题目要求是要输入4位数后,然后对这个四位数进行转换,而不是给每个位的数进行转换呀

转换当然用除10000得到万位再减去万位,同理利用上面的数得到千位,百位十位最后的余数就是个位。
抽取后四位难道不是与下0XFFFF搞定吗
延迟两秒的话可以用每次按键启动或刷新一个定时器来搞定,至于是在中断服务程序内搞还是仅仅做个标记就看情

现在情况是你能显示数字了,那么你就应该能得到输入的数字了吧。(方便起见就不用输入来触发中断了)程序主循环结构是:1、定时扫描输入I/O状态,定时的作用就是用来做防颤处理的,在间隔几毫秒的过程后,如果按键状态还是变化了,才表示实际按动过了。2、上面如果检测到有变化,则将定时器的数字清零,在这个定时器的服务程序里执行将一个标志置位。然后再执行内存中输入数字的变化,和显示的内容。3、判断是否有定时器中断触发的标志,有的话就执行将数转换成BCD码(就是转换成10进制数)的过程,并显示出来。如此就完成了。
至于定时器中断怎样搞,和汇编相比,更简单了,直接初始化定时器的特殊定时器,再在程序里定义中断服务程序就好了。我估计你的输入数字还没能整理,那样的话在上面的第2步里,的第二个操作中先将原数乘16,再加上后来添的数就OK了,显示的话直接对这个数进行处理就好了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-06-23
显示器、按键,你给出电路先。
第2个回答  2010-06-23
将其它的函数也发过来看看呗.
第3个回答  2010-06-23
这个课题有点好玩哦!!
第4个回答  2010-06-25
姚创艺你这个问题哥可以回答,来找哥本回答被提问者采纳

单片机C51课程设计 16进制转为10进制
3、判断是否有定时器中断触发的标志,有的话就执行将数转换成BCD码(就是转换成10进制数)的过程,并显示出来。如此就完成了。至于定时器中断怎样搞,和汇编相比,更简单了,直接初始化定时器的特殊定时器,再在程序里定义中断服务程序就好了。我估计你的输入数字还没能整理,那样的话在上面的第2步里...

51单片机用汇编把16进制转化为10进制,这个程序不是很懂,希望高手能详细...
这个程序是正确的。程序循环了16次。把 M_byte,L_byte,左移了16次,最高位,依次移进了Cy;用 ADDC 指令,把 RW1,RW2,左移了16次,并把Cy,加入到了最低位。ADDC 指令后面,是十进制调整指令,所以,RW1,RW2 中的内容就是BCD码。

51单片机用汇编把16进制转化为10进制,这个程序不是很懂,希望高手能详细...
这个程序是正确的。程序循环了16次。把 M_byte,L_byte,左移了16次,最高位,依次移进了Cy;用 ADDC 指令,把 RW1,RW2,左移了16次,并把Cy,加入到了最低位。ADDC 指令后面,是十进制调整指令,所以,RW1,RW2 中的内容就是BCD码。

单片机C51中16进制转10进制的问题
i=hex\/10;m=hex%10;其中hex为你存放十六进制的变量 i为十进制的十位 m为十进制的个位 即是shi=dd\/10;ge=dd%10这样算,自己可以调试看看

51单片机C语言里 怎样将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)(...

单片机汇编语言怎么将16进制转化为10进制
可用除、求余的方法进行分离,如一个2位的16进制数可三位10进制数,设16进制数为X,转换后的十进制数abc,则 a=x\/100 ; b=(x-100*a)\/10 ; c=x%10 。

...将一个双字节的16进制数转换为十进制,转换后的数只保留万千_百度知 ...
子程序如下:MOV A, R4 ;R4原有十、个位数 SWAP A ANL A, #0FH ;截取十 MOV B, A ;保存一下 ;MOV A, R3 ;R3原有千、百位 SWAP A MOV R3, A ;变成百、千位 ANL A, #0F0H ;截取百位 ADD A, B ;加上十位 XCH A, R3 ;R3中就是百位、...

的51单片机中c语言中如何将十六进制数转化为十进制
如果你仅仅是使用转换结果的话,那么赋值语句可以自动转换。比如:unsigned char x,y;y=0x5a;x=y;你输出格式是10进制,那么变量表示的就是十进制数。

单片机实验频率计时怎么把十六进制转成十进制然后送到12864上去?_百度...
不管是什么进制的,它都是一个数,其实在单片机里面,数值都是二进制表示的,进制不同只是表达的方式不同,而要显示出来,我们习惯用十进制,所以需要把数值用十进制表达出来。举例给你说明:例如789这个数值(不要再讨论什么进制,你可以把它写成0x0315,也可以把它写成1100010101).我们用代号Val来表示...

c51单片机流水灯程序。求问大神他为什么把16进制数定义成unsign char...
你把十六进制和16bit(16位)的概念搞混了。同一个数字,可以用10进制表示、也可以用16进制表示,当然二进制、8进制等都可以,甚至你自己造个12进制都没问题。比如你给一个变量a赋值为0xfe,a=0xfe,这个效果与下面这2种完全一样,看准了,是完全完全完全一样!!对单片机来说没有任何影响:一、...

相似回答
大家正在搜