課件分析教案_第1頁
課件分析教案_第2頁
課件分析教案_第3頁
課件分析教案_第4頁
課件分析教案_第5頁
已閱讀5頁,還剩290頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

實例5:將P1口狀態(tài)分別送入P0、P2、P3口:認(rèn)識I/O口的引腳功 實例6:使用P3口流水點(diǎn)亮8位 實例7:通過對P3口地址的操作流水點(diǎn)亮8位 實例9:用P0口、P1口分別顯示加法和減法運(yùn)算結(jié) 實例10:用P0、P1口顯示乘法運(yùn)算結(jié) 實例11:用P1、P0口顯示除法運(yùn)算結(jié) 實例12:用自增運(yùn)算控制P0口8位LED流水花 實例13:用P0口顯示邏輯"與"運(yùn)算結(jié) 實例14:用P0口顯示條件運(yùn)算結(jié) 實例15:用P0口顯示按位"異或"運(yùn)算結(jié) 實例16:用P0顯示左移運(yùn)算結(jié) w c 實例19:用if語句控制P0口8位LED的流水方 實例20:用swtich語句的控制P0口8位LED的點(diǎn)亮狀 實例21:用for語句控制蜂鳴器鳴笛次 實例22:用while語句控制 實例23:用do-while語句控制P0口8位LED流水點(diǎn) 實例24:用字符型數(shù)組控制P0口8位LED流水點(diǎn) 實例25:用P0口顯示字符串常 實例26:用P0口顯示指針運(yùn)算結(jié) 實例27:用指針數(shù)組控制P0口8位LED流水點(diǎn) 實例28:用數(shù)組的指針控制P0口8位LED流水點(diǎn) 實例29:用P0、P1口顯示整型函數(shù)返回 實例30:用有參函數(shù)控制P0口8位LED流水速 實例32:用指針作函數(shù)參數(shù)控制P0口8位LED流水點(diǎn) 實例33:用函數(shù)型指針控制P1口燈花 實例35:字符函數(shù)ctype.h應(yīng)用舉 實例36:內(nèi)部函數(shù)intrins.h應(yīng)用舉 實例37:標(biāo)準(zhǔn)函數(shù)stdlib.h應(yīng)用舉 實例38:字符串函數(shù)string.h應(yīng)用舉 *****************************************************************中斷、定時器********中斷、定時器*********************中斷、定時器*********中斷、定時器******** 實例42:用定時器T0查詢方式P2口8位控制LED閃 實例43:用定時器T1查詢方式控制單片機(jī)發(fā)出1KHz音 實例44:將計數(shù)器T0計數(shù)的結(jié)果送P1口8位LED顯 實例45:用定時器T0的中斷控制1位LED閃 實例46:用定時器T0的中斷實現(xiàn)長時間定 實例47:用定時器T1中斷控制兩個LED以不同周期閃 實例48:用計數(shù)器T1的中斷控制蜂鳴器發(fā)出1KHz音 實例49:用定時器T0的中斷實現(xiàn)"渴望"曲的實例50-1:輸出50個矩形脈 實例50-2:計數(shù)器T0統(tǒng)計外部脈沖 實例51-2:定時器T0的模式2測量正脈沖寬 實例52:用定時器T0控制輸出高低寬度不同的矩形 實例53:用外中斷0的中斷方式進(jìn)行實例54-1:輸出負(fù)脈寬為200微秒的方 實例55:方式0控制流水燈循環(huán)點(diǎn) w 實例58:單片機(jī)向PC發(fā)送數(shù) 實例59:單片機(jī)接收PC發(fā)出的數(shù) 實例60:用LED數(shù)碼顯示數(shù)字 實例61:用LED數(shù)碼顯示器循環(huán)顯示數(shù)字 實例63:用LED數(shù)碼顯示器偽靜態(tài)顯示數(shù)字 實例67:用LED數(shù)碼管顯示計數(shù)器T0的計數(shù) *********鍵盤控制**** 實例71:CPU控制的獨(dú)立式鍵盤掃描實 實例73:獨(dú)立式鍵盤控制的4級變速流水 實例81:用LCD顯示字符 實例82:用LCD循環(huán)右移顯示 eto 實例83:用LCD顯示適時檢測結(jié) ww ******************************w*Cwrd********************些的使用 紅外 實例85:將數(shù)據(jù)"0x0f"寫入AT24C02再讀出送P1口顯 實例86:將按鍵次數(shù)寫入AT24C02,再讀出并用1602LCD顯 實例87:對I2C總線上掛接多個AT24C02的讀寫操 實例88:基于AT24C02的多機(jī)通信程 實例88:基于AT24C02的多機(jī)通信寫入程 實例90:DS18B20溫度檢測及其液晶顯 實例91:將數(shù)據(jù)"0xaa"寫入X5045再讀出送P1口顯 實例92:將流水燈控制碼寫入X5045并讀出送P1口顯 實例93:對SPI總線上掛接多個X5045的讀寫操 實例94:基于ADC0832的數(shù)字電壓 實例95:用DAC0832產(chǎn)生鋸齒波電 實例96:用P1口顯示紅外的按鍵 實例98:基于DS1302的日歷時 模擬霍爾脈 void{}實例w void {unsignedinti; //做20000次空循環(huán) }(C1個主函數(shù)voidmain(void){ { //P1=11111110BP1.0 //P1=11111111BP1.0 }} (C1個主函數(shù)void{ { //將P1口狀態(tài)送入P0口 //將P1口狀態(tài)送入P2口 //將P1口狀態(tài)送入P3口}}w wwwPLCworld void{unsignedchari,j;;}voidmain(void){

}}w wwwPLCworld sfrx=0xb0; //8位特殊功能寄存器,對地址xP1voiddelay(void){unsignedchari,j; }voidmain(void){{ }w wwwPLCworld} voidint_delay(void)//延時一段較長的時間{unsignedintm; }//{unsignedchari,j; }voidmain(void){unsignedchari;{{ //P1.0口的燈點(diǎn)亮int_delay();//延時一段較長的時間 }w {

