基於80c51的時鐘,怎樣用組合語言實現24小時與24小時的時間切換

2022-07-05 23:22:41 字數 7152 閱讀 2642

1樓:袁逸凡is道長

按鍵的檢測自己寫

;假設24小時的時間存在bh24

mov r0,bh24

cjne r0,0,not_zero

push r0

push r1

push r2

mov r0,24

not_zero:

mov a,r0

sub a,12

anl a,080h

;算數完成以後,如果a=0x80則是上午

cjne a,080h,am

jmp pm

am:mov r2,0

mov r1,a

jmp deal_hour

pm:mov r2,1

mov a,r0

sub a,12

mov r1,a

jmp deal_hour

deal_hour:

;r1:小時,r2上下午

;這裡寫顯示,處理**

pop r2

pop r1

pop r0

2樓:匿名使用者

可以參考實時時鐘晶片ds1302的方法,用不同的編碼記錄小時資訊我不能上圖,只能用文字描述下了:

hour bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

bit7: 1,12小時制,0,24小時制bit6: 無效

bit5: 12小時制時 1為下午,0為上午24小時制時和bit4一起組成小時的10位bit4: 小時的10位

bit3~bit0:小時的個位

這是切換程式

void hourshift()

else hour = hour&0x1f;

}else //24小時制

hour = hour|0x80;}}

彙編程式:實現一個24小時制的電子鐘程式

3樓:匿名使用者

自己寫了一個時鐘程式,用來模擬時間型別軟體的破解,先從基礎的執行時間開始,程式執行介面如圖:十秒後程式自動退出

十秒後程式自動退出

破解思路:檢視程式匯入表函式(有n多個程式可以檢視,以petools為例),如圖所示:輸入表目錄

只找到一個和時間有關的函式getsystemtimeasfiletime。我們可以通過od自帶的api斷點,去斷下getsystemtimeasfiletime這個函式,

enter進入,在系統領空下段,執行程式,會斷在這個函式的系統領空,之後ctrl+f9執行到返回到,call getsystemtimeasfiletime的呼叫,再ctrl+f9執行到返回,來到如下關鍵**處:

可見通過上面call函式clock的呼叫,返回值去和10比較,來判斷程式執行的時間,修改跳轉或者修改a的值即可實現破解。

51微控制器時鐘與日期切換匯程式設計序怎麼寫

4樓:

開闢一個顯示快取,比如叫display_buff,做一個顯示函式定時將display_buff中的值顯示出來。

然後定時將時鐘、日期寫入display_buff。

寫入時鐘時就會顯示時鐘,寫入日期時就會顯示日期。

5樓:做而論道

定時。每隔 10s,交替一下。

6樓:一萬光年

怎麼切換? 是顯示的內容的切換嗎?

7樓:匿名使用者

彙編的我不知道,c語言的倒是很多的

微控制器時鐘程式 24小時制 20

8樓:東穎崇

沒什麼難的啊,就是個顯示程式,再用個定時器就好了- -!

9樓:酷酷一號

我真想自己試著編這個程式。

10樓:

c語言的:

#include

#include

unsigned char ledbuf[8];

code unsigned char ledmap = ; //8段顯示

void delay(unsigned char cnt)

#define tick 7554

#define t100us (256-134)

unsigned char hour,minute,second,ankey;

unsigned int c100us;

void sees()

void displayled()

}void key()

}if(p33==0)

}if(p35==0)}}

}void t0int()interrupt 1}}

}void main()

}彙編的:

org 0000h

ajmp main

org 000bh

ajmp time

org 0300h

main:

mov p3,#0ffh;

mov 25h,#00h;

mov r0,#40h;

mov 20h,#00h;

mov 21h,#00h;

mov 22h,#00h;

mov 23h,#00h;

mov p2,#0ffh

mov ip,#02h;

mov ie,#82h;

mov tmod,#01h;

mov tl0,#0b0h;

mov th0,#3ch;

setb tr0;

mov sp,#50h;

next:

lcall disp;

lcall key;

jz next;

lcall ankey;

sjmp next;

nopnop;

nop;

time:

push acc;

push psw;

mov tl0,#0b4h;

mov th0,#3ch;

inc 20h;

mov a,20h;

cjne a,#20,reti1;

mov 20h,#00h;

mov a,21h;

inc a;

mov 21h,a;

cjne a,#3ch,reti1;

mov 21h,#00h;

mov a,22h;

add a,#01h;

mov 22h,a;

cjne a,#3ch,reti1;

mov 22h,#00h;

mov a,23h;

add a,#01h;

mov 23h,a;

cjne a,#18h,reti1;

mov 23h,#00h;

reti1:

pop psw;

pop acc;

reti;

nopnop

disp:

mov a,21h;

mov b,#10;

div ab;

mov 41h,a;

mov 40h,b;

mov a,22h;

mov b,#10;

div ab;

mov 43h,a;

mov 42h,b;

mov a,23h;

mov b,#10;

div ab;

mov 45h,a;

mov 44h,b;

mov r0,#40h

lcall disp2; 1

clr p2.0;

lcall delay;

setb p2.0;

inc r0;

lcall disp2;

clr p2.1;

lcall delay;

setb p2.1;

mov p0,#0bfh;

clr p2.2 ;

lcall delay;

setb p2.2;

