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

正文內容

[1小時學會c語言51單片機]c語言入門教程-資料下載頁

2025-06-26 01:31本頁面
  

【正文】 //用數碼管顯示相應的鍵值 //-- // include unsigned char code tab[ ]={0x3F,0x06,0x5B,0x4F, 0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C, 0x39,0x5E,0x79,0x71}。//0到F的16個鍵植 /******************************************************************************/ void Delayt(unsigned char t)//延時函數 { unsigned char i。 for(t=0。i=t。t++) for(i=0。i255。i++)。 } /******************************************************************************/ bit pkey(void)//判斷鍵的否被按下,通過返回值確定 { P1=0xf0。 if(P1!=0xf0) { Delayt(25)。 if(P1!=0xf0) return 1。 else return 0。 } else return 0。 } /******************************************************************************/ void main(void)//主函數 { unsigned char key,j,k,s。 while(1) { if(pkey()==1) { P1=0xfe。 k=0xfe。 for(j=0。j4。j++) { s=P1amp。0xf0。 switch(s) { case 0xe0: key=4*j+0。 break。 case 0xd0: key=4*j+1。 break。 case 0xb0: key=4*j+2。 break。 case 0x70: key=4*j+3。 break。 default: break。 } k=(k1)|0x01。 P1=k。 }//for }//if //if((P1amp。0xf0)==0xf0) P0=tab[key]。 P2=1。 Delayt(50)。 }//while } 還有一種就是線反轉法,實現如下: ,把列線置低電平,行置高,讀行狀態(tài) ,把行置低,列置高,讀列狀態(tài) ,則為2次所讀狀態(tài)的結果即為鍵所在的位置,這樣2次輸出和2次讀入可以完成鍵的識別!??! 子函數如下: unsigned char key_vscan(void) { unsigned char row, col。 P1 = 0xF0。 row = P1amp。0xF0。 row = rowamp。0xF0。 P1 = 0x0F。 col = P1amp。0x0F。 col = colamp。0x0F。 return(key_val(row|col))。 } 下面我們再來介紹介紹一鍵多能的程序,即按下一個鍵,可以執(zhí)行不同的命令! void main (void) { unsigned char b = 0。 while( 1 ) { if(P1_0 == 0) { Delay(10)。 if(P1_0 == 0) { b++。 if( b == N )//N為鍵的功能數目 { b = 0。 } while(P3_2 == 0)。//等待鍵松開 } } switch( b ) { case 1: P2_0 = 0xFE。 break。 case 2: P2_1 = 0xfd。 //..............add your code here! } } } (八)//以上的文字寫于2005年5月,由于時間關系,一直未能將此完成,最近閑著無聊又接著寫了些文字,以下寫于2006年6月5日! 在這里我想對上面一點,作個簡單的說明,如果你是剛學單片機,那么你寫的代碼是VERY GOOD的,但是如果把上面的代碼應用于產品的話,那么我可以告訴你,上面所寫的按鍵識別代碼全部是垃圾代碼,^_^,這下傻了吧,呵呵。為什么?我的按鍵不是可以正常工作嗎? 請看這里: if(P1_0 == 0) { Delay(10)。//問題就在這里,你讓CPU在這里空轉? if(P1_0 == 0) { //...add your code here. } } 進入第1個if判斷語句后,就進入了Delay(10)。再看Delay函數,完全讓CPU執(zhí)行(;空語句),所以在做大的產品或者代碼時,這個是非常耗費單片機內部資源的。有什么辦法嗎?呵呵,那是肯定的。 解決方法大致有如下2種: ,在中斷里查詢延時的標志位。/*不僅僅用于鍵盤識別,亦可以用于其他的延時代碼,見EX1*/ .//見EX2。 EX1: unsigned char Delaytime。 void Delay(unsigned char Delaytime)// { while(Delaytime !=0 )。//等在這里,直到Delaytime為0。 } void Timer0_interrupt(void) interrupt 1 using 2 { if(Delaytime != ) Delaytime。 //...add your other code here } Delay函數具體延時多長時間,就要看你設定的T0定時器中斷和Delaytime的乘積,比如你的定時器中斷為50MS,Delaytime為20的話,那么50MS*20=1S。 EX2: define Press_key = P2 ^ 7。//定義按鍵的I/O void P_key(void) { char new_value,old_value。 new_value = Press_key。 if(new_value amp。amp。 !old_value)//識別按鍵。 { Turn_On_LEd( )。 //...add your other code here. } old_value = new_value。 } void Timer0_interrupt(void) interrupt 1 using 2 { P_key()。 // ...add your other code } 當然在實際過程當中,并不是如此簡單簡潔的,還希望大家能夠舉一反三哦... ^_^。 (九) 寫了這么多了,大家也看了這么多了,感覺怎么樣?大家也覺得不難吧。其實51也就那么簡單,真的很希望大家看完這篇文字以后,很自信的說,51單片機也已經入門。這是對我寫怎么多文字最好的回答。時隔13個月之久再來繼續(xù)寫這些東西,沒有以前的激_情和熱情,所以就草草了事結尾,希望大家不要在背地里罵我哦,^_^。當然以上講的只是最簡單的一些東西,單片機的功能非常之強大,只要你能想得到,就一定可以用單片機來實現的。 當然單片機和外部其他的芯片還有很多,比如數字溫度傳感器DS18B20,實時時鐘芯片DS1302,還有比如訪問AT24CXX的EEPROM存儲器等,更多的電路,還要靠大家在平時的學習過程當中,慢慢掌握。 整理分享
點擊復制文檔內容
法律信息相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1