wwwPLCworld //P1.4口的燈點(diǎn)亮 ();//}}}voidmain(void){unsignedchar //P1=103=01100111B,P1.3、P1.4、P1.7 }voidmain(void){unsignedcharm,n;unsignedints; 8P0w 256

wwwPLCworld //8P1P1=17=11H=00010001BP1.0P1.4 //8P0P3=192=c0H=11000000B,P3.1,P3.6,P3.7} voidmain(void){ P0=((36%5)*10)/5;//求小數(shù) } voiddelay(void){unsignedinti;;}函數(shù)功能w {

wwwPLCworldunsignedchar { }} voidmain(void){ } voidmain(void){ } voidmain(void){w wwwPLCworld } voidmain(void){ } sbitF=P1^4; //將F位定義為P1.4sbit //XsbitY=P1^6; //將Y位定義為P1.6sbitZ=P1^7; //將Z位定義為P1.7voidmain(void){{;}} voiddelay(void){ww unsignedintn;;

wwwPLCworld}voidmain(void){unsignedchari;{{ //每次循環(huán)P1的各二進(jìn)位右移1位,補(bǔ)0 }}} sbitS1=P1^4; //將S1位定義為P1.4sbit voidmain(void){{ }}w wwwPLCworld sbitS1=P1^4; //將S1位定義為P1.4voiddelay(void){unsignedintn;;}voidmain(void){unsignedchar { { } {case1 case2 case case w case case case }}} sbitsound=P3^7; //將sound位定義為P3.7voiddelay1600(void){unsignedcharn;;}voiddelay800(void){unsignedcharn;;}voidmain(void){ww {

wwwPLCworld{ //P3.7 //P3.7}{ //P3.7 //P3.7}}} voiddelay60ms(void){unsignedcharm,n;;}voidmain(void){unsignedcharw {

wwwPLCworld { //iP0delay60ms();//延時 }}} voiddelay60ms(void){unsignedcharm,n;;}voidmain(void){{ w //第六個LEDwwwPLCworld } voiddelay60ms(void){unsignedcharm,n;;}voidmain(void){unsignedcharunsignedcharcodeTab0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f定義無符{{}}}w wwwPLCworld voiddelay150ms(void){unsignedcharm,n;;}voidmain(void){unsignedcharstr[]={"Now,Temperatureis:"}; unsignedchar{ while(str[i]!='\0')//只要沒有顯示到結(jié)束標(biāo)志'\0'{ }}}voidmain(void){unsignedchar*p1,*p2; unsignedchari,j; w wwwPLCworld }voiddelay150ms(void){unsignedchar;}voidmain(void){unsignedcharcodeTab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedchar*p[]={&Tab[0],&Tab[1],&Tab[2],&Tab[3],&Tab[4],&Tab[5],unsignedchari; {{}}}w

wwwPLCworldvoiddelay150ms(void){unsignedcharm,n;;}voidmain(void){unsignedcharunsignedcharTab[unsignedchar*p; {{ //*(p+i)的值等于a[i] }}}w unsignedintsum(inta,intb){unsignedints;return}voidmain(void){unsignedz; //取得z的高8位P0=z%256;//z8位;}voiddelay(unsignedcharx){unsignedcharm,n;;}voidmain(void){w unsignedchar wwwPLCworld charcodeTab[{{ }{ }}}voiddelay(void){unsignedcharm,n;;}P08voidled_flow(unsignedchara[8]){unsignedchari;{w }}

wwwPLCworldvoidmain(void){ charcodeTab[}voiddelay(void){unsignedcharm,n;;}P08voidled_flow(unsignedchar*p形參為無符號字符型指針{unsignedchari;{ //將i置為0,指向數(shù)組第一個元素{P0=*(p+i);//取的指針?biāo)缸兞浚〝?shù)組元素)P0w //調(diào)用延時wwwPLCworld }}}voidmain(void){ charcodeTab[ unsignedchar} unsignedcharcodevoiddelay(void){w

unsignedcharm,n;;

wwwPLCworldvoidled_flow(void){unsignedchari; {}}voidmain(void){void(*p)(void);//定義函數(shù)型指針,所指函數(shù)無參數(shù),無返回值 //將函數(shù)的地址賦給函數(shù)型指針p } unsignedcharcodestr1TemperatureistestedbyDS18B20";//C語言中,字符串unsignedcharcodestr2[]="Nowtemperatureis:"; unsignedcharcodestr3[]="TheSystermisdesignedbyZhangSan";unsignedcharcodestr4[]="Thedateis2008-9-30";voiddelay(void){ww unsignedcharm,n;;}

wwwPLCworldP08voidled_display(unsignedchar*x[]) {unsignedchar{ { }}voidmain(void){unsignedchari;{;//}} voidmain(void){w wwwPLCworld}} voiddelay(void){unsignedcharm,n;;voidmain(void){ {P3=_crol_(P3,1);//將P3的二進(jìn)制位循環(huán)左移1位后再賦給P3 }} ww ******************************w*Cwrdvoiddelay(void){unsignedcharm,n;;}voidmain(void){unsignedchari;{{}}#include<reg51.h>//51單片機(jī)寄存器定義的頭文件#include<string.h>//包含函數(shù)isalpha()的頭文件voidmain(void){unsignedcharstr1[]="Now,Thetemperatureisunsignedcharstr2[]="Now,Thetemperatureis36Centgrade:";unsignedchari;if(i==0)//str1=str2 w }

wwwPLCworld defineF(a,b //帶參數(shù)的宏定義,abvoid{unsignedchari,j,k; //ij+k參;voidmain(void){P3_0=0;//P3.0引腳置低電平,LED點(diǎn)亮P3_1=0;//P3.0引腳置低電平,LED點(diǎn)亮P3_2=0;//P3.0引腳置低電平,LED點(diǎn)亮P3_3=0;//P3.0引腳置低電平,LED點(diǎn)亮P3_4=1;//P3.4引腳置高電平,LED熄滅P3_5=1;//P3.5引腳置高電平,LED熄滅P3_6=1;//P3.7引腳置高電平,LED熄滅P3_7=1;//P3.7引腳置高電平,LED熄滅;}w wwwPLCworld #defineMAX100 voidmain(void){#ifMAX>80 //如果字符串100大于80 //P3口低四位LED點(diǎn)亮 } **中斷、定時器********中斷、定時器*********中斷、定時器*********中斷、定時器 voidmain(void){ //T0 //使用定時器T0的模式1 //定時器T0的高8位賦初值w wwwPLCworld { }} sbit voidmain(void){ //定時器T0中斷允許 //使用定時器T1的模式1 //定時器T1的高8位賦初值 //定時器T1的高8位賦初值 //啟動定時器T1{ //將P3.7引腳輸出電平取反 //定時器T0的高8位賦初值 //定時器T0的高8位賦初值}}w wwwPLCworld sbit voidmain(void){ //定時器T0中斷允許 //定時器T0的高8位賦初值 //定時器T0的高8位賦初值 //啟動定時器T0{ { //按鍵S按下接地,電平為0} }} sbit voidmain(void){ ww LCo //使用定時器T0的模式2TH0=(65536-46083)/256;//定時器T0的高8位賦初 //T0;}voidTime0(void)interrupt1using0//“interrupt”函數(shù)為中斷服務(wù)函數(shù){ //按位取反操作,將P2.0引腳輸出電平取反TH0=(65536-46083)/256T08位重新賦初值} sbit voidmain(void){ //使用定時器T0的模式2TH0=(65536-46083)/256;//定時器T0的高8位賦初值TL0=(65536-46083)%256;//定時器T0的高8位賦初值 //啟動定時器T0 //0;}w wwwPLCworldvoidTime0(void)interrupt1using0//“interrupt”函數(shù)為中斷服務(wù)函數(shù){ { }} sbitsbit sbitsbit 定時器T1中斷次 定時器T1中斷次voidmain(void){ //使用定時器T1的模式1TH1=(65536-46083)/256;//定時器T1的高8位賦初值TL1=(65536-46083)%256;//定時器T1的高8位賦初值 //啟動定時器T1 //0 //0;}w voidTime1(voidinterrupt3using0 函數(shù)為中斷服務(wù){(diào) //Countor1自加1 //Countor2自加 { } { }} sbit voidmain(void){ //定時器T1的高8位賦初值 //定時器T1的高8位賦初值 //啟動定時器T1;} voidTime1(void)interrupt3using0//“interrupt” w wwwPLCworld{ } sbitsound=P3^7; //將sound位定義為P3.7unsignedintC; #definel_dao262 #definel_re286 //將“l(fā)_re”宏定義為低音“2”的頻率286Hz#definel_mi311 //將“l(fā)_mi”宏定義為低音“3”的頻率311Hz#definel_fa349 //將“l(fā)_fa”宏定義為低音“4”的頻率349Hz#definel_sao392 //將“l(fā)_sao”宏定義為低音“5”的頻率392Hz#definel_la440 //將“l(fā)_a”宏定義為低音“6”的頻率440Hz#definel_xi #definedao523 #definere587 //將“re”宏定義為中音“2”的頻率587Hz#definemi659 //將“mi”宏定義為中音“3”的頻率659Hz#definefa698 //將“fa”宏定義為中音“4”的頻率698Hz#definesao784 //將“sao”宏定義為中音“5”的頻率784Hz#definela880 //將“l(fā)a”宏定義為中音“6”的頻率880Hz#definexi987 //將“xi”宏定義為中音“7”的頻率523H#defineh_dao1046 #defineh_re1174 //將“h_re”宏定義為高音“2”的頻率1174Hz#defineh_mi1318 //將“h_mi”宏定義為高音“3”的頻率1318Hz#defineh_fa1396 //將“h_fa”宏定義為高音“4”的頻率1396Hz#defineh_sao1567 //將“h_sao”宏定義為高音“5”的頻率1567Hz#defineh_la1760 //將“h_la”宏定義為高音“6”的頻率1760Hz#defineh_xi1975 //將“h_xi”宏定義為高音“7”的頻率1975Hzvoiddelay(){unsignedcharww ;}

wwwPLCworldvoidmain(void){unsignedchar intcode 0xff0xffunsignedcharcodeJP[w wwwPLCworld //T01(13位計數(shù)器 {

{ //可證明這是13位計數(shù)器TL05 //延時1個節(jié)拍單位 }}}voidTime0(void)interrupt1using1{ //P3.7 }w wwworlc sbit voiddelay30ms(void){unsignedcharm,n;;}voidmain(void){unsignedchar {};//} voidmain(void){ w } sbit voidmain(void){ TMOD=00001010B,T02,GATE { //INT0為低電平,T0; while(ui==1)//在INT0高電平期間,等待,計時; }} sbit w unsignedchar Cwo=voiddelay30ms(void){unsignedcharm,n;;}voidmain(void){unsignedchar {}}voidint0(void)interrupt0using0//0的中斷編號為0{}w wwwPLCworld sbit voidmain(void){ }voidint0(void)interrupt0using0//0的中斷編號為0{ } sbit voidmain(void){ //定時器T0的高8位賦初值 //定時器T0的高8位賦初值 //啟動定時器T0w Cwo ;}voidTime0(void)interrupt1using0//"interrupt"函數(shù)為中斷服務(wù)函{ //P1.4} sbit void{ //允許定時器T0中斷 //定時器T0賦初值0 //定時器T0賦初值0 //先關(guān)閉T0}voidint0(void)interrupt0using0//0的中斷編號為0{ //0 w wwwPLCworld } //unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水燈控sbitvoiddelay(void){unsignedchar;}voidSend(unsignedchardat){ ; }voidmain(void){w unsignedchar wwwPLCworld {{ }}} unsignedcharcodeTab[voidSend(unsignedchardat){}voiddelay(void){unsignedcharm,n;;}w {

wwwPLCworldunsignedchar //SCON=01000000B,串口工作方式1 //PCON=00000000B,波特率9600TH1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值TL1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值 //啟動定時器T1{ { //發(fā)送數(shù)據(jù)i }}} unsignedcharReceive(void){unsignedchar //為了接收下一幀數(shù)據(jù),需將RI清0 //將接收緩沖器中的數(shù)據(jù)存于datreturndat;}voidmain(void){TMOD=0x20;//T1SCON=0x50;//SCON=01010000B1,允許接收w wwwPLCworldPCON=0x00;PCON=00000000BTH1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值TL1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值TR1=1;//啟動定時器T1 {}} sbitp=PSW^0;unsignedcharcodeTab[voidSend(unsignedchardat){}voiddelay(void){unsignedcharm,n;;}w wwwPLCworldvoidmain(void){unsignedcharTMOD=0x20;//TMOD=00100000BT12SCON=0xc0;//SCON=11000000B,串口工作方式3,PCON=0x00;//PCON=00000000B,波特率9600TH1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值TL1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值 //啟動定時器T1{ { //發(fā)送數(shù)據(jù)i }}} sbitp=PSW^0;unsignedcharReceive(void){unsignedchar //為了接收下一幀數(shù)據(jù),需將RI清0 //將接收緩沖器中的數(shù)據(jù)存于dat{w

}

wwwPLCworldvoidmain(void){TMOD=0x20;//T1SCON=0xd0;//SCON=11010000B,串口工作方式1,允許接收(REN=1)PCON=0x00;//PCON=00000000B,波特率9600TH1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值TL1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值 //啟動定時器T1 {}} unsignedcharcodeTab[voidSend(unsignedchardat){}voiddelay(void){unsignedcharww ;}

wwwPLCworldvoidmain(void){unsignedchar //SCON=01000000B,串口工作方式1 //PCON=00000000B,波特率9600TH1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值TL1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值 //啟動定時器T1{ { //發(fā)送數(shù)據(jù)i }}} unsignedcharReceive(void){unsignedchar //為了接收下一幀數(shù)據(jù),需將RI清0 //將接收緩沖器中的數(shù)據(jù)存于datreturndat;}w wwwPLCworldvoidmain(void){TMOD=0x20;//T1SCON=0x50;//SCON=01010000B,串口工作方式1,允許接收(REN=1)PCON=0x00;//PCON=00000000B,波特率9600TH1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值TL1=0xfd;//根據(jù)規(guī)定給定時器T1賦初值TR1=1;//啟動定時器T1 {}}*********數(shù)碼管顯示*****數(shù)碼管顯示數(shù)碼管顯示****************數(shù)碼管顯 void{ }w wwwPLCworld voiddelay(void){unsignedchari,j;;}voidmain(void){unsignedcharunsignedcharcode {{ //讓P0口輸出數(shù)字的段碼92H }}} w void //延時函w 段時{unsignedchari,j;;}void{ { //P2.0引腳輸出低電平,DS0 P2=0xfd //P2.1引腳輸出低電平,DS1 //P2.2引腳輸出低電平,DS2 //P2.3引腳輸出低電平,DS3 }} void {unsignedchari;;}void{ {w Cworld P2=0xfd //P2.1引腳輸出低電平,DS1 //P2.2引腳輸出低電平,DS2 //P2.3引腳輸出低電平,DS3 }} unsignedchari; unsignedint unsignedcharcodevoid{unsignedinti;;}函數(shù)功能:4位數(shù)的數(shù)碼顯示器顯示w ******************************w*wrdc***********************voiddisplay(unsignedint{ P2=0xfd; //P2=11110111B,P2.3DS3接 }void { 1.085微秒=50000微秒=50 { }}w voidTime0(void)interrupt1using{

wwwPLCworld { //隨機(jī)產(chǎn)生一個從0到32767的整再將其除以10,獲得一個隨機(jī)4位數(shù),模擬檢測結(jié)果 } } unsignedcharcodeunsignedcharint_time; unsignedcharsecond; void{unsignedchari;;}w voidDisplaySecond(unsignedchark)wwwPLCworld{ //P2.6DS6 //P2.7DS7 }void { 秒//=50000微秒=50 { }}voidinterserve(void)interrupt1using1{ int_time++; //每來一次中斷,中斷次數(shù)int_time自加1 //夠20次中斷,即1秒鐘進(jìn)行一次檢測結(jié)果采樣{ w second0秒等于60wwwPLCworld} } unsignedcharTab[ unsignedcharport[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharint_time;//中斷次數(shù)計數(shù)變量unsignedcharsecond; unsignedcharminute; unsignedcharhour; void {unsignedcharj;;}voidDisplaySecond(unsignedchars){ //P2.6DS6 //P2.7DS7 w wwwPLCworld}voidDisplayMinute(unsignedcharm){ P2.3DS3 P2.4DS4 //P2.5DS5 }voidDisplayHour(unsignedcharh){ //P2.0DS0 //P2.1DS1 //P2.2DS2 }w wwwPLCworldvoidmain(void){ //允許T0中斷 { }}voidinterserve(void)interrupt1using1 //usingTime0{{ }{ //分鐘計數(shù)變量加1}w if(minute==60)wwwPLCworld{ }{ } } sbitS=P3^2 unsignedcharTab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsignedcharvoiddelay(void){unsignedcharj;;}voidDisplay(unsignedcharx)w wwwPLCworld{ //P2.6引腳輸出低電平,DS6 //P2.7引腳輸出低電平,DS7 }voidmain(void){ }voidint0(void)interrupt0using0//0的中斷編號為0{} w {

wwwPLCworld //將數(shù)字5的段碼送P0口 //將數(shù)字9的段碼送P1口 ;} **鍵盤控制*********鍵盤控制***************鍵盤控制 *****鍵盤控制 sbitS1=P1^4; //將S1位定義為P1.4引腳sbitLED0=P3^0; //將LED0位定義為P3.0引腳voidmain(void) { //P3.0{ //P3.0}} w wwwPLCworldsbit sbit voiddelay(void){unsignedchari,j;;}voidmain(void) { //P3.0{ {delay();//延時一段時間再次檢測 //按鍵S1的確被按下 //P3.0}}}#include<reg51.h>//51sbitS1=P1^4; sbitS2=P1^5; sbitS3=P1^6; sbitS4=P1^7; unsignedcharkeyval;//按鍵值voidled_delay(void)w }

unsignedchari,j;;

wwwPLCworldvoiddelay30ms(void){unsignedchari,j;;}voidforward(void){ }ww ******************************w*Cwrdvoidbackward(void){ }voidstop(void){}voidflash(void){}voidkey_scan(void){ ww wwwPLCworldcn //按鍵S1被按下 }}voidmain(void) { {{casecase3:stop();case4:flash();}}} sbitS1=P1^4; //將S1位定義為P1.4引腳ww sbitS2=P1^5; LCwsbitS3=P1^6; //將S3位定義為P1.6引腳sbit unsignedcharkeyval;//按鍵voidled_delay(void){unsignedchari,j;;}voiddelay20ms(void){unsignedchari,j;;}voidforward(void){ w }voidbackward(void){ }voidstop(void){ }voidflash(void){ w wwwPLCworld}voidmain(void) { //使用定時器T0的模式1 {{casecase3:stop();case4:flash();}}}voidTime0_serve(void)interrupt1using1{ { //按鍵S1被按下w

}} unsignedchar sbit //S1sbit sbit sbit voiddelay20ms(void) {unsignedchari,j;;}voiddelay(unsignedcharx){unsignedchark;}ww ******************************w*Cwrdcvoidmain(void){ //使用定時器T0的模式2 { }}voidintersev(void)interrupt1using1{ { { w //如果是按鍵S3按下 //如果是按鍵S4按下 }} } unsignedchar sbit //S1voiddelay(void) {unsignedchari,j;;}voidmain(void){ //使用定時器T0的模式2 w{

wwwPLCworld{case0:case1:P3=0xfd;case2:P3=0xfb;case3:P3=0xf7;}}}voidintersev(void)interrupt1using1{ { //延時20ms,軟件消抖 //如果是按鍵S1按} } unsignedcharcodeTab[w wwwPLCworldunsignedcharint_time;//中斷次數(shù)計數(shù)變量unsignedcharsecond; unsignedcharminute; unsignedcharhour; sbit sbit sbit sbit voiddelay(void){unsignedcharj;;}voiddelay60ms(void){unsignedchari,j;;}voidDisplaySecond(unsignedchars){ //P2.6DS6 //P2.7DS7 w //關(guān)閉所有數(shù)wwwPLCworld}voidDisplayMinute(unsignedcharm){ P2.3DS3 P2.4DS4 //P2.5DS5 }voidDisplayHour(unsignedcharh){ //P2.0DS0 //P2.1DS1 //P2.2DS2 }w {

wwwPLCworld //P14 { { { }}}}void{ //允許T0中斷 //啟動定時器T0 {w ol; }}voidinterserve(void)interrupt1using1 //usingTime0{ //中斷次數(shù)加1 { } { } { //小時計數(shù)變量加1} { } //定時器T0高四位賦值 //定時器T0低四位賦 }w sbit sbit sbit unsignedchar unsignedchar 函數(shù)功能:軟件消抖延時(voiddelay(void){unsignedchari,j;;}voidunsignedinti;;}voidforward(){ }voidbackward()w

wwwPLCworld}voidstop(void){P0=0xff }void { {case case //S2case }}}w *******************wwPolc*********voidTime0_serve(void)interrupt1using1{ { { }} //定時器T0的高8位賦初值 //啟動定時器T0}#include<reg51.h>//51sbitP14=P1^4; sbitP15=P1^5; sbitP16=P1^6; sbit //將P17位定義為P1.7引unsignedcharcodeTab[unsignedchar voidled_delay(void){unsignedcharj;w }

wwwPLCworldvoiddisplay(unsignedchark){ }voiddelay20ms(void){unsignedchari,j;;}voidmain(void){ //使用定時器T0的模式1TH0=(65536-500)/256;//定時器T0的高8位賦初值TL0=(65536-500)%256;//定時器T0的高8位賦初值 //啟動定時器T0 { }}w 0的中斷服務(wù)子wwPLCworldnvoidtime0_interserve(void)interrupt1using1 //定時T0的中斷編1,{ {

//第一行置為低電平“0”(P1.0

w

w/w/wPLCworldn到接P1.5引腳的列線為低電

} } sbit voiddelay_sound(void){unsignedchari;;}voiddelay20ms(void)w }

unsignedchari,j;;

wwwPLCworldvoidmain(void){ //使用定時器T0的模式1TH0=(65536-500)/256;//定時器T0的高8位賦初值TL0=(65536-500)%256;//定時器T0的高8位賦初值 //啟動定時器T0 ;}voidtime0_interserve(void)interrupt1using1 {unsignedchar { //P3.7{}} w 08位賦初 } sbitP14=P1^4; sbitP15=P1^5; sbitP16=P1^6; sbitP17=P1^7; unsignedcharkeyval;//定義變量按鍵值sbit unsignedint unsignedint #definel_dao #definel_re286 //將“l(fā)_re”宏定義為低音“2”的頻率286Hz#definel_mi311 //將“l(fā)_mi”宏定義為低音“3”的頻率311Hz#definel_fa349 //將“l(fā)_fa”宏定義為低音“4”的頻率349Hz#definel_sao392 #definel_la440 //將“l(fā)_a”宏定義為低音“6”的頻率440Hz#definel_xi494 //將“l(fā)_xi”宏定義為低音“7”的頻率494Hz#definedao523 #definere587 //將“re”宏定義為中音“2”的頻率587Hz#definemi659 //將“mi”宏定義為中音“3”的頻率659Hz#definefa698 //將“fa”宏定義為中音“4”的頻率698Hz#definesao784 //將“sao”宏定義為中音“5”的頻率784Hz#definela880 //將“l(fā)a”宏定義為中音“6”的頻率880Hz#definexi987 //將“xi”宏定義為中音“7”的頻率53#defineh_dao1046 #defineh_re1174 //將“h_re”宏定義為高音“2”的頻率1174Hz#defineh_mi1318 //將“h_mi”宏定義為高音“3”的頻率1318Hz#defineh_fa1396 //將“h_fa”宏定義為高音“4”的頻率1396Hz#defineh_sao1567 //將“h_sao”宏定義為高音“5”的頻率1567Hzw #defineh_la //將“h_la”wwwPLCworldcn高音“6”的頻率#defineh_xi voiddelay20ms(void){unsignedchari,j;;}voiddelay(){unsignedchari,j;;}voidOutput_Sound(void){ //可證明這是13位計數(shù)器TH0高8位的賦初值方法 //可證明這是13位計數(shù)器TL0低5位的賦初值方法 //開定時T0 }voidmain(void){w //開總中斷wwwPLCworld //定時器T1啟動,開始鍵盤掃描 //分別使用定時器T1的模式1,T0的模式0 //定時器T1的高8位賦初值 //定時器T1的高8位賦初值 {{

case case w

case case case case case case OwtPtor case case

case case case }

case case case }}voidTime0_serve(void)interrupt1using{ww //wwwPLCworldcn13位計數(shù)TH08位的賦初值 //可證明這是13位計數(shù)器TL0低5法 //P3.7}voidtime1_serve(void)interrupt3using2 第2組寄存器{ { {w

//如果檢測到接P1.4 檢測到接P1.6引腳的列 斷是S7鍵被按下 測到接P1.7引腳的列 斷是S8鍵被按下 (P1.2if(P14==0) 接P1.4引腳的列線 是S9鍵被按下 測到接P1.5引腳的列線 是S10鍵被按下 到接P1.6引腳的列線 S11鍵被按下 到接P1.7引腳的列線 S12鍵被按下

//如果檢測到接P1.4引腳的列線為低} }w wwwPLCworld sbitP14=P1^4; //將P14位定義為P1.4引腳sbitP15=P1^5; //將P15位定義為P1.5引腳sbitP16=P1^6; //將P16位定義為P1.6引腳sbitP17=P1^7; //將P17位定義為P1.7引腳sbitsound=P3^7; //將sound位定義為P3.7unsignedcharkeyval; voiddelay(void){unsignedchari;;}voiddelay20ms(void){unsignedchari,j;;}voidmain(void){unsignedcharD[]={0,8,0,8,7,4,11}; //設(shè)定 //使用定時器T0的模式1TH0=(65536-500)/256;//T08位賦初值TL0=(65536-500)%256;//T08w //第一位輸入不正確,等; //第二位輸入不正確,等; //第三位輸入不正確,等; //第四位輸入不正確,等; //第五位輸入不正確,等; //第六位輸入不正確,等; ; }voidtime0_interserve(void)interrupt1using1 //定時T0的中斷編1,{unsignedchar{//第一行置為低電平“0”(P1.0wwLC

//如果檢測到接P1.4引腳的列線為低w }}

wwwPLCworld }******************液晶顯示LCD*********液晶顯示*****LCD******************** sbitRS=P2^0; sbitRW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳sbitE=P2^2; //使能信號位,將E位定義為P2.2引腳sbitBF=P0^7; voiddelay1ms(){unsignedcharw ;}

wwwPLCworldvoiddelay(unsignedcharn){unsignedchari;}unsignedcharBusyTest(void){bit //根據(jù)規(guī)定,RS為低電平,RW //將忙碌標(biāo)志電平賦給result}voidWriteInstruction(unsignedchardictate){);// //E01w

wwwPLCworld //E //E由高電平跳變成低電平時,液晶模塊開始}voidWriteAddress(unsignedcharx){}voidWriteData(unsignedchary){ //RS為高電平,RW //E01發(fā)生正跳變,所以應(yīng)先置 //E置高電平w //wwwLCworldcn }voidLcdInitiate(void){ //顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù) }void { //調(diào)用LCD初始化函數(shù) } sbitRS=P2^0; sbitRW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳sbitE=P2^2; //使能信號位,將E位定義為P2.2引腳sbitBF=P0^7; w ]={"Welcow voiddelay1ms(){unsignedchari,j;;}voiddelay(unsignedcharn){unsignedchari;}unsignedcharBusyTest(void){bit //根據(jù)規(guī)定,RS為低電平,RW //將忙碌標(biāo)志電平賦給result}w {);// //E01

//E //E由高電平跳變成低電平時,液晶模塊開始}voidWriteAddress(unsignedcharx){}voidWriteData(unsignedchary){ //RS為高電平,RW //E01發(fā)生正跳變,所以應(yīng)先置w orldcn //E置高電平 }voidLcdInitiate(void){ //顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù) }void {unsignedchar { //設(shè)置顯示位置為第一行的第5個字i=while(string[i]!=w }}} sbit sbitRW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳sbitE=P2^2; //使能信號位,將E位定義為P2.2引腳sbitBF=P0^7; unsignedcharcodedigit[]={" "};//定義字符數(shù)組顯示數(shù)字unsignedcharcodestringTestResult定義字符數(shù)組顯示提示信息voiddelay1ms(){unsignedchari,j;;}voiddelay(unsignedcharn){ww unsignedchari;

wwwPLCworld}unsignedcharBusyTest(void){bit //根據(jù)規(guī)定,RS為低電平,RW //將忙碌標(biāo)志電平賦給result //E}voidWriteInstruction(unsignedchardictate){);// //E01 //Ew

wwwPLCworld //E由高電平跳變成低電平時,液晶模塊開始}voidWriteAddress(unsignedcharx){}voidWriteData(unsignedchary){ //RS為高電平,RW //E01發(fā)生正跳變,所以應(yīng)先置 //E置高電平 }voidLcdInitiate(void){ w //顯示wwwPLCworldcn16×2顯示,5×7點(diǎn)陣,8位數(shù) ,給硬件一點(diǎn)反應(yīng)時 }voidmain(void){unsignedchar unsignedint unsignedcharD1,D2,D3,D4,D5; //從第1行第3列開始顯示i while(string[i]!={ } { //從第2行第6列開始顯示 w 的字符常量寫入 //將小數(shù)點(diǎn)的字符常量寫入LCD //延時1s(每1s一次數(shù)據(jù)) //延時250ms}} sbitRS=P2^0; sbitRW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳sbitE=P2^2; //使能信號位,將E位定義為P2.2引腳sbitBF=P0^7; unsignedcharcodedigit unsignedcharcodestring[]={"BeiJingTime"};//定義字符數(shù)組顯示提示信息unsignedcharcount; unsignedchar voiddelay1ms(){unsignedchari,j;;}voiddelay(unsignedcharn){unsignedchari;w wwwPLCworld}unsignedcharBusyTest(void){bit //根據(jù)規(guī)定,RS為低電平,RW //將忙碌標(biāo)志電平賦給result //E}voidWriteInstruction(unsignedchardictate){);// //E01發(fā)生正跳變,所以應(yīng)先置 //E w //wwEwPLCworldcn平跳變成低電平時,液晶模塊}voidWriteAddress(unsignedcharx){}voidWriteData(unsignedchary){ //RS為高電平,RW //E01發(fā)生正跳變,所以應(yīng)先置 //E置高電平 }voidLcdInitiate(void){ //顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù) ,給硬件一點(diǎn)反應(yīng)時ww

wwwPLCworld }void{unsignedchar //寫顯示地址,將十位數(shù)字顯示在第2行第5列 //將十位數(shù)字的字符常量寫入LCD //將個位數(shù)字的字符常量寫入LCD}void{unsignedchar //寫顯示地址,將十位數(shù)字顯示在第2行第8列 //將十位數(shù)字的字符常量寫入LCD //將個位數(shù)字的字符常量寫入LCD}w wwwPLCworldvoid{unsignedchar //寫顯示地址,將十位數(shù)字顯示在第2行第11列 //將十位數(shù)字的字符常量寫入LCD //將個位數(shù)字的字符常量寫入LCD}*mainvoid{unsignedchar //使用定時器T0的模式1 //定時器T0的高8位設(shè)置初值 //定時器T0的低8位設(shè)置初值 {w //ww } //寫地址,將第二個分號顯示在第2行第7列 //將分號的字符常量寫入LCD //將分號的字符常量寫入LCD { }}{ //如果中斷次數(shù)計滿20次{ } { } { } { }w

wwwPLCworld 紅外#include #include #defineOP_READ //器件地址以及操作,0xa1即為10100001B#defineOP_WRITE0xa0 //器件地址以及寫入操作,0xa1即為10100000BsbitSDA=P3^4; //將串行數(shù)據(jù)總線SDA位定義在為P3.4引腳sbit voiddelay1ms(){unsignedchari,j;;}voiddelaynms(unsignedcharn){w

unsignedchari;wwwPLCworldvoidstart()//{SDA //SDASCL SDA //SDA SCL=0; //SCL為低電平時,SDA上數(shù)據(jù)才允許變化(即允許以后的數(shù)據(jù)傳}voidstop()//{SDA //SDA初始化為低電平“0”SCL SDA //SDA }w ******************************w*wrdc************/unsignedchar//AT24Cxx{unsignedcharunsignedchar for(i=0;i<8;{SCL //SCL //xx|=(unsigned 中SCL } }參數(shù):y(待寫入的數(shù)據(jù))bitWriteCurrent(unsignedchary){unsignedcharbit for(i0i8 //8{SDA= 數(shù)據(jù)送到 后 SCL SCL=0; y //y}SDA=1; 發(fā)送設(shè)備(主機(jī))應(yīng)在時鐘脈沖的高電平期間(SCL=1)釋放SDA線, w SCL= //根據(jù)上述規(guī)定 高電 ack_bitSDA;接受設(shè)備(AT24Cxx)SDA送低電平,表示已經(jīng)接收到一個SCL=0; //AT24Cxx}參數(shù):add(指定的地址);dat(待寫入的數(shù)據(jù)voidWriteSet(unsignedcharadd,unsignedchardat)//addr{ //11ms,1ms}出口參數(shù):x(讀出的數(shù)據(jù))unsignedcharReadCurrent(){unsignedchar 據(jù) }w wwwPLCworldunsignedcharReadSet(unsignedcharset_addr)//在指定地址{ }{SDA=1; SCL=1; //從指定地址“0x36中數(shù)據(jù)并送P1口顯示} sbitRS=P2^0; //寄存器選擇位,將RS位定義為P2.0引腳sbitRW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳sbitE=P2^2; //使能信號位,將E位定義為P2.2引腳sbitBF=P0^7; //忙碌標(biāo)志位,,將BF位定義為P0.7引腳sbitS=P1^4; //將S位定義為P1.4引腳#defineOP_READ //器件地址以及操作,0xa1即為10100001B#defineOP_WRITE0xa0//器件地址以及寫入操作,0xa110100000BsbitSDA=P3^4; sbitSCL=P3^3; //將串行時鐘總線SDA位定義在為P3.3引腳unsignedcharcodedigit[]={" "};//定義字符數(shù)組顯示數(shù)字w (3j+2)*i=(3×33+2)×10=1010(微秒 是1毫voiddelay1ms(){unsignedchari,j;;}voiddelaynms(unsignedcharn){unsignedchari;}unsignedcharBusyTest(void){bit //根據(jù)規(guī)定,RS為低電平,RW //將忙碌標(biāo)志電平賦給result //E}w wwwPLCworldvoidWriteInstruction(unsignedchardictate){ //E01 //E //E由高電平跳變成低電平時,液晶模塊開始}voidWriteAddress(unsignedcharx){}voidWriteData(unsignedchary){ //RS為高電平,RW w // 1發(fā)生正跳變,所以應(yīng)先置 //E置高電平 }voidLcdInitiate(void){ //顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8 ,給硬件一點(diǎn)反應(yīng)時 }voidDisplay(unsignedcharx){unsignedchar //寫顯示地址,將十位數(shù)字顯示在第2行第5列w //將十ww }voidstart()//{SDA //SDASCL SDA //SDA SCL=0; //SCL為低電平時,SDA上數(shù)據(jù)才允許變化(即允許以后的數(shù)據(jù)傳}voidstop()//{SDA //SDA SCL SDA //SDA}ww

wwwPLCworldunsignedcharReadData()//AT24Cxx{unsignedcharunsignedchar for(i=0;i<8;{SCL //SCL //xx|=(unsigned 中SCL } }參數(shù):y(待寫入的數(shù)據(jù))bitWriteCurrent(unsignedchary){unsignedcharbit for(i0i8 //8{SDA= 數(shù)據(jù)送到 后 SCL SCL=0; y //y}SDA=1; 發(fā)送設(shè)備(主機(jī))應(yīng)在時鐘脈沖的高電平期間(SCL=1)釋放SDA線,w //等待一個wwwPLCworld SCL //根據(jù)上述規(guī)定,SCL ack_bitSDA;接受設(shè)備(AT24Cxx)SDA送低電平,表示已經(jīng)接收到一個SCL=0; //AT24Cxx}參數(shù):add(指定的地址);dat(待寫入的數(shù)據(jù)voidWriteSet(unsignedcharadd,unsignedchardat)//addr{ //11ms,1ms}出口參數(shù):x(讀出的數(shù)據(jù))unsignedcharReadCurrent(){unsignedchar 據(jù) }w 函數(shù)功能:從AT24Cxx中的指定地wwwPLCworldunsignedcharReadSet(unsignedcharset_add)//在指定地址{ }*void{unsignedchar unsignedchar //調(diào)用LCD初始化函數(shù) { { //確實該鍵被按下 } //從AT24C02中讀出計件值 }}w #include #include #defineOP_READ10xa1 //器件1地址以及操作,0xa1即為1010#defineOP_WRITE10xa0//器件1地址以及寫入操作,0xa1即為10100000B#defineOP_READ20xaf//器件2地址以及操作,0xa1即為10101111B#defineOP_WRITE20xae//器件2地址以及寫入操作,0xa1即為10101110BsbitSDA=P3^4; //將串行數(shù)據(jù)總線SDA位定義在為P3.4引腳sbit voiddelay1ms(){unsignedchari,j;;}voiddelaynms(unsignedcharn){unsignedchari;}voidstart()//{SDA //SDASCL SDA //SDA w //等待一個機(jī)器wwwPLCworld SCL=0; //SCL為低電平時,SDA上數(shù)據(jù)才允許變化(即允許以后的數(shù)據(jù)傳 }voidstop()//{SDA //SDA SCL SDA //SDA}unsignedcharReadData()//AT24Cxx{unsignedcharunsignedchar //從AT24Cxx中讀出

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論