1樓:做而論道
-1,在計算機中,用補碼表示,這就是255。
這是《倒計時》的程式。
拿變數seconde來說,它的正確數值範圍應該是0~59。
減一、減一...,減到-1(即255)時,就改成59。
c程式,這就是下面這一段:
……seconde--;
if(seconde==255) //秒鐘設為60進製
{ seconde=59;……
2樓:匿名使用者
就是判斷這個變數的值是否等於255
3樓:
是這樣的,在8位機系統中,0-1的結果是255。
比如說:現在時間是0:0.
00(0分0秒00毫秒當程式接收到10毫秒中斷時,00-1(倒計時)的結果是-1,在8位機中就是255,因為是百進製,這時就首先應該把它修正為99毫秒,然後,秒數也要-1。
當秒為0時,-1後,同樣得到255這樣的結果,而實際上,-1後應該是59秒,因而減1後,也要判斷一下是不是255,如果是,同樣要把它修正為59……
餘此類推。
注意:在c語音中,減1的結果為255的先決條件是,變數是無符號短整型數!!!!
不知道我說明白沒?
希望能幫到你
微控制器時鐘程式 24小時制 20
4樓:東穎崇
沒什麼難的啊,就是個顯示程式,再用個定時器就好了- -!
5樓:酷酷一號
我真想自己試著編這個程式。
6樓:
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
微控制器做時鐘程式
7樓:匿名使用者
hour equ 030h
minute equ 031h
second equ 032h
count1 equ 033h;總計數到4000:拆分成40*100count2 equ 034h
spl equ 020h;閃爍判斷的依據
set_btn equ 021h;
org 0000h
ajmp main
org 001bh
ajmp it_1
org 040h
main:
mov spl,#00h
clr spl.0
clr spl.1
clr spl.2
mov dptr,#table
mov hour,#00h
mov minute,#00h
mov second,#00h
mov count1,#00h
mov count2,#00h
mov tmod,#20h
mov th1,#06h
mov tl1,#06h
mov ie,#10001000b;設定允許中斷,並且開啟兩個定時器setb tr1
loop:
jnb p0.0,just_time
jb set_btn.0,just_timejnb p0.1, subb_time
jb set_btn.1,subb_timejnb p0.2, add_time
jb set_btn.2,add_timetime: acall hour_showacall minute_show
ajmp loop
subb_time:
jb set_btn.1,wait_btn2_upacall delay2;
jb p0.1, time
setb set_btn.1
jb spl.1,subb_hour
jb spl.2,subb_min
ajmp time
subb_min:
mov r1,minute
cjne r1,#00h,subb_min_optajmp time
subb_min_opt:
dec minute
ajmp time
subb_hour:
mov r1,hour
cjne r1,#00h,subb_hour_optajmp time
subb_hour_opt:
dec hour
ajmp time
wait_btn2_up:
jnb p0.1,time
clr set_btn.1
ajmp time
add_time:
jb set_btn.2,wait_btn3_upacall delay2;
jb p0.2, time
setb set_btn.2
jb spl.1,add_hour
jb spl.2,add_min
ajmp time
add_min:
mov r1,minute
cjne r1,#3bh,add_min_optajmp time
add_min_opt:
inc minute
ajmp time
add_hour:
mov r1,hour
cjne r1,#17h,add_hour_optajmp time
add_hour_opt:
inc hour
ajmp time
wait_btn3_up:
jnb p0.2,time
clr set_btn.2
ajmp time
just_time:
jb set_btn.0,wait_up
acall delay2;防抖
jb p0.0, time
setb set_btn.0
jb spl.2, clr_m
jnb spl.1, set_h
clr spl.1
set_m: setb spl.2;分鐘位置ajmp time
set_h: setb spl.1;小時位置clr_m: clr spl.2
ajmp time
ljump_time:ljmp time
wait_up: jnb p0.0,ljump_timeclr set_btn.0
ajmp time
wait2_dl1:
acall delay1
acall delay1
rethour_show:
jnb spl.1, hour_show_hrerjb spl.0, hour_show_hreracall wait2_dl1
rethour_show_hrer:
setb p2.0
setb p2.1
clr a
mov a,hour
mov b,#0ah
div ab
movc a,@a+dptr
mov p1,#00h
mov p1,a
clr p2.0
;延時acall delay1
setb p2.0
mov p1,#00h
mov a,b
movc a,@a+dptr
mov p1,a
clr p2.1
;延時acall delay1
setb p2.1
mov p1,#00h
retminute_show:
jnb spl.2, minute_show_herejb spl.0, minute_show_hereacall wait2_dl1
retminute_show_here:
setb p2.2
setb p2.3
clr a
mov a,minute
mov b,#0ah
div ab
movc a,@a+dptr
mov p1,#00h
mov p1,a
clr p2.2
;延時acall delay1
setb p2.2
mov p1,#00h
mov a,b
movc a,@a+dptr
mov p1,a
clr p2.3
;延時acall delay1
setb p2.3
mov p1,#00h
retdelay1: ;短延時
mov r6,#03h
dl1: mov r7,08h
dl2: djnz r7,dl2
djnz r6,dl1
retdelay2: ;按鍵延時
mov r6,#0ah
dl21: mov r7,0ah
dl22: djnz r7,dl22
djnz r6,dl21
retit_1:
push acc
push b
push psw
inc count1
mov a,count1
cjne a,#28h,reti_lableinc count2
mov count1,#00h
mov a,count2
mov b,#32h
div ab
mov a,b
jnz c2_opt
cpl p3.7;秒的閃爍
cpl spl.0
;inc spl;給閃爍設定值
c2_opt: mov a,count2
cjne a,#64h,reti_lableinc second
mov count2,#00h
mov a,second
cjne a,#3ch,reti_lable;
inc minute
mov second,#00h
mov a,minute
cjne a,#3ch,reti_lable;
inc hour
mov minute,#00h
mov a,hour
cjne a,#18h,reti_lablemov hour,#00h
reti_lable:
pop psw
pop b
pop acc
reti
table: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,40hend
微控制器程式注釋,微控制器程式注釋(大致注釋)
嘿嘿 還是俺來幫你回答吧 1 這是乙個一位的7段數碼管顯示控制程式,通過p3口連線了乙個7段數碼管 靜態顯示,共陽極 2 該程式就是利用這個一位的7段數碼管分時迴圈顯示0 9 a f共16個十六進製制數碼。3 在程式儲存器存放的 tab 是共陽極顯示編碼 應該是0 9 a f共16個顯示編碼 可惜少...
微控制器程式,微控制器的應用
寫錯了吧,0x10和0x01能一樣嗎?if adc contr 0x10 測試其第5位是否是1 相當於 if adc contr 0x10 0 while adc contr 0x10 測試其第5位 d4 是否是0 乙個是測試 1 乙個是測試 0x10 能一樣麼?微控制器的應用 微控制器的應用領域 ...
微控制器呼叫子程式,微控制器中如何呼叫寫好的子程式
ea 1,相當於enable all interrupt。表示允許中斷,不是呼叫timer0,而是允許timer0產生中斷,並執行timer0中斷函式中的內容。ea 1 應該是總中斷開 void time0 interrupt 1 是定時器中斷 時間到進入此函式 ea總中斷復允許,只有ea 1時,c...