1樓:做而論道
;一位數碼管連在51微控制器上,按鍵後數碼管加1,按一下加1.
sp1 equ p3.2
org 0000h
mov 30h, #3fh ;0
mov 31h, #06h ;1
mov 32h, #5bh ;2
mov 33h, #4fh ;3
mov 34h, #66h ;4
mov 35h, #6dh ;5
mov 36h, #7dh ;6
mov 37h, #07h ;7
mov 38h, #7fh ;8
mov 39h, #6fh ;9
m_0: mov r0, #30h
disp: mov p2, @r0
wt: jb sp1, $
mov r6, #40
djnz r7, $
djnz r6, $ - 2
jb sp1, wt
jnb sp1, $
inc r0
cjne r0, #3ah, disp
sjmp m_0end
2樓:靜雨月軒
key bit p0.0
brepons bit 20h.0
org 0000h
ajmp start
org 0030h
;************************start: mov dptr,#tabmov 30h,#0
main: mov a,30h
movc a,@a+dptr
mov p1,a
jb key,l1
call delay
jb key,main
jb brepons,main
setb brepons
inc 30h
mov a,30h
cjne a,#10,main
ajmp start
l1: clr brepons
ajmp main
;*************************delay: mov r6,#50
l2: mov r7,#100
djnz r7,$
djnz r6,l2
rettab: db 0c0h,0f9h,0a4h,0b0h,99hdb 92h,82h,0f8h,80h,90hend這是共陽的數碼管,記得,**的時候最小系統不用也沒事,我懶的畫
3樓:匿名使用者
哎,看了2個答案,完全是抄的,連錯誤都一模一樣,反正什麼說呢,某不負責任的書上來的吧。不說了。
4樓:匿名使用者
;按鍵後數碼管加1,到9後又從0開始
org 0000h
ajmp main
org 0040h
main:
mov dptr,#table
clr a
mov r0,a
movc a,@a+dptr
mov p2,a
lp0:
setb p1.0
jnb p1.0,$
inc r0
mov a,r0
movc a,@a+dptr
mov p2,a
cjne r0,#10,lp0
ajmp main
table:
db 0fch;0
db 060h;1
db 0dah;2
db 0f2h;3
db 066h;4
db 0b6h;5
db 0beh;6
db 0e0h;7
db 0feh;8
db 0f6h;9end
5樓:
一、圖貌似有點問題:
1、用的是共陰極數碼管,如果用微控制器直接驅動的話,應該用共陽極的;
2、所有led(包括數碼管)都未接限流電阻,建議串接470歐左右的;
3、微控制器直接驅動「sounder」,估計驅動電流不夠,建議接三極體後再輸出
二、程式可以借鑑樓上的,但需要修改:
......
setb p1.0
jnb p1.0,$
......
在這2句之間需要加入:
jb 1.0 lp0
lcall delay_50ms
另:加入子程式delay_50ms
delay_50ms:
mov r7,#0c3h
lp_dl:
mov r6,#00h
djnz r6,$
djnz r7,lp_dl
ret如果換成共陽極數碼管後,資料表換成以下的:
table: ;表:共陽數碼管 0-9 a-fdb 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh
以上意見供參考
6樓:匿名使用者
org 0000h
ajmp main
org 0040h
main:
mov dptr,#table
clr a
mov r0,a
movc a,@a+dptr
mov p2,a
lp0:
setb p1.0
jnb p1.0,$
inc r0
mov a,r0
movc a,@a+dptr
mov p2,a
cjne r0,#10,lp0
ajmp main
table:
db 0fch;0
db 060h;1
db 0dah;2
db 0f2h;3
db 066h;4
db 0b6h;5
db 0beh;6
db 0e0h;7
db 0feh;8
db 0f6h;9end
一位數碼管連在51微控制器上,按鍵後數碼管加1,按一下加1.怎樣用組合語言編寫?
7樓:
一、圖貌似有點問題:
1、用的是共陰極數碼管,如果用微控制器直接驅動的話,應該用共陽極的;
2、所有led(包括數碼管)都未接限流電阻,建議串接470歐左右的;
3、微控制器直接驅動「sounder」,估計驅動電流不夠,建議接三極體後再輸出
二、程式可以借鑑樓上的,但需要修改:
......
setb p1.0
jnb p1.0,$
......
在這2句之間需要加入:
jb 1.0 lp0
lcall delay_50ms
另:加入子程式delay_50ms
delay_50ms:
mov r7,#0c3h
lp_dl:
mov r6,#00h
djnz r6,$
djnz r7,lp_dl
ret如果換成共陽極數碼管後,資料表換成以下的:
table: ;表:共陽數碼管 0-9 a-fdb 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh
以上意見供參考
設計一個微控制器輸入顯示系統,要求每按一下按鍵數碼管顯示資料加1(數碼管初始值為0,9加1 後顯示0)。
8樓:沈偉棟
程式清單如下:
#include < reg51.h >// 51微控制器標頭檔案
#define uchar unsigned char // 巨集定義
,用uchar替代無符號字元型
#define uint unsigned int // 巨集定義,用uint 替代無符號整數型
sbit key = p2 ^ 7;
uchar count = 0;
uchar code datachar[10] = // 定義數碼管的段碼 '0'~'9'、'-'、' ' 'p'
;//延時n毫秒
void delaynms( uint n ) // 利用x、y作簡單的自減運算,消耗微控制器指令週期,達到延時的目的
//數碼管顯示 // 顯示方式為動態掃描,視覺暫留原理
void display( uchar num ) // *p指向main函式中的陣列shownum的首地址
void main( void )
while( !key );
}display( count );}}
擴充套件資料
8051微控制器具有如下功能:
8位cpu·4kbytes程式儲存器(rom) (52為8k)
128bytes的資料儲存器(ram) (52有256bytes的ram)
32條i/o口線·111條指令,大部分為單位元組指令
21個專用暫存器
2個可程式設計定時/計數器·5箇中斷源,2個優先順序(52有6個)
一個全雙工序列通訊口
外部資料儲存器定址空間為64kb
外部程式儲存器定址空間為64kb
邏輯操作位定址功能·雙列直插40pindip封裝
單一+5v電源供電
cpu:由運算和控制邏輯組成,同時還包括中斷系統和部分外部特殊功能暫存器;
ram:用以存放可以讀寫的資料,如運算的中間結果、最終結果以及欲顯示的資料;
rom:用以存放程式、一些原始資料和**;
i/o口:四個8位並行i/o口,既可用作輸入,也可用作輸出
t/c:兩個定時/記數器,既可以工作在定時模式,也可以工作在記數模式;
五個中斷源的中斷控制系統;
一個全雙工uart(通用非同步接收傳送器)的序列i/o口,用於實現微控制器之間或微控制器與微機之間的序列通訊;
片內振盪器和時鐘產生電路,石英晶體和微調電容需要外接。最佳振盪頻率為6m—12m。
9樓:匿名使用者
#include < reg52.h > // 嵌入51微控制器標頭檔案
#define uchar unsigned char // 巨集定義,用uchar替代無符號字元型
#define uint unsigned int // 巨集定義,用uint 替代無符號整數型
sbit key = p2 ^ 7;
uchar count = 0;
uchar code datachar[10] = // 定義數碼管的段碼 '0'~'9'、'-'、' ' 'p'
;//延時n毫秒
void delaynms( uint n ) // 利用x、y作簡單的自減運算,消耗微控制器指令週期,達到延時的目的
//數碼管顯示 // 顯示方式為動態掃描,視覺暫留原理
void display( uchar num ) // *p指向main函式中的陣列shownum的首地址
void main( void )
while( !key );
}display( count ); }}
51微控制器組合語言按鍵控制數碼管加1加到999
10樓:匿名使用者
思路是對的,細節描述有問題,演算法描述要嚴謹。為什麼要99時清零啊,這可能就是錯誤的地方了。
系統初始化時,清除使用到的暫存器!!然後,當需要加1時做如下動作暫存器a = a+1
如果暫存器a == 100,
這樣就可以了,b中的1代表100,a中的1就是1
11樓:
檢測到按鍵:
mov a,30h
inc a
mov 30h,a
cjne a,#100,bj1
bj1: jc bj2
mov 30h,#0
mov a,31h
inc a
mov 31h,a
bj2: 然後把31h處理到第一位顯示,30h值處理到後2位顯示
微控制器控制led燈和一位數碼管, 51微控制器 我的學習板是LED和數碼管介面都是P0,請問怎麼樣實現分別控制呢?
體積大小可以不同,因為led電流小,但是電阻值要相同。還有焊接時有沒有短路開路,晶振不影響工作,隻影響精度。微控制器,全稱單片微型計算機 英語 single chip microcomputer 又稱微控制器 microcontroller 是把 處理器 儲存器 定時 計數器 timer count...
微控制器如何讓數碼管每一位單獨閃爍
例如是51系列的微控制器的話,由於是八位的,每個i o口對應著八位資料,如p0 對應著 0xff。如果led燈是i o口高電平亮,p0口每個管教上面接有一個led燈,那麼想讓哪個燈亮就讓哪個管腳的電平賦值為1.例如,我想讓p0.2 p0.4 p0.7管腳上面的燈亮,那麼p0 10010100h 0x...
51微控制器連線12位七段數碼管,如何驅動(用三極體)
注意要加延時,以匹配段選。否則會出現錯位的現象。 我覺得用三極體驅動可能使電路變得複雜,除錯起來也比較麻煩,還是考慮一下max7219 max7221,一塊晶片就可以驅動8位數碼管了。還可以級連。驅動程式寫起來也很簡單。 邵獻 我給你個4led的,懶得畫圖了。要增加管子的數量,把hc138換成hc1...