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

正文內(nèi)容

c語言單片機實例-資料下載頁

2025-01-07 11:40本頁面
  

【正文】 2 . 7 / A 1 5P 2 . 6 / A 1 4P 2 . 5 / A 1 3P 2 . 4 / A 1 2P 2 . 3 / A 1 1P 2 . 2 / A 1 0P 2 . 1 / A 9P 2 . 0 / A 8R E S E TX T A L 2X T A L 1E AA L EP S E N3 93 83 73 63 53 43 33 23 13 02 92 82 72 62 52 42 32 22 1P 3 . 0 / R X DP 3 . 1 / T X DP 3 . 2 / I N T 0P 3 . 3 / I N T 1P 3 . 4 / T 0P 3 . 5 / T 1P 3 . 6 / W RP 3 . 7 / R D1 01 11 21 31 41 51 61 7P 1 . 711 91 89C 1 3 0 PC 2 3 0 PC Y 1 2 M H zR 1 1 KC 3 1 0μI C S T C 8 9 C 5 1V C CV C C ( + 5 V )R 2 ~ 9 2 0 0?S E V E N _ S E Gaabcdefgd o tbcdefgd o tA CK E Y 1K E Y 2 圖 334 利用延時函數(shù)消除鍵盤抖動實現(xiàn)鍵盤輸入電路 二、程序設(shè)計 /*****************************************************************************/ include define uchar unsigned char code uhar seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}。 sbit key1 = 。 sbit key2 = 。 uchar key1_state, key2_state。 //按 鍵按下的狀態(tài)變量 void delay( uchar i) { while(i) i。 } void key_scan(void) //鍵盤掃描函數(shù) { if( key1 == 0) //如果按鍵按下 { delay(200)。 //延時一段時間,消除鍵抖 while(key1 == 0) key1_state = 1。 //再對按鍵檢測,如果確實按下,按鍵狀態(tài)變量為 1 } if( key2 == 0) { delay(200)。 while(key2 == 0) key2_state = 1。 } } void main(void) { char i。 while(1) { key_scan()。 //調(diào)用鍵盤掃描函數(shù) if(key1_state = 1) //判斷鍵盤狀態(tài)變量,如果為 1,說明有按鍵按下 { i++。 //顯示數(shù)據(jù)增加 key1_state = 0。 //數(shù)據(jù)增加后,鍵盤狀態(tài)變量清零 if(i9) i = 0。 //數(shù)據(jù)增加超過 9 后,回到 0 } if(key2_state = 1) { i。 key2_state = 0。 if(i 0) i = 9。 }P0 = seven_seg[i]。 //顯示鍵盤調(diào)整數(shù)據(jù) } } /*****************************************************************************/ 三、程序說明 1.如果按鍵按下不放開,程序一直執(zhí)行語句 while(key1 == 0),這時程序在此處死循環(huán),不能執(zhí)行其它程序,所以本案例按鍵抬起后數(shù)據(jù)才能得到調(diào)整。此種編程方法并不影響單片機驅(qū)動 1 個數(shù)碼管工作,但動態(tài)顯示電路在此種情況下不能正常工作。如果把 while 改換成 if,按鍵只要按下數(shù)據(jù)就能調(diào)整,但如果按下不放開按鍵,數(shù)據(jù)自動快速增加或減小。如果按鍵按下 既不讓程序死循環(huán),也不讓由于按鍵按的時間過長而數(shù)據(jù)調(diào)整失控,最可靠的辦法是利用變量記憶按鍵按下和放開的兩種狀態(tài),根據(jù)判斷實現(xiàn)鍵盤輸入。程序如下; /*********************************/ uchar key1_down_state, key1_up_state, //變量聲明,初始值為 0 …… if( key1 == 0) { delay(200) if( key1 == 0) key1_down_state = 1。 //如果按鍵按下,按下狀態(tài)變量為 1 } if( key1 == 1 amp。amp。 key1_down_state = 1) //如果按鍵按下又放開 { key1_down_state = 0。 //按鍵按下狀態(tài)復位 key1_up_state = 1。 //按鍵抬起狀態(tài)變量為 1 } …… if(key1_up_state == 1) { key1_up_state = 0; //按鍵按下抬起時,數(shù)據(jù)調(diào)整 i++; } …… /*********************************/ 我們也可以使用定時器中斷對鍵盤掃描,實現(xiàn)鍵盤輸入,下面時利用 Timer0 中斷實現(xiàn)的鍵盤輸入,其中鍵盤 key1 接單片機 I/O 口 , Timer0 工作在模式 1。 /*********************************/ include define timer0_count 0xee18 define times 20 sbit key = P3^0。 char key_count。 static void timer0_isr(void) interrupt 1 { TR0 = 0。 TL0 = (timer0_count amp。 0x00ff)。 TH0 = (timer0_count 8)。 TR0 = 1。 if(key_count != 0) { key_count。 if(key_count == 0 amp。amp。 key == 0)。 key_flog = 1。 } eles if(key == 0)key_count = times。 } 2.利用按鍵調(diào)整數(shù)據(jù)時,有時會調(diào)整過 量,需要進行判斷重置。本案例 i 為 char 型變量, 數(shù)值在 — 128~127 之間,語句 if(i9) i = 0 是向上增加過量復位。 3.把鍵盤掃描 key_scan()函數(shù)放在主函數(shù)的 while 循環(huán)體中,程序執(zhí)行時會斷調(diào)用 key_scan(),如果沒有按鍵按下,執(zhí)行 key_scan()的時間很短,如果有按鍵按下,用于按鍵掃面函數(shù)又調(diào)用了延時函數(shù),程序執(zhí)行時間會變長。 4 4 鍵盤程序設(shè)計 44 鍵盤 16 鍵盤陣列,本案例采用 P1 口完成,見圖 335 所示,把 P18 條 I/O 口分成4 條列線 4 條行線交叉但 不接觸, 16 個按鍵放置交叉位置,在單片機復雜系統(tǒng)需要較多按鍵時,這種接法可以節(jié)省單片機的硬件資源。鍵盤和 P1 口之間采用總線連接布局,在電路原理設(shè)計過程中,總線只是圖示引腳之間的相連接關(guān)系,但不具有電氣連接特性,相連引腳之間需要標注相同的網(wǎng)絡標號采用電氣連接特性,如圖 335 中,單片機的 與鍵盤陣列上的 相連。在設(shè)計單片機系統(tǒng)或其它電子系統(tǒng)時,由于器件引腳較多,器件與器件之間會經(jīng)常采用總線連接,并且把電路模塊化設(shè)計。 P 1 . 0P 1 . 1P 1 . 2P 1 . 3P 1 . 4P 1 . 5P 1 . 62345678P 0 . 0 / A D 0P 0 . 1 / A D 1P 0 . 2 / A D 2P 0 . 3 / A D 3P 0 . 4 / A D 4P 0 . 5 / A D 5P 0 . 6 / A D 6P 0 . 7 / A D 7P 2 . 7 / A 1 5P 2 . 6 / A 1 4P 2 . 5 / A 1 3P 2 . 4 / A 1 2P 2 . 3 / A 1 1P 2 . 2 / A 1 0P 2 . 1 / A 9P 2 . 0 / A 8R E S E TX T A L 2X T A L 1E AA L EP S E N3 93 83 73 63 53 43 33 23 13 02 92 82 72 62 52 42 32 22 1P 3 . 0 / R X DP 3 . 1 / T X DP 3 . 2 / I N T 0P 3 . 3 / I N T 1P 3 . 4 / T 0P 3 . 5 / T 1P 3 . 6 / W RP 3 . 7 / R D1 01 11 21 31 41 51 61 7P 1 . 711 91 89C 1 3 0 PC 2 3 0 PC Y 1 2 M H zR 1 1 KC 3 1 0μI C S T C 8 9 C 5 1V C CR 2 ~ 9 2 0 0S E V E N _ S E GN O T 1N O T 2P 1 . 0P 1 . 1P 1 . 2P 1 . 3P 1 . 4P 1 . 5P 1 . 6P 1 . 7P 1 . 0P 1 . 1P 1 . 2P 1 . 3P1.7P1.6P1.5P1.4K 0K 1K 2K 3K 4K 5K 6K 7K 8K 9K 1 0K 1 1K 1 2K 1 3K 1 4K 1 5 圖 335 44 鍵盤陣列電路原理 二、程序設(shè)計 /*****************************************************************************/ include define uchar unsigned char code uchar P_scan[] = {0x01,0x02,0x04,0x08}。 //鍵盤行掃描臨時數(shù)值 code uchar key_temp[] = {0x11,0x12,0x14,0x18 //鍵盤按下得到的臨時數(shù) 據(jù) 0x21,0x22,0x24,0x28 0x41,0x42,0x44,0x48 0x81,0x82,0x84,0x88}。 code uchar seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}。 void delay( uchar i) { while(i) i。 } uchar key_temp( void) //鍵盤掃描函數(shù) { uchar i, j。 for(i = 0。 i 4。i++) //讓鍵盤行線輸出掃描數(shù)據(jù) { P1 = P_scan[i]。 if(P1 != P_scan[i]) delay(200)。 //如果有按鍵按下, P1 口不是掃描數(shù)據(jù) if(P1 != P_scan[i]) //延時一段時間后,分析一下 P1 口是什么數(shù)據(jù) { for(j = 0。j16。j++) //如果 P1 口上的數(shù)據(jù)與鍵盤臨時數(shù)據(jù)相同 ,輸出臨時鍵值 { if(P1 == key_temp[j]) return(j)。 } } eles //如果沒有按鍵按下,輸出沒有按鍵按下標志“ 88” return(88)。 } } Void main(void) { uchar i,j。 while(1) { i = key_temp()。 if(i =
點擊復制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1