inc r0;

lcall disp2;

clr p2.3;

lcall delay;

setb p2.3;

inc r0;

lcall disp2;

clr p2.4;

lcall delay;

setb p2.4;

mov p0,#0bfh;

clr p2.5;

lcall delay;

setb p2.5;

inc r0;

lcall disp2;

clr p2.6;

lcall delay;

setb p2.6;

inc r0;

lcall disp2;

clr p2.7;

lcall delay;

setb p2.7;

mov r0,#40h;

disp2:

mov dptr,#table;

mov a,@r0;

movc a,@a+dptr;

mov p0,a;

retdelay:

mov r6,#255;

d2:djnz r6,d2;

ret;

table:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h

; 0 1 2 3 4 5 6 7 8 9

;按鍵判斷程式

key:

mov a,p3;

cpl a;

anl a,#3ch;

jz retx ;無鍵按下則返回

lcall disp ;

lcall delay;

mov a,p3;

cpl a;

anl a,#3ch;

jz retx ;無鍵按下則返回

mov r6,a ;將鍵值存入r6。

loop2: lcall disp ;

mov a,p3;

cpl a;

anl a,#3ch;

jnz loop2 ;等待鍵釋放

mov a,r6;

retx:

mov p3,#0ffh;

ret;

nopnop

;按鍵處理子程式

ankey: clr ea;關中斷

lx: mov a,r6;

jb acc.2,l1;是功能鍵轉l1

jb acc.3,l2;是確認鍵轉l2

jb acc.4,l3;是減1鍵轉l3

jnb acc.5,l12;不是增1鍵,轉l12

jb 2bh.4,l6;判斷使哪一位(時、分、秒)的值加1

jb 2dh.4,l8;

jb 2fh.4,l9;

l12: lcall disp;

lcall disp;

lcall key;判斷有無鍵按下。

jz l12;

ljmp lx;

l2: mov 25h,#00h ;確認鍵處理程式

clr 2bh.4;

clr 2dh.4;

clr 2fh.4;

setb ea;

ret;

l3: jb 2bh.4,l61;減一鍵處理程式

jb 2dh.4,l81;

jb 2fh.4,l91;

ajmp l12;

l1: mov a,25h;功能鍵處理程式

jz lb1;

jb acc.0,lb2;

jb acc.1,lb3;

jnb acc.2,l12;

lb1: mov 25h,#01h;25h單元是標誌位,(25h)=01h調節時單元的值

setb 2bh.4;

clr 2dh.4;

clr 2fh.4;

ajmp l12;

lb3: mov 25h,#04h;25h單元是標誌位,(25h)=04h調節秒單元的值

setb 2fh.4;

clr 2dh.4;

clr 2bh.4;

ajmp l12;

lb2: mov 25h,#02h;25h單元是標誌位,(25h)=02h調節分單元的值

setb 2dh.4;

clr 2bh.4;

clr 2fh.4;

ajmp l12;

l61: ajmp l611;

l81: ajmp l811;

l91: ajmp l911;

l112:ajmp l12;

l6: mov a,23h;時加一

inc a;

mov 23h,a;

cjne a,#24h,l12;

mov 23h,#00h;

ajmp l12;

l8: mov a,22h;分加一

inc a;

mov 22h,a;

cjne a,#60h,l12;

mov 22h,#00h;

ajmp l12;

l9: mov a,21h;秒加一

inc a;

mov 21h,a;

cjne a,#60h,l12;

mov 21h,#00h;

ajmp l12;

l611: mov a,23h;時減一

dec a;

mov 23h,a;

cjne a,#00h,l112;

mov 23h,#23h;

ajmp l12;

l811: mov a,22h;分減一

dec a;

mov 22h,a;

cjne a,#00h,l112;

mov 22h,#59h

ajmp l12;

l911: mov a,21h;秒減一

dec a;

mov 21h,a;

cjne a,#00h,l112;

mov 21h,#59h;

ajmp l12;

nopnopend

51微控制器的分時複用,80c51微控制器p0口地址資料分時複用如何實現的

51微控制器的分時來複用51微控制器的分源 時複用功能,最直接的就bai是movx指令du,用這個指令就是在分時復zhi用p0口,執dao行 movx a,dptr,那麼首先要送地址a0 a7給p0口,ale有效,鎖存在373上,再將這個地址的資料從p0口讀入傳給a。下面是p0口既送數碼管段訊號,又...

80C51微控制器的片內ROM和片內RAM各起什麼作用?他們的地址範圍是多少

嘿嘿 俺來回答你的問題 1 微控制器的片內rom是用來存放使用者的程式 和重要的一些資料表的 如7段數碼管的顯示編碼表 片內ram一般用來定義使用者的資料變數,可以存放微控制器採集到的實時資料和運算過程中產生的一些中間變數。還要作為堆疊使用。2 80c51微控制器的片內rom和片內ram地址範圍?片...

80C51的晶振頻率為6Mhz設計延時1分鐘的子程式

delay mov r1,100 1t 1t表示一個機器週期,在6 mhz頻率下一個機器週期2微秒,下同 d1 mov r2,50 1t d2 mov r3,48 1tdjnz r3,2t djnz r2,d2 2t djnz r1,d1 2t ret 1t end這個延時程式粗略算一下是三層迴圈的...