如何把c51微控制器中的二進位制數在數碼管(共陰極)中用十進位制顯示出來?謝謝

時間 2021-09-10 12:14:01

1樓:做而論道

;-----------------------------------

display: ; 顯示 子程式.

mov a, r0 ; 取來二進位制數字.

mov b, #10 ; 換成10進位制.

div ab ; a÷b商存a, 餘數存bmovc a, @a+dptr;取.

mov p0, a

clr p2.1 ; 開十位顯示.

acall dly10ms ; 調延時10ms程式 十位.

setb p2.1 ; 關閉十位顯示.

mov a, b

movc a, @a+dptr ;取表子程式.

mov p0, a

clr p2.0 ; 開個位顯示.

acall dly10ms ; 調延時10ms程式.

setb p2.0 ; 關閉個位顯示.

ret;-----------------------------------

摘自

2樓:jhy煙雨

假如十六進位制數是w,則:

千位=w/1000;

百位=w%1000/100;

十位=w%1000%100/10;

個位=w%1000%100%10;

3樓:匿名使用者

不斷除以10,將各位的數字分離出來。

如何用51微控制器組合語言編寫一個將十六進位制數轉換成十進位制數,並在七段數碼管上顯示出來的程式

4樓:匿名使用者

keyval equ 30h

dat equ 33h

scanled equ 39h

org 0000h

ljmp main

org 001bh

ljmp t1isr ;掃描顯示

org 0030h

main:

mov sp,#5fh

mov tmod,#10h

mov th1,#0ech

mov tl1,#078h

mov 33h,#10h

mov 34h,#10h

mov 35h,#10h

mov 36h,#10h

setb tr1

setb et1

setb ea

mov keyval,50h

loop:

lcall datchg

jb p1.0,loop1

jnb p1.0,$

inc keyval

sjmp loop

loop1:

jb p1.1,loop

jnb p1.1,$

mov a,keyval

dec a

mov keyval,a

sjmp loop

t1isr:

push acc

clr tr1

mov th1,#0ech

mov tl1,#78h

setb tr1

mov dptr,#ledtab

t100:

mov r0,#dat

mov a,scanled

add a,r0

mov r0,a

mov a,scanled

jnz t101

mov p2,#01h

sjmp t1dis

t101:

dec a

jnz t102

mov p2,#02h

sjmp t1dis

t102:

dec a

jnz t103

mov p2,#04h

sjmp t1dis

t103:

mov p2,#08h

t1dis:

mov a,@r0

movc a,@a+dptr

mov p0,a

inc scanled

mov a,scanled

cjne a,#4,t1end

mov scanled,#0

t1end:

pop acc

reti

datchg:

mov a,keyval

mov b,#100

div ab

mov 34h,a

xch a,b

mov b,#10

div ab

mov 35h,a

mov 36h,b

retledtab: ; 共陰極數碼管顯示**表db 3fh,06h,5bh,4fh,66h ;01234db 6dh,7dh,07h,7fh,6fh ;56789end

在微控制器程式中如何將p1口的二進位制資料讀出後轉換成十進位制送給數碼管的前三位

5樓:月下獨酌

你讀取p2的資料之後儲存

t=p2;

p1_0=t/100;

p1_1=t%100/10;

p1_2=t%10;

然後你在從p1輸出就可以了

6樓:匿名使用者

從p1讀出的資料給一個陣列input;

int i, tn, dec = 0, t = 1;

for(i = 0; i 為每一項的值*/dec = dec + tn;

t = t * 2; /* 每往前進一次, 基值 *2 */} printf("%d", dec);

} 此時就轉換成十進回制了

然後給數碼管答相應的管腳就ok了。

控制數碼管一般都是用二進位制和十六進位制,您怎麼用十進位制呢

7樓:匿名使用者

用74ls164作為橋樑就ok了。

有幾位數碼管就用幾個74ls164。

具體接法網上都有。

需要注意的是p1口輸出的資料一定要依據你的電路接法。

51微控制器的共陰數碼管怎麼顯示數字(c語言)

8樓:匿名使用者

要讓51微控制器共陰數碼管顯示數字,只需要將微控制器的p2埠輸出數字對應的段碼即可。

以顯示數字「0」為例,c語言程式如下:

#include

#define uchar unsigned char#define uint unsigned int//數碼管的段碼編碼

uchar table[10] =;

void main()

9樓:匿名使用者

共陰極數碼管也就是說,當控制訊號為1時該段led點亮,8段數碼管的數字0~9定義為:

3fh,06h,5bh,4fh,66h ;012346dh,7dh,07h,7fh,6fh ;56789以下為簡易8路搶答器的例程:

#include

#define uchar unsigned charuchar table=;

sbit rstkey=p2^2;

sbit speaker=p2^0;

void delay()//延時約400毫秒main()

switch(key)

p1=table[i];//顯示按下搶答器的號p0=key;//顯示按下鍵號的led

while(1)}}

10樓:匿名使用者

不涉及動態顯示,未用鎖存器

#include

#define _x10  (0xfe)

#define _x1   (0xfd)

unsigned char code tab=;

void main()

}void show(unsigned char duan,unsigned char wei)

else}

11樓:走在時間的前頭

你的l1/l2/l3都是什麼啊?還有latchduan??我有做過類似的設計,需要可以互相交流一下!

二進位制如何轉為十進位制 浮點數c,二進位制如何轉為十進位制 浮點數 c

樓上的 好像還是不能解決浮點數的問題啊 int i 0 int j,k 0 double value 0.0 char d 100 cout 請輸入 n cin d j strlen d for i j 1 i 0 i cout 十進位制是 這段可以解決二進位制轉為十進位制 但是不能實現浮點數的運算...

用微控制器控制LED燈實現二進位制加法(程式沒搞懂,請大神幫忙)

墨汁諾 去掉void delay unsigned int c 這句話是不能編譯的,因為 delay 在主函式 main 裡面呼叫,但是 delay 的函式實體是在 main 函式之後的,編譯器在編譯 main 函式的時候找不到 delay 的函式實體,所以就無法通過編譯,解決方法是在檔案頭 宣告 ...

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

轉換當然用除10000得到萬位再減去萬位,同理利用上面的數得到千位,百位十位最後的餘數就是個位。抽取後四位難道不是與下0xffff搞定嗎 延遲兩秒的話可以用每次按鍵啟動或重新整理一個定時器來搞定,至於是在中斷服務程式內搞還是僅僅做個標記就看情 現在情況是你能顯示數字了,那麼你就應該能得到輸入的數字了...