freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于at89c2051的電子鬧鐘設(shè)計(jì)-在線瀏覽

2025-03-05 13:06本頁(yè)面
  

【正文】                                                                                                                                                                            圖1-10 主程序流程框圖以下程序?yàn)樯鲜鲋髂K的51匯編語(yǔ)言實(shí)現(xiàn),有關(guān)設(shè)計(jì)思想在程序中均作了詳細(xì)分析說(shuō)明。堆棧設(shè)置 LCALL SYS_INIT 。定時(shí)器初始化 LCALL T1_INIT 。串口初始化 LCALL DISPLAYP 。等待設(shè)置當(dāng)前時(shí)間 JB S3, MAIN_00 。是,則設(shè)定鬧鈴時(shí)間 SETB WARNSETTED 。鬧鈴次數(shù)清0(否則會(huì)鬧1分鐘) CLR TFIX 。必須再次刷新,否則會(huì)出現(xiàn)尾位不顯示的情況 MAIN_0: SETB TR0 。允許T0溢出中斷MAIN_1: JB FRESH, MAIN_2 。否則,不更新顯示MAIN_2: LCALL DISPLAY1 。進(jìn)入死循環(huán),只有復(fù)位才能重新設(shè)置MAIN_3: JBC SEC, MAIN_4 。到則進(jìn)行秒指示 CPL L2 JNB WARNING,MAIN_5 CPL BEEP 。鬧鈴次數(shù)+1 MOV A, WARNCNT XRL A, 08 JNZ MAIN_5 。點(diǎn)亮?xí)r間(不能太長(zhǎng),否則影響秒指示,短則太暗) SJMP MAIN_1 以下代碼為上述主模塊的C51語(yǔ)言實(shí)現(xiàn),該實(shí)現(xiàn)中沒(méi)有鬧鈴時(shí)間設(shè)定功能。 /* 系統(tǒng)初始化 */ t0_init()。 uart_init()。 /* P.的段碼送顯示緩沖區(qū) */ buf[1]=0x0b。 buf[3]=0x0b。 /* 顯示待機(jī)符P. */ settime()。 /* 帶閃爍后要加顯,否則會(huì)出現(xiàn)尾位不顯的現(xiàn)象 */ TR0=1。 /* 允許T0溢出中斷 */ while(1) { if(fresh) /* 判是否要刷新顯示(分或時(shí)變化) */ { buf[0]=hourh。 buf[2]=minuh。 display()。 /* 是,則刷新(閃爍) */ L1=!L1。 delay20ms()。 L1=!L1。 delay20ms()。其中時(shí)個(gè)位的段碼必須加上小數(shù)點(diǎn),即帶小數(shù)點(diǎn)顯示時(shí)個(gè)位,目的是以小數(shù)點(diǎn)符代替時(shí)間分割符“:”(因?yàn)橐话愕臄?shù)碼管無(wú)法顯示字符“:”)。DISPLAY: LCALL HEX2BCD 。關(guān)閉顯示 MOV A, HOURH 。加上偏移量 MOVC A, A+PC 。送入74LS164DL1: JNB TI, DL1 。顯示時(shí)分分隔符:() MOV SBUF, ADL2: JNB TI, DL2 CLR TI MOV A, MINUH 。打開(kāi)顯示 RET。0~9的段碼(共陽(yáng)數(shù)碼管)。74LS164的3 4 5 6 10 11 12 13 對(duì)應(yīng)數(shù)碼管的A,B,C,D,E,F(xiàn),G,DP。void display(void){ uchar out。 /* 關(guān)閉顯示,防止傳送數(shù)據(jù)期間閃爍 */ out=seg[buf[0]]。 /* 送入74LS164 */ while(!TI)。 out=seg[buf[1]]。=0xfe。 while(!TI)。 out=seg[buf[2]]。 while(!TI)。 out=seg[buf[3]]。 while(!TI)。 DISPCON=0。上述思想用程序框圖表示為圖1-12。將顯示全滅段碼送顯示緩沖區(qū)將目前設(shè)定的時(shí)間參數(shù)送顯示緩沖區(qū)閃爍標(biāo)志為真?調(diào)用基本顯示程序模塊YN圖1-12 當(dāng)前編輯位閃爍功能實(shí)現(xiàn)的程序流程以下代碼為當(dāng)前編輯位閃爍功能的51匯編語(yǔ)言實(shí)現(xiàn),是從時(shí)間設(shè)定模塊中截取的一部分。判閃爍標(biāo)志(一亮一滅) JNB HH, SET_02 。滅的代碼 MOV HLBACK, HOURL 。滅的代碼 MOV MHBACK, MINUH MOV MLBACK, MINUL SJMP SET_01以下為定時(shí)器1的100ms定時(shí)溢出中斷子程序。100ms定時(shí)常數(shù) MOV TL1, 0B0H INC COUNT 。判到5次()否,不到直接返回 JZ TIMER1_0 POP ACC RETITIMER1_0: CPL SS 。 buf[0]=hourh。 buf[2]=minuh。 if(ss) /* 這部分程序?qū)崿F(xiàn)了當(dāng)前位閃爍 */ { switch(setflag) /* 判當(dāng)前設(shè)定位 */ { case 0x01: buf[0]=0x0b。 case 0x02: buf[1]=0x0b。 case 0x04: buf[2]=0x0b。 case 0x08: buf[3]=0x0b。 } } display()。 /* 100ms定時(shí)常數(shù) */ TL1=0xb0。 /* 中斷次數(shù)加1*/ if(count!=5) /* 判到10次(1s)否,不到直接返回 */ return。 /* ss閃爍標(biāo)志求反 */ count=0。即只涉及2個(gè)鍵完成了4位時(shí)間參數(shù)的設(shè)定。去抖中的延時(shí)時(shí)間一般參考資料多描述為10ms左右,實(shí)際應(yīng)用中,應(yīng)大于20ms,否則,會(huì)導(dǎo)致按一次作多次處理,影響程序正常執(zhí)行。其實(shí)現(xiàn)流程如圖1-13。SETTIME: LCALL S1KEY 。 MOV HOURL, 00 MOV MINUH, 00 MOV MINUL, 00 MOV SETFLAG,00 SETB HH 。閃爍標(biāo)志初始化(清除) SETB TR1 。允許T1溢出中斷 MOV COUNT, 0 SET_0: JNB SS, SET_06 。為真,則當(dāng)前位滅 MOV HHBACK, 0AH 。其他顯示位送該緩沖區(qū) MOV MHBACK, MINUH MOV MLBACK, MINUL SJMP SET_01SET_02: JNB HL, SET_03 MOV HHBACK, HOURH MOV HLBACK, 0AH 。滅的代碼 MOV MLBACK, MINUL SJMP SET_01SET_04: MOV HHBACK, HOURH MOV HLBACK, HOURL MOV MHBACK, MINUH MOV MLBACK, 0AH 。備份區(qū)數(shù)據(jù)送顯 SJMP SET_05SET_06: MOV R0, HOURH 。循環(huán)掃描S1,S2鍵,并進(jìn)行相應(yīng)處理 LCALL DELAY20MS JB S1, SET_1 JB ML, SET_00 。當(dāng)前位右移1位(標(biāo)志左移1位) MOV SETFLAG,A 。關(guān)T1及中斷 CLR ET1 LCALL SETVALUE RETSET_1: JB S2, SET_0 LCALL DELAY20MS JB S2, SET_0 JNB HH, SET_2 。小時(shí)高位只能0~1 JZ SET_10 LJMP SET_0SET_10: MOV HOURH, 0 。小時(shí)低位只能是0~2 JZ SET_21 LJMP SET_0SET_21: MOV HOURL, 0 。小時(shí)低位只能是0~2 JZ SET_22 LJMP SET_0SET_22: MOV HOURL, 0 。分高位只能是0~5 JZ SET_30 LJMP SET_0SET_30: MOV MINUH, 0 LJMP SET_0 SET_4: INC MINUL MOV A, MINUL XRL A, 0AH JZ SET_40 LJMP SET_0SET_40: MOV MINUL, 0 LJMP SET_0以下代碼為時(shí)間設(shè)定模塊的C51語(yǔ)言程序?qū)崿F(xiàn)。 while(S1)。i4。 /* 延時(shí)去抖動(dòng) */ while(S1)。 ss=0。 /* 設(shè)置當(dāng)前位標(biāo)志 */ TR1=1。 /* 允許T1溢出中斷 */ while(1) { buf[0]=hourh。 buf[2]=minuh。 /*****************************************************/ if(ss) /* 這部分程序?qū)崿F(xiàn)了當(dāng)前位閃爍 */ { switch(setflag) /* 判當(dāng)前設(shè)定位 */ { case 0x01: buf[0]=0x0b。 case 0x02: buf[1]=0x0b。 case 0x04: buf[2]=0x0b。 case 0x08: buf[3]=0x0b。 } } /****************************************************/ display()。 for(i=0。i++) delay20ms()。 if(ml) { TR1=0。 /* 禁止T1溢出中斷 */ buf[0]=hourh。 buf[2]=minuh。 return。 /* 當(dāng)前位右移(標(biāo)志左移1位) */ continue。 for(i=0。i++) delay20ms()。 if(!hh) goto sett_2。 /* 時(shí)高位加1處理 */ if(hourh!=2) continue。 /* 時(shí)高位只能是0,1 */ continue。 { hourl++。 if(hourl==10) goto sett_21。 sett_21: hourl=0。 sett_20: if(hourl==3) goto sett_22。 sett_22: hourl=0。 } sett_3: if(!mh) goto sett_4。 /* 分高位加1處理,只能是0~5 */ if(minuh==6) goto sett_30。 sett_30: minuh=0。 } sett_4: minul++。 continue。 continue。將時(shí)間參數(shù)設(shè)計(jì)為100ms的原因有兩個(gè):1)根據(jù)系統(tǒng)時(shí)鐘主頻為6M的特點(diǎn),16位定時(shí)器最大定時(shí)時(shí)間為655362M(M為機(jī)器周期,這里是2μS),即131ms,取整數(shù)100便于計(jì)次數(shù);2)如取的太短,如10ms,則定時(shí)器頻繁中斷,干擾系統(tǒng)正常運(yùn)行效果。任何一個(gè)變量的變化,則顯示刷新一次(更新)。重裝定時(shí)時(shí)間常數(shù)中斷次數(shù)加1中斷返回到10次嗎?秒變量+1到60s了嗎?中斷返回秒變量回00,分變量+1到60M了嗎?中斷返回分變量回00,時(shí)變量+1到24H了嗎?中斷返回時(shí)變量回00NNNN鬧鈴判別鬧鈴判別鬧鈴判別圖1-14?。裕暗闹袛嘧映绦蛄鞒堂朊}沖發(fā)生器與走時(shí)處理的51匯編語(yǔ)言實(shí)現(xiàn)如下:TIMER0: PUSH ACC 。清刷新標(biāo)志 CLR SEC 。100ms定時(shí)常數(shù) MOV TL0, 0B0H INC COUNT MOV A, COUNT JB TFIX, T0_00 。T0_01: JZ T0_1 POP ACC RETIT0_1: CLR TFIX 。設(shè)置秒指示 MOV COUNT, 00H INC SECOND MOV A, SECOND XRL A, 60 JZ T0_2 POP ACC RETIT0_2: SETB FRESH 。判小時(shí)高位,如為0,則小時(shí)低位可以到9,否則,只能是0~2 MOV A, HOURH JZ T0_300 MOV A, HOURL XRL A, 03 JZ T0_4 LJMP ADJUSTT0_300: MOV A, HOURL XRL A, 0AH JZ T0_4 LJMP ADJUST T0_4: MOV HOURL, 00 INC HOURH MOV A, HOURH
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1