微控制器C51課程設計16進位制轉為10進位制

時間 2022-02-07 19:35:04

1樓:匿名使用者

#include unsigned char get_key;unsigned char dis[4]=; unsigned char seg;unsigned char delay;unsigned int conut;unsigned char code disp_code=;

void scanf(void) conut=1000; for(j=0;j<4;j++) dis[0]=get_key-1; get_key=0; } }}

2樓:夕蝶龐潤

轉換當然用除10000得到萬位再減去萬位,同理利用上面的數得到千位,百位十位最後的餘數就是個位。

抽取後四位難道不是與下0xffff搞定嗎

延遲兩秒的話可以用每次按鍵啟動或重新整理一個定時器來搞定,至於是在中斷服務程式內搞還是僅僅做個標記就看情

現在情況是你能顯示數字了,那麼你就應該能得到輸入的數字了吧。(方便起見就不用輸入來觸發中斷了)程式主迴圈結構是:1、定時掃描輸入i/o狀態,定時的作用就是用來做防顫處理的,在間隔幾毫秒的過程後,如果按鍵狀態還是變化了,才表示實際按動過了。

2、上面如果檢測到有變化,則將定時器的數字清零,在這個定時器的服務程式裡執行將一個標誌置位。然後再執行記憶體中輸入數字的變化,和顯示的內容。3、判斷是否有定時器中斷觸發的標誌,有的話就執行將數轉換成bcd碼(就是轉換成10進位制數)的過程,並顯示出來。

如此就完成了。

至於定時器中斷怎樣搞,和彙編相比,更簡單了,直接初始化定時器的特殊定時器,再在程式裡定義中斷服務程式就好了。我估計你的輸入數字還沒能整理,那樣的話在上面的第2步裡,的第二個操作中先將原數乘16,再加上後來添的數就ok了,顯示的話直接對這個數進行處理就好了。

51微控制器c語言裡 怎樣將16進位制 直接化成 10進位制 5

3樓:匿名使用者

我這兒有一個進位制轉換的程式,你可以參考一下:

#include

#include

#include

int count=0;

void *tentoboh(int a,int n)else

str[i++]=t;

a=a/n;

count++;

<='9')

a+=(str[i]-'0')*(int)pow(n,i);

if(str[i]>='a'&&str[i]<='f')a+=(str[i]-'a'+10)*(int)pow(n,i);

if(str[i]>='a'&&str[i]<='f')a+=(str[i]-'a'+10)*(int)pow(n,i);

i++;

}return a;

}void main()

4樓:姜森_團泊東

u8 a,b; //定義a,b為8位二進位制數u16 temp; //定義temp為16位二進位制數temp=a<<8 | b; //將 a左移8位和b合到一起temp 就是你想要的數,(無所謂十進位制還是十六進位制)例: a=0x3b b=0xc2 那麼 temp=0x3bc2 十進位制就是15298

在程式裡面直接引用變數temp就可以,

例:u8 a,b;

a=temp/10000;

b=temp%10000;

那麼 a=1,b=5298;

5樓:匿名使用者

功能:十六進位制轉為十進位制

//// 輸入: const unsigned char *hex 待轉換的十六進位制資料

// int length 十六進位制資料長度

//// 輸出:

//// 返回: int rslt 轉換後的十進位制資料

//// 思路:十六進位制每個字元位所表示的十進位制數的範圍是 0 ~255 ,進製為 256

// 左移 8 位 (<<8) 等價乘以 256

unsigned long hextodec(const unsigned char *hex, int length)

return rslt;}

6樓:匿名使用者

c中就不存在這個問題了,不過我明白你的意思,去看看 sprintf 函式吧

7樓:雨落沉軒

應該是自動轉化的的,不用考慮

c51語言程式設計實現2位元組16進位制數轉換為10進位制數

8樓:rewrw的老巢

#define shb (*(volatile unsigned char*)0x30) //高位元組

#define slb (*(volatile unsigned char*)0x31) //低位元組

#define ehb (*(volatile unsigned char*)0x21) //高位元組

#define elb (*(volatile unsigned char*)0x22) //低位元組

void main()

#define shb (*(volatile unsigned char*)0x30) //高位元組

#define slb (*(volatile unsigned char*)0x31) //低位元組

#define ehb (*(volatile unsigned char*)0x21) //高位元組

#define elb (*(volatile unsigned char*)0x22) //低位元組

void main()

9樓:1997排長

設定一個迴圈遍歷字串,設定一個初值為0的變數sum記錄十進位制數,從下標為0開始,作sum*2+該元素-'0'操作,遍歷完成後sum即為所求之結果。**如下:

//#include "stdafx.h"//if the vc++6.0, with this line.

#include "stdio.h"

int main(void)

的51微控制器中c語言中如何將十六進位制數轉化為十進位制

10樓:雋淑珍艾醜

如果你僅僅是使用轉換結果的話,那麼賦值語句可以自動轉換。比如:

unsigned

char

x,y;

y=0x5a;

x=y;

你輸出格式是10進位制,那麼變數表示的就是十進位制數。

11樓:

16進位制就是逢16進1,但我們只有0~9這十個數字,所以我們用a,b,c,d,e,f這五個字母來分別表示10,11,12,13,14,15

。字母不區分大小寫。

十六進位制數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方……

所以,在第n(n從0開始)位上,如果是是數x(x大於等於0,並且x小於等於

15,即:f)表示的大小為x*

16的n次方。

假設有一個十六進數

2af5,

那麼如何換算成10進位制呢?

用豎式計算:

2af5換算成10進位制:

第0位: 5*

160=5

第1位: f*

161=240

第2位: a*

162=2560

第3位: 2*

163=8192

+-------------------------------------

10997

直接計算就是:5*

160+f

*161+

a*162

+2*16

3=10997

(別忘了,在上面的計算中,a表示10,而f表示15)現在可以看出,所有進位制換算成10進位制,關鍵在於各自的權值不同。

假設有人問你,十進數

1234

為什麼是

一千二百三十四?你儘可以給他這麼一個算式:

1234=1

*103+

2*102

+3*10

1+4*100

微控制器課程設計

那天下午給你發了之後一直忙,都還沒來得及給你詳細說說,既然都交了,如果有問題再聯絡我吧。誰知道啊!你需要指導什麼呢?這是個很初級的課題啊。按鍵 和 顯示 都能在網上找到編好的程式模組,修改一下直接就能用。pwm是佔空比之類的東西,調節方波的佔空比就能調節燈光亮暗,也就是延時時間的問題。可以用一個演算...

c51微控制器程式求助

sec cnt equ 30h sec 0x equ 31h org 0000h sjmp mian org 000bh sjmp int t0 mian mov sec cnt,20 mov sec 0x,00h mov tmod,01h mov th0,65536 50000 256mov tl...

微控制器課程設計,病床呼救系統,高手請告訴我程式(儘量用組合語言)吧具體要求如下

我以前做過這個課程設計,發到你郵箱裡了,你看一下是否合適。 dj影逸 64張床位可以用矩陣按鍵來模擬 加 的響應按鍵 一共是65個按鍵 你的設計挺鬱悶的 可以用簡單的按鍵查詢來判斷床位是否有呼叫,有的話就記錄下該病床的號碼,顯示在led或lcd上 振鈴可以用揚聲器代替,按下按鍵後 取消揚聲器呼叫和顯...