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

正文內(nèi)容

基于at89c52單片機(jī)的電子秒表設(shè)計(jì)(已改無錯(cuò)字)

2022-07-24 18:31:18 本頁面
  

【正文】 出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,5ms~10ms的延時(shí),讓前沿抖動(dòng)消失后再一次檢測鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。當(dāng)檢測到按鍵釋放后,也要給5ms~10ms的延時(shí),待后沿抖動(dòng)消失后才能轉(zhuǎn)入該鍵的處理程序。本設(shè)計(jì)中采用軟件消抖方法,按鍵掃描過程子程序如下:bit start=0。 //start為P1_2按下標(biāo)志位 void scan(void) { P2=0xff。 //每次讀I/O口輸入數(shù)據(jù)是需要先拉高電平 if (P2_1==0) { for(delay=0。delay=200。delay++)。 //延時(shí)子程序 P2=0xff; if (P2_1==0) start=1。 //標(biāo)志位置1,確認(rèn)P2_1按下 } } 主要程序代碼全部的程序包括了頭文件、變量的定義、主程序及各子程序。本部分對設(shè)計(jì)中的主要程序單獨(dú)說明。(1)主程序在主程序中需要完成以下的功能:首先調(diào)用初始化函數(shù)對各個(gè)變量進(jìn)行初始化,再對定時(shí)器的定時(shí)初值進(jìn)行設(shè)定,接著根據(jù)各個(gè)標(biāo)志位的值來判斷單片機(jī)的工作模式及工作狀態(tài)[5]。鍵盤掃描由scan()來完成,各個(gè)位的數(shù)值的計(jì)算由add1()完成。void main(void){begin1()。 //調(diào)用初始化函數(shù)TMOD=0x01。TL0=0x18。TH0=0xfc。EA=1。ET0=1。TR0=1。for(。){ if(scankey==1) //進(jìn)行鍵盤掃描 { scankey=o。scan()。if(double_key==1) //倒計(jì)時(shí)初值快速增加{ P2_6=0。 P2_7=1。 m=m+10。 add1(m)。}if(fast_add==1) //倒計(jì)時(shí)初值連續(xù)增加{ P2_6=0。 P2_7=1。 m++。 add1(m)。 bit_add1=0。}if(add==1) //倒計(jì)時(shí)初值增加1 { P2_6=0。 P2_7=1。 add=0。 m++。 add1(m)。 }if(double_sub==1) //倒計(jì)時(shí)初值快速減少 { P2_6=0。 P2_7=1。 m=m10。 add1(m)。 }if(fast_sub==1) //倒計(jì)時(shí)初值連續(xù)減少{ P2_6=0。 P2_7=1。 m。 add1(m)。 bit_sub=0。}if(sub==1) //倒計(jì)時(shí)初值減少1{ P2_6=0。 P2_7=1。 sub=0。 m。 add1(m)。}if(start==1) //計(jì)時(shí)開始{ if(mm==0){ P2_7=!P2_7。 P2_6=1。 m++。 if(mm==6000)m=0。 add1(m)。 }if(stop==1) start=0。 //計(jì)時(shí)停止if(count_down==1) //倒計(jì)時(shí)開始 { if(m0)m。 P2_7=1。 if(mm==0)P2_6=!P2_6。 }}}(2)定時(shí)器中斷子程序 這里的秒表的計(jì)時(shí)、鍵盤的掃描及數(shù)值顯示燈都是利用定時(shí)中斷來完成的。定時(shí)的時(shí)間設(shè)為1ms,用于數(shù)值顯示;同時(shí)利用累加的方法實(shí)現(xiàn)10ms和200ms的定時(shí),用于鍵盤的掃描及控制顯示燈的閃爍。void time0(void){ TL0=0x18。 TH0=0xfc。 ms++。 if(ms==10) { ms=0。 mm++。 if(mm==20)mm=0。 scankey=1。 } display()。 }(3)顯示子程序顯示子程序其實(shí)包括了display()和add1(time)兩個(gè)子程序。add1(time)是用來計(jì)算數(shù)碼管各個(gè)位要顯示的數(shù)值的子程序,display()是查段位碼表及進(jìn)行動(dòng)態(tài)掃描的子程序[1]。void add1(time) uint time。{ uint n,a。 a=time/1000。 LED0=a。 //計(jì)算十秒位數(shù)值 n=timeamp。1000。 LED1=(n/100)。 //計(jì)算秒位數(shù)值 n=n%100。 LED2=(n/10)。 //計(jì)算十分一秒位數(shù)值 LED3=n%10。 //計(jì)算百分一秒位數(shù)值 }void display(void){ switch(ms%4) { case o: P3=0xfe。 P1=table[LED3]。 P1_7=1。 Break。 case 1: P3=0xfd。 P1=table[LED2]。 P1_7=1。 Break。 case 2: P3=0xfb。 P1=table[LED1]。 P1_7=1。 Break。 case o: P3=0xf7。 P1=table[LED0]。 P1_7=1。 Break。 default:return。 }}(4)鍵盤掃描鍵盤掃描的子程序完成的任務(wù)是每10ms進(jìn)行一次鍵盤的查詢,根據(jù)查詢的結(jié)果對相應(yīng)的標(biāo)志位進(jìn)行賦值[10]。void scan(void){ char a。 P2=0x0f。 if (count_down==0amp。amp。P2_2==0) //實(shí)現(xiàn)倒計(jì)時(shí)的功能 { if(cheak==0){cheak=1。} //若cheak為0,則按鍵沒消抖 else {K3_keydown=1。cheak=0。} }P2=0x0f。if(K3_keydown==1amp。amp。P2_2==1) //K3彈起 { K3_keyup=1。 K3_keydown=0。 }if(K3_keyup==1) { if(mm=0) { if(bit_add1==1amp。amp。keydown==1) //,則快速增 {double_key=1。} else{bit_add1=0。} } if(mm=0) { if(bit_sub==1amp。amp。K2_keydown==1) //,則快速減 {double_sub=1。} else{bit_sub=0。} } if(mm==0amp。amp。key
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1