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 ...