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

正文內(nèi)容

[1小時學會c語言51單片機]c語言入門教程(參考版)

2025-06-29 01:31本頁面
  

【正文】 當然單片機和外部其他的芯片還有很多,比如數(shù)字溫度傳感器DS18B20,實時時鐘芯片DS1302,還有比如訪問AT24CXX的EEPROM存儲器等,更多的電路,還要靠大家在平時的學習過程當中,慢慢掌握。時隔13個月之久再來繼續(xù)寫這些東西,沒有以前的激_情和熱情,所以就草草了事結(jié)尾,希望大家不要在背地里罵我哦,^_^。其實51也就那么簡單,真的很希望大家看完這篇文字以后,很自信的說,51單片機也已經(jīng)入門。 // ...add your other code } 當然在實際過程當中,并不是如此簡單簡潔的,還希望大家能夠舉一反三哦... ^_^。 //...add your other code here. } old_value = new_value。 !old_value)//識別按鍵。 if(new_value amp。//定義按鍵的I/O void P_key(void) { char new_value,old_value。 //...add your other code here } Delay函數(shù)具體延時多長時間,就要看你設(shè)定的T0定時器中斷和Delaytime的乘積,比如你的定時器中斷為50MS,Delaytime為20的話,那么50MS*20=1S。//等在這里,直到Delaytime為0。EX1: unsigned char Delaytime。 解決方法大致有如下2種: ,在中斷里查詢延時的標志位。 再看Delay函數(shù),完全讓CPU執(zhí)行(;空語句),所以在做大的產(chǎn)品或者代碼時,這個是非常耗費單片機內(nèi)部資源的。 請看這里: if(P1_0 == 0) { Delay(10)。為什么?我的按鍵不是可以正常工作嗎? case 2: P2_1 = 0xfd。 case 1: P2_0 = 0xFE。 { } switch( b ) //等待鍵松開 } b = 0。 { if( b == N )//N為鍵的功能數(shù)目 { Delay(10)。 while( 1 ) { if(P1_0 == 0) return(key_val(row|col))。 col = colamp。 col = P1amp。 0xF0。 0xF0。 P1 = 0xF0。 Delayt(50)。P0=tab[key]。0xf0)==0xf0) P1=k。 default: break。 case 0x70: key=4*j+3。 case 0xb0: key=4*j+2。 case 0xd0: key=4*j+1。 case 0xe0: key=4*j+0。 { switch(s) s=P1amp。 {j++) for(j=0。 P1=0xfe。 { if(pkey()==1) while(1) { return 0。 } else return 1。if(P1!=0xf0) } /******************************************************************************/ bit pkey(void)//判斷鍵的否被按下,通過返回值確定 { P1=0xf0。i255。 i=t。//0到F的16個鍵植 /******************************************************************************/ void Delayt(unsigned char t)//延時函數(shù) { unsigned char i。 現(xiàn)在我們在P1口接個4*4的鍵盤,--,再接4個4K7的上拉電阻至VCC。如果鍵盤數(shù)目一 大的話,顯然不適合(2)線反轉(zhuǎn)法,通過行列狀態(tài)的改變來判斷有無鍵被按下! 這回我們來講講鍵盤,大家肯定見過銀行柜員機吧,取錢輸入密碼就要用到鍵盤,超市購物取回寄存物品要輸入密碼,還有你現(xiàn)在在 用的PC機的鍵盤。 } 來彌補!這樣可能會出現(xiàn)這樣的現(xiàn)象:秒直接跳變!我們可以再通過細分來實現(xiàn),不要10小時那么大,小些的就行!具體的操作還是留給 朋友們吧! (七) 但是還是有誤差!郁悶!為什么呢?那是硬件造成的誤差,我們可以用軟件來彌補!我們先 把時鐘點亮,讓他走上幾個小時或者是幾天,看看到底誤差是多少!取個平均值。 先關(guān)閉定時器T0,然后重新給TH0和TL0 賦值,再開啟 TR0 = 1。 在中斷處理服務(wù)程序中,我們加入上面的代碼。 TR0 = 1。 TL0 += (_TH0_TL0_ + 9) % 256。 哈哈,趕緊編譯HEX文件,搭好硬件,燒入單片機,上電看看效果先!呵呵,現(xiàn)在你應(yīng)該有成就感了吧,想不到一個時鐘居然那么 簡單, 嘿嘿!但是問題來了!時鐘雖然做出來了,但是他的精度怎么樣呢?一兩個小時,或許看不出什么誤差,但是一天或者一年呢? 暈,我的天呀,要是按年來算的話,那這個時鐘根本沒有實用價值!人家都說用C寫不出,精度高的時鐘程序來的?。?!是不是有點后悔 了,去學匯編吧!但是既然選擇了C,那么就不要后悔!嘿嘿,想想C的高級語言,怎么會輸給匯編呢 ^_^ 呵呵!看下面這段代碼: static unsigned char count = 0。中斷和 定時/記數(shù)器器,是個很重要的東西,幾乎用到單片機的地方都會涉及到中斷和定時!所以大家要好好掌握哦! ^_^ while(1) { Disp()。 EA = 1。 TR0 = 1。 TH0 = HI。 hou = 0。 { if(hou == 24) hou++。 if(min == 60) { if(sec == 60) { min++。 if(count == M) { count = 0。 //定時50ms { static unsigned char count = 0。 } /********************************************************************************************/ void IsrTimer0(void) interrupt 1 using 1Delay(5)。 P2_5 = 1。Delay(5)。 P2_4 = 1。Delay(5)。 P2_3 = 1。Delay(5)。 P2_2 = 1。 Delay(5)。 P2_1 = 1。Delay(5)。 } } /*********************************************************************************************/ void Disp(void)//數(shù)碼管顯示 { P2_0 = 1。 j 125。// /*********************************************************************************************/ void Delay(unsigned char a)//延時程序a*1MS { unsigned char j。 unsigned char SEG_TAB_B[ ] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}。 爽產(chǎn)生中斷后,我們怎么處理呢?嘿嘿!仔細想想? ^_^ 每次中斷后,我們可以讓一個變量自加1,那么200次中斷后,不就是1秒的時間了嗎?比起上面我們說的延時來出來是不是更加精確多了呢? 那是肯定的!但是想想1秒種的時間就讓單片機產(chǎn)生那么多次的中斷,單片機會不會累著呢?恩,那么不好。 EA = 1;//開總中斷 ET0 = 1;//開定時器中斷。//啟動定時器 //載入高8位初值 TL0 = (65536 5000) % 256。工作方式0是16位的(2的16次方是多少,自己算算就知道了)簡單吧?但是如何和中斷一起使用呢?請繼續(xù)看下面的講解! TMOD = 0X01。 TR0 = 1;這句就是啟動定時器0,開始記數(shù)!哦,還有一點,有些朋友會問,你是65536是哪里來的呢?呵呵你可別忘了:設(shè)置定時器0 * C,則C就為5000 / = ? 具體多少,大家自己去算算吧?同理TL0也是一樣的! 但是,細心的朋友會發(fā)現(xiàn)網(wǎng)上或者是資料上的 TH0,TL0并不是和上面一樣的,而是直接TH0 = 0XEC;TL0 = 0X78 是不是和上面的一樣的,別忘了單
點擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1