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搞定嗎 延遲兩秒的話可以用每次按鍵啟動或重新整理一個定時器來搞定,至於是在中斷服務程式內搞還是僅僅做個標記就看情 現在情況是你能顯示數字了,那麼你就應該能得到輸入的數字了...