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

正文內(nèi)容

單片機(jī)c語(yǔ)言學(xué)習(xí)心得(已改無錯(cuò)字)

2024-11-15 23 本頁(yè)面
  

【正文】 法程序//用數(shù)碼管顯示相應(yīng)的鍵值//--unsigned char code tab[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}。//0到F的16個(gè)鍵植/******************************************************************************/ void Delayt(unsigned char t)//延時(shí)函數(shù) {unsigned char i。for(t=0。ifor(i=0。i/******************************************************************************/ bit pkey(void)//判斷鍵的否被按下,通過返回值確定 {P1=0xf0。if(P1!=0xf0){Delayt(25)。if(P1!=0xf0)return 1。elsereturn 0。}elsereturn 0。}/******************************************************************************/ void main(void)//主函數(shù) {unsigned char key,j,k,s。while(1){if(pkey()==1){P1=0xfe。k=0xfe。for(j=0。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=(kP1=k。}//for}//if//if((P1amp。0xf0)==0xf0)P0=tab[key]。P2=1。Delayt(50)。}//while }還有一種就是線反轉(zhuǎn)法,實(shí)現(xiàn)如下:,把列線置低電平,行置高,讀行狀態(tài) ,把行置低,列置高,讀列狀態(tài),則為2次所讀狀態(tài)的結(jié)果即為鍵所在的位置,這樣2次輸出和2次讀入可以完成鍵的識(shí)別??!子函數(shù)如下: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))。}下面我們?cè)賮斫榻B介紹一鍵多能的程序,即按下一個(gè)鍵,可以執(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為鍵的功能數(shù)目{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月,由于時(shí)間關(guān)系,一直未能將此完成,最近閑著無聊又接著寫了些文字,以下寫于2006年6月5日!在這里我想對(duì)上面一點(diǎn),作個(gè)簡(jiǎn)單的說明,如果你是剛學(xué)單片機(jī),那么你寫的代碼是VERY GOOD的,但是如果把上面的代碼應(yīng)用于產(chǎn)品的話,那么我可以告訴你,上面所寫的按鍵識(shí)別代碼全部是垃圾代碼,^_^,這下傻了吧,呵呵。為什么?我的按鍵不是可以正常工作嗎?請(qǐng)看這里: if(P1_0 == 0){Delay(10)。//問題就在這里,你讓CPU在這里空轉(zhuǎn)?if(P1_0 == 0){//...add your code here.} } 進(jìn)入第1個(gè)if判斷語(yǔ)句后,就進(jìn)入了Delay(10)。再看Delay函數(shù),完全讓CPU執(zhí)行(;空語(yǔ)句),所以在做大的產(chǎn)品或者代碼時(shí),這個(gè)是非常耗費(fèi)單片機(jī)內(nèi)部資源的。有什么辦法嗎?呵呵,那是肯定的。解決方法大致有如下2種:,在中斷里查詢延時(shí)的標(biāo)志位。/*不僅僅用于鍵盤識(shí)別,亦可以用于其他的延時(shí)代碼,見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函數(shù)具體延時(shí)多長(zhǎng)時(shí)間,就要看你設(shè)定的T0定時(shí)器中斷和Delaytime的乘積,比如你的定時(shí)器中斷為50MS,Delaytime為20的話,那么50MS*20=1S。EX2:define Press_key = P2 ^ 7。//定義按鍵的I/Ovoid P_key(void){ char new_value,old_value。new_value = Press_key。if(new_value amp。amp。!old_value)//識(shí)別按鍵。{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 }當(dāng)然在實(shí)際過程當(dāng)中,并不是如此簡(jiǎn)單簡(jiǎn)潔的,還希望大家能夠舉一反三哦...^_^。(九)寫了這么多了,大家也看了這么多了,感覺怎么樣?大家也覺得不難吧。其實(shí)51也就那么簡(jiǎn)單,真的很希望大家看完這篇文字以后,很自信的說,51單片機(jī)也已經(jīng)入門。這是對(duì)我寫怎么多文字最好的回答。時(shí)隔13個(gè)月之久再來繼續(xù)寫這些東西,沒有以前的激情和熱情,所以就草草了事結(jié)尾,希望大家不要在背地里罵我哦,^_^。當(dāng)然以上講的只是最簡(jiǎn)單的一些東西,單片機(jī)的功能非常之強(qiáng)大,只要你能想得到,就一定可以用單片機(jī)來實(shí)現(xiàn)的。當(dāng)然單片機(jī)和外部其他的芯片還有很多,比如數(shù)字溫度傳感器DS18B20,實(shí)時(shí)時(shí)鐘芯片DS1302,還有比如訪問AT24CXX的EEPROM存儲(chǔ)器等,更多的電路,還要靠大家在平時(shí)的學(xué)習(xí)過程當(dāng)中,慢慢掌握。第五篇:?jiǎn)纹瑱C(jī)C語(yǔ)言學(xué)習(xí)單片機(jī)C語(yǔ)言之一___________________________________________________________________ _____________________ 預(yù)處理 一》宏定義:不帶參數(shù):define 標(biāo)識(shí)符 常量表達(dá)式/*define是宏定義命令,宏名(標(biāo)識(shí)符)好習(xí)慣用大寫*/ define NIL 0x80帶參數(shù):/*相當(dāng)于小函數(shù)*/ define 宏名(參數(shù)表)字符串/*不僅要時(shí)行字任串替換還要進(jìn)行參數(shù)的替換,在宏定義時(shí),宏名與帶參數(shù)的括弧之間不應(yīng)該加空格,否則將空格以后的字符串都作為替代字符串的一部分,這可是很容易出錯(cuò)的*/ 如:define SQ(a,b)a*b 使用:x=12。y=10。area=SQ(x,y)。/*則area=12*10=120*/ 二》文件包含:include 或include “文件名” /*在C中用雙引用形式更保險(xiǎn),在C51中常用物是尖括弧形式*/ 三》條件編譯:/*一般源程序中的所有程序行都參加編譯,但有時(shí)希望對(duì)其中一部分內(nèi)容只在滿足一定條件下才進(jìn)行編譯,也就是對(duì)一部分內(nèi)容指定編譯的條件。*/ if、elif、else、endif、ifdef、ifndef /*選擇不同的編譯范圍,產(chǎn)生不同的代碼,提供通用性。*/ /*如對(duì)8051在6MHZ與12MHZ下有*/ ifdef cpu==8051 define FREQ 6 /*程序段*/ else define FREQ 12/*程序段*/ endif /*這樣下面的原程序不用做任何修改便可以使用于兩種時(shí)鐘頻率的單片機(jī)系統(tǒng)*/ 四》其他:error:捕捉不可預(yù)料的編譯條件if(myv!=0amp。amp。myv!=1)/*假定其值必為0或1*/ error myv must be 1 or 0/*出錯(cuò)時(shí)顯示*/ endifpragma:用于在程序中向編譯器傳送各種編譯控制命令 pragma 編譯命令序列/*例: c51 debug cod large可用:*/pragma DB CD LA pragma disable /*禁止中斷*/單片機(jī)C語(yǔ)言之二_____________________________________________________________________________________ 一》數(shù)據(jù)類型:char int long 1:unsinged 0~255 0~65535 0~4294967295 2:signed128~12732768~327672147483648~2147483647 指針:* 3字節(jié) 位標(biāo)量: sbit 特殊功能寄存器:sfr 16位特殊功能寄存器:sfr16 占2個(gè)內(nèi)存單元,0~65535 可尋址位:sbit利用他可訪問51單片機(jī)的內(nèi)部RAM中的可尋址位或特殊功能寄存器中的可尋址位 sfr P0=0x80。sbit P0_1=P0^1。/*將P0口的口地址定義為80H,*/ 二》數(shù)據(jù)存貯類型━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━ 數(shù)據(jù)存貯類型 ┃ 與存貯空間的對(duì)應(yīng)關(guān)系━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━ data ┃ 直接尋址片內(nèi)數(shù)據(jù)存貯區(qū),訪速度快 bdata ┃ 可位尋址片內(nèi)數(shù)據(jù)存貯區(qū),允許位與字節(jié)混合訪問 idata ┃ 間接尋址片內(nèi)數(shù)據(jù)存貯區(qū),可訪問片內(nèi)全部RAM地址空間pdata ┃ 分頁(yè)尋址片外數(shù)據(jù)存貯區(qū)(256字節(jié))由MOVX @R0訪問 xdata ┃ 片外數(shù)據(jù)存貯區(qū)(64K),由MOVX @DPTR訪問 code ┃ 代碼存貯區(qū)(64K),由MOVC @DPTR訪問━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━ 變量的存貯類型定義: char data var /*字符變量var被定義為data存貯類型,C51編譯器將把該變量定位在51單片機(jī)片內(nèi)數(shù)據(jù)區(qū)存貯區(qū)中*/ bit bdata flag /*位變量flag被定義為bdata存貯類型,C51編譯器將把該變量定位在51單片機(jī)片內(nèi)數(shù)據(jù)區(qū)存貯區(qū)(RAM)中的位尋址區(qū):20H2FH*/三》typedef:重新定義數(shù)據(jù)類型typedef 已有數(shù)據(jù)類型 新的數(shù)據(jù)類型 typedef int word。/*將word定義為整型*/ word i,j。/*將i,j定義為整型*/ 四》位運(yùn)算符:━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━━━━┳━━━━━━ ~ ┃ amp。 ┃ | ┃ ^ ┃ ━━━━╋━━━━━╋━━━━━╋━━━━━━
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1