微控制器是怎麼通過查表來控制數碼管的啊?

2023-02-17 03:05:17 字數 4478 閱讀 6253

1樓:匿名使用者

程式沒問題,但查表的值有問題。具體的要說清就地打一堆值,而且有點跑體,一句話就是:和常見的、可能的值不一樣。

所以最好有電路,看下p0口和數碼管(共陰?共陽?)的接法。

講清你的程式還要看你懂不懂數碼管的控制。

說下查表,查表的原理是,先知道起始的數的位置,在知道要取得要找的數的相對位置(即,你要查的是第幾個數)。

比如有表12、23、34、45、51、68;知道12在地址0023h處,要找第3個數——注意!這裡認為12是第0個數,所以直接去0023+3就找到了45。

同樣mov dptr,#numtab

mov a,#

movc a,@a+dptr

的功能就是上面講的,mov dptr,#numtab ;numtab在後面的程式裡已經被說明是**的開始地址(numtab後有冒號),自然這句把numtab的地址給到dptr中就是。

mov a,#3 ;簡單,把立即數3給到a裡,a=3

movc a,@a+dptr ;把a和dptr相加,然後程式按得到的地址去取一個數放到a裡。實現查表。

mov p0,a;a的值給p0口,顯示。

setb ; 置高。

clr ;置低。

2樓:匿名使用者

樓上的好詳細。

簡單的說就是先把表的首地址給dptr

a在這兒代表偏移量。

而@a+dptr就是說取a+dptr所在地址內的值。

#3表示的是十進位制數3

3樓:井璞蔡巧香

一起只要第一個會了,第二個基本也就會了,我幫你編寫第一個吧!

#include

voidmain()

第二個程式就是給p0口每個都賦值,然後延時,不過你自己要寫一個延時函式,8個數碼管顯示12345678其實就是一個動態掃描的過程,延時時間要短,這樣數碼管就會產生餘輝的效果,而人眼察覺不到。

期望讓你滿意。

微控制器程式詳解,尤其是查表指令,如何查表,tab怎麼那麼多資料啊?資料怎麼用?順序是怎麼的?謝謝!

4樓:做而論道

顯示數字0、1、2...給人看,須用對應的「字形**」送顯。

從tab開始,db就把這些**,順序存放如下:

0:0c0h

1:0f9h

2:0a4h

……movc ..如a為0,就從tab表查出c0h;a為2,就查出a4h。

5樓:敬一珈藍

mov dptr #tab 是將tab標號所在的地址給dptr,對於查表指令所查資料為表中第(a中地址單元的值)個資料,假如你的程式20h的值是0,那麼查表的資料就是0c0h,是1就是0f9h以此類推。另外tab的資料為八段共陽數碼管0~f的值。

微控制器89c52如何控制多個數碼管?

6樓:娜莉china小

只想用p3口的話,必須另加控制元件。

1一種方法是用兩個鎖存器來鎖存數碼管的段碼和位碼,進行動態掃描顯示。

2另一方法是,用p3口的4位接一個bcd譯碼器控制數碼管的段碼,再p3口的3位接一個3-8譯碼器來控制數碼管的位進行動態掃描。

3再就是可以用p3口的兩根序列線接串並轉換ic,來驅動數碼管。

7樓:匿名使用者

1.用兩個鎖存器來鎖存數碼管的段碼和位碼,進行動態掃描顯示。

2.用p3口的4位接一個bcd譯碼器控制數碼管的段碼,再p3口的3位接一個3-8譯碼器來控制數碼管的位進行動態掃描。

3.用p3口的兩根序列線接串並轉換ic,來驅動數碼管。

mov dptr,#tab movc a,@a+dptr mov p0,a setb p2.0 nop nop nop clr p2.0 mov a,b movc a,@a+dptr

8樓:

mov dptr,#tab ;把tab裡面的內容(是個立即數)放進dptr作為表頭地址。

movc a,@a+dptr ;a之前已經存進了需要查值的值,這條語句可以方便地查到對應的值。

mov p0,a ;把p0口設定為a的值。

setb ;把p2^0口設定為高電平。

nop ;空指令。

nop ;空指令。

nop ;空指令。

clr ;把p2^0口設定為低電平,即現在p2^0口輸出了一個脈衝。

mov a,b ;把b的值放到a中(b中應該放著下一個需要查值的值)

movc a,@a+dptr ;a之前已經存進了需要查值的值,這條語句可以方便地查到對應的值。

9樓:匿名使用者

p1接ad0804的8個腳,p0口接數碼管段選,接位選,接2個口。

org 0000h

ajmp main

org 0030h

main: call xie

call delay

call du

call xianshi

ajmp main

;開始轉換。

xie: clr ;選中。

nopclr

nopnop

setb ;當由低到高時開始轉換nopnop

setb ;取消選中。

retdu: mov p1,#0ffh

nopclr

nopclr

nopnop

nopmov a,p1

nopmov 20h,a

nopnop

setb nopnop

setb retdelay: mov r6,#

dl1: mov r7,#

djnz r7,$

djnz r6,dl1

retxianshi:mov b,#

mov a,20h

div ab

mov 30h,a

mov a,b

mov b,#

div ab

mov 31h,a

mov a,b

mov b,#

mul ab

mov 32h,a

mov a,30h

mov dptr,#tab

movc a,@a+dptr

clr clr

mov p0,a

call delay

setb mov a,31h

movc a,@a+dptr

clr mov p0,a

call delay

setb mov a,32h

movc a,@a+dptr

clr mov p0,a

call delay

setb ret;tab:db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h

tab:db 0,1,2,3,4,5,6,7,8,9end

微控制器中如何通過程式設計來獲取led數碼管的段碼 5

10樓:匿名使用者

一般是在程式中附加一節段碼錶,然後在程式中根據要顯示的字元用查表的方法查得段碼,然後送到led數碼管的段選端。

11樓:匿名使用者

微控制器中的段碼是直接從io口送出的,如果該io口實輸入輸出雙向狀態,那麼可以直接讀取就可以獲取段碼。比如:如果p0口為段碼輸出io口,那麼。

mov a,p0

如果該io口實輸出模式,那麼就不能直接讀取了,需要通過其他口接入來讀取段碼。

12樓:做而論道

這問題是錯誤的。

提問者基本概念不清,弄錯了輸入、輸出的關係。

建議提問者,好好看看微控制器的書。

不要自己瞎編題目。

13樓:匿名使用者

這要看你硬體怎麼接的。

14樓:匿名使用者

是你往外送資料,不是你去讀資料。

51微控制器的查表法 的 原理是 什麼 ?透徹點給解釋下吧!

15樓:幻世萌

查表,其實就是字面上的意思,先用c語言的形式解釋比如用查表法計算平方根,你應該知道用微控制器去求平方根的速度肯定是很慢的,但是當我們只需要求1到9的平方根時,我們可以把1到9的平方根直接儲存在sqrt這個陣列裡,sqrt[1]=1;sqrt[2]=;這樣類推。需要用到那個數的平方根直接sqrt裡面放上那個數就行了,這就是查表了。

這樣速度就會快很多。微控制器查表用的最多的是數碼管的譯碼工作,就是把0-9的數字轉換成對應數碼管的段碼。還有就是一些需要計算的值。

因為微控制器的執行速度問題,為了提高速度常用查表法。如果是彙編其實就是把表放在資料區了,通過地址來查表。原理是一樣的。

希望對你有所幫助。

微控制器89c52如何控制多個數碼管?

微控制器中存入的資料用查表的方式顯示數碼管,求大神指點!

設計按鍵輸入通過微控制器控制4位數碼管左右控制選擇哪一位

說實話沒怎bai麼聽明du白你問的意思,特別是zhi上下控制0 9,我以dao前自己玩的時候4位數內碼管是容有的賣的,引腳只有12個吧,也記不大清了,反正不可能32個。至於說思路也就是高低電平讓他導通而已,電路圖也簡單,無非是微控制器最小系統加你那個破燈管和按鍵,無非注意的是很多人都直接將數碼管和微...

51微控制器怎麼通過串列埠傳送小數,51微控制器怎麼通過串列埠傳送小數?

方法多的去了,把數字37.5轉換為字串 37.5 傳送可以,用壓縮bcd碼0x37 0x05傳送也可以,多得是。不一定一定要浮點處理。你自己定一個協議,1次發6個資料,選擇其中的2個作為資料,其他作為驗證碼,另一個微控制器接收到就演算法處理 微控制器不支援浮點運算的,你可以申請兩個變數,把整數和小數...

微控制器控制74ls164控制數碼管顯示怎麼程式設計 組合語言

74ls164是串 bai入並出轉換晶片,可du以藉助串列埠來zhi實現,也可以用普dao通io口模擬實現。舉例如 專下 include define uchar unsigned charuchar table sbit keyup p3 6 sbit keydn p3 7 void delay ...