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

正文內(nèi)容

51單片機(jī)c語(yǔ)言編程基礎(chǔ)和實(shí)例(編輯修改稿)

2025-07-22 05:38 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 /定義一個(gè)無(wú)符號(hào)字符數(shù)組作為按鍵緩沖隊(duì)列。該隊(duì)列為先進(jìn) 4. //先出,循環(huán)存取,下標(biāo)從0到KeyBufSize1 5. unsignedcharKeyBufWp=0。//作為數(shù)組下標(biāo)變量,記錄存入位置 6. unsignedcharKeyBufRp=0。//作為數(shù)組下標(biāo)變量,記錄讀出位置 7. //如果存入位置與讀出位置相同,則表明隊(duì)列中無(wú)按鍵數(shù)據(jù) 8. unsignedcharkeyHit(void) 9. {if(KeyBufWp==KeyBufRp)return(0)。elsereturn(1)。} 10. 11. unsignedcharkeyGet(void) 12. {unsignedcharretVal。//暫存讀出鍵值 13. while(keyHit()==0)。//等待按鍵,因?yàn)楹瘮?shù)keyHit()的返回值為0表示無(wú)按鍵 14. retVal=KeyBuf[KeyBufRp]。//從數(shù)組中讀出鍵值 15. if(++KeyBufRp=KeyBufSize)KeyBufRp=0。//讀位置加1,超出隊(duì)列則循環(huán)回初始位置 16. return(retVal)。 17. } 18. 19. voidkeyPut(unsignedcharucKeyVal) 20. {KeyBuf[KeyBufWp]=ucKeyVal。//鍵值存入數(shù)組 21. if(++KeyBufWp=KeyBufSize)KeyBufWp=0。//存入位置加1,超出隊(duì)列則循環(huán)回初始位置 22. } 23. /***************************************************************************************** 24. 由于某種原因,讀出的按鍵,沒(méi)有用,但其它任務(wù)要用該按鍵,但傳送又不方便。此時(shí)可以退回按鍵隊(duì)列。就如取錯(cuò)了信件,有必要退回一樣 25. ******************************************************************************************/ 26. voidkeyBack(unsignedcharucKeyVal) 27. { 28. /* 29. 如果KeyBufRp=0。減1后則為FFH,大于KeyBufSize,即從數(shù)組頭退回到數(shù)組尾。或者由于干擾使得KeyBufRp超出隊(duì)列位置,也要調(diào)整回到正常位置, 30. */ 31. if(KeyBufRp=KeyBufSize)KeyBufRp=KeyBufSize1。 32. KeyBuf[KeyBufRp]=ucKeyVal。//回存鍵值 33. } 下面漸進(jìn)講解鍵盤物理層的驅(qū)動(dòng)。電路共同點(diǎn):P2端口接一共陰數(shù)碼管,共陰極接GND,、…、。軟件共同點(diǎn):code unsigned char Seg7Code[10] 是七段數(shù)碼管共陰編碼表。Code unsigned char Seg7Code[16]=// 0 1 2 3 4 5 6 7 8 9 A b C d E F{0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}。例一:,鍵編號(hào)為‘6’,顯示按鍵。代碼1. include 2. include“” 3. voidmain(void) 4. {P1_0=1。//作為輸入引腳,必須先輸出高電平 5. while(1)//永遠(yuǎn)為真,即死循環(huán) 6. {if(P1_0==0)//如果按鍵,則為低電平 7. {keyPut(6)。//保存按鍵編號(hào)值為按鍵隊(duì)列 8. while(P1_0==0)。//如果一直按著鍵,則不停地執(zhí)行該循環(huán),實(shí)際是等待松鍵 9. } 10. if(keyHit()!=0)//如果隊(duì)列中有按鍵 11. P2=Seg7Code[keyGet()]。//從隊(duì)列中取出按鍵值,并顯示在數(shù)碼管上 12. } 13. } 例二:在例一中考慮按鍵20ms抖動(dòng)問(wèn)題。代碼1. include 2. include“” 3. voidmain(void) 4. {P1_0=1。//作為輸入引腳,必須先輸出高電平 5. while(1)//永遠(yuǎn)為真,即死循環(huán) 6. {if(P1_0==0)//如果按鍵,則為低電平 7. {delay20ms()。//延時(shí)20ms,跳過(guò)接下抖動(dòng) 8. keyPut(6)。//保存按鍵編號(hào)值為按鍵隊(duì)列 9. while(P1_0==0)。//如果一直按著鍵,則不停地執(zhí)行該循環(huán),實(shí)際是等待松鍵 10. delay20ms()。//延時(shí)20ms,跳過(guò)松開(kāi)抖動(dòng) 11. } 12. if(keyHit()!=0)//如果隊(duì)列中有按鍵 13. P2=Seg7Code[keyGet()]。//從隊(duì)列中取出按鍵值,并顯示在數(shù)碼管上 14. } 15. } 例三:在例二中考慮干擾問(wèn)題。即小于20ms的負(fù)脈沖干擾。代碼1. include 2. include“” 3. voidmain(void) 4. {P1_0=1。//作為輸入引腳,必須先輸出高電平 5. while(1)//永遠(yuǎn)為真,即死循環(huán) 6. {if(P1_0==0)//如果按鍵,則為低電平 7. {delay20ms()。//延時(shí)20ms,跳過(guò)接下抖動(dòng) 8. if(P1_0==1)continue。//假按鍵 9. keyPut(6)。//保存按鍵編號(hào)值為按鍵隊(duì)列 10. while(P1_0==0)。//如果一直按著鍵,則不停地執(zhí)行該循環(huán),實(shí)際是等待松鍵 11. delay20ms()。//延時(shí)20ms,跳過(guò)松開(kāi)抖動(dòng) 12. } 13. if(keyHit()!=0)//如果隊(duì)列中有按鍵 14. P2=Seg7Code[keyGet()]。//從隊(duì)列中取出按鍵值,并顯示在數(shù)碼管上 15. } 16. } 例四:狀態(tài)圖編程法。通過(guò)20ms周期中斷,掃描按鍵。代碼1. /**************************************************************************************** 2. 采用晶體為12KHz時(shí),指令周期為1ms(即主頻為1KHz),這樣T0工作在定時(shí)器方式2,8位自動(dòng)重載。計(jì)數(shù)值為20,即可產(chǎn)生20ms的周期性中斷,在中斷服務(wù)程序中實(shí)現(xiàn)按鍵掃描 3. *****************************************************************************************/ 4. include 5. include“” 6. voidmain(void) 7. { 8. TMOD=(TMODamp。0xf0)|0x02。//不改變T1的工作方式,T0為定時(shí)器方式2 9. TH0=20。//計(jì)數(shù)周期為20個(gè)主頻脈,即20ms 10. TL0=TH0。//先軟加載一次計(jì)數(shù)值 11. TR0=1。//允許T0開(kāi)始計(jì)數(shù) 12. ET0=1。//允許T0計(jì)數(shù)溢出時(shí)產(chǎn)生中斷請(qǐng)求 13. EA=1。//允許CPU響應(yīng)中斷請(qǐng)求 14. while(1)//永遠(yuǎn)為真,即死循環(huán) 15. { 16. if(keyHit()!=0)//如果隊(duì)列中有按鍵 17. P2=Seg7Code[keyGet()]。//從隊(duì)列中取出按鍵值,并顯示在數(shù)碼管上 18. } 19. } 20. voidtimer0int(void)interrupt1//20ms;T0的中斷號(hào)為1 21. {staticunsignedcharsts=0。 22. P1_0=1。//作為輸入引腳,必須先輸出高電平 23. switch(sts) 24. { 25. case0:if(P1_0==0)sts=1。break。//按鍵則轉(zhuǎn)入狀態(tài)1 26. case1: 27. if(P1_0==1)sts=0。//假按錯(cuò),或干擾,回狀態(tài)0 28. else{sts=2。keyPut(6)。}//確實(shí)按鍵,鍵值入隊(duì)列,并轉(zhuǎn)狀態(tài)2 29. break。 30. case2:if(P1_0==1)sts=3。break。//如果松鍵,則轉(zhuǎn)狀態(tài)3 31. case3: 32. if(P1_0==0)sts=2。//假松鍵,回狀態(tài)2 33. elsests=0。//真松鍵,回狀態(tài)0,等待下一次按鍵過(guò)程 34. } 35. } 例五:狀態(tài)圖編程法。代碼1. /**************************************************************************************** 2. 如果采用晶體為12MHz時(shí),指令周期為1us(即主頻為1MHz),要產(chǎn)生20ms左右的計(jì)時(shí),則計(jì)數(shù)值達(dá)到20000,T0工作必須為定時(shí)器方式1,16位非自動(dòng)重載,即可產(chǎn)生20ms的周期性中斷,在中斷服務(wù)程序中實(shí)現(xiàn)按鍵掃描 3. *****************************************************************************************/ 4. include 5. include“” 6. voidmain(void) 7. { 8. TMOD=(TMODamp。0xf0)|0x01。//不改變T1的工作方式,T0為定時(shí)器方式1 9. TL0=20000。//計(jì)數(shù)周期為20000個(gè)主頻脈,自動(dòng)取低8位 10. TH0=(20000)8。//右移8位,實(shí)際上是取高8位 11. TR0=1。//允許T0開(kāi)始計(jì)數(shù) 12. ET0=1。//允許T0計(jì)數(shù)溢出時(shí)產(chǎn)生中斷請(qǐng)求 13. EA=1。//允許CPU響應(yīng)中斷請(qǐng)求 14. while(1)//永遠(yuǎn)為真,即死循環(huán) 15. { 16. if(keyHit()!=0)//如果隊(duì)列中有按鍵 17. P2=Seg7Code[keyGet()]。//從隊(duì)列中取出按鍵值,并顯示在數(shù)碼管上 18. } 19. } 20. voidtimer0int(void)interrupt1//20ms;T0的中斷號(hào)為1 21. {staticunsignedcharsts=0。 22. TL0=20000。//方式1為軟件重載 23. TH0=(20000)8。//右移8位,實(shí)際上是取高8位 24. P1_0=1。//作為輸入引腳,必須先輸出高電平 25. switch(sts) 26. { 27. case0:if(P1_0==0)sts=1。break。//按鍵則轉(zhuǎn)入狀態(tài)1 28. case1: 29. if(P1_0==1)sts=0。//假按錯(cuò),或干擾,回狀態(tài)0 30. else{sts=2。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1