一位數碼管連在51微控制器上,按鍵後數碼管加1,按一下加1 怎樣用組合語言編寫,求程式非常感謝

時間 2021-09-10 12:08:56

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