PIC16單片機(jī)課設(shè)智能時(shí)鐘報(bào)告_第1頁(yè)
PIC16單片機(jī)課設(shè)智能時(shí)鐘報(bào)告_第2頁(yè)
PIC16單片機(jī)課設(shè)智能時(shí)鐘報(bào)告_第3頁(yè)
PIC16單片機(jī)課設(shè)智能時(shí)鐘報(bào)告_第4頁(yè)
PIC16單片機(jī)課設(shè)智能時(shí)鐘報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PAGE17-《PIC單片機(jī)》課程設(shè)計(jì)學(xué)生姓名:學(xué)號(hào):0112007XX指導(dǎo)教師: 2014年12月30日目錄1、硬件介紹 -2-1.1電源模塊 -2-1.2LCD模塊 -2-1.3矩陣按鍵模塊 -4-1.4時(shí)鐘模塊(DS1307)+溫度模塊(TC74) -4-1.4.1時(shí)鐘模塊(DS1307) -4-1.4.2溫度模塊(TC74) -4-1.6PROTEUS仿真圖 -6-2、軟件介紹 -7-2.1Main程序 -7-2.2初始化 -8-2.3自定義字符 -8-2.4顯示歡迎語(yǔ) -9-2.5時(shí)間及溫度顯示 -10-2.6中斷設(shè)置 -11-2.6.1按鍵功能說(shuō)明 -13-2.6.2按鍵修改說(shuō)明 -14-2.6.3光標(biāo)移動(dòng)說(shuō)明 -15-2.7蜂鳴器設(shè)置音樂(lè) -15-3、設(shè)計(jì)結(jié)果 -15-4、設(shè)計(jì)體會(huì) -16-1、硬件介紹這次課設(shè)所用到的硬件模塊有,PIC16F887單片機(jī)芯片,LCD1602芯片,4×4鍵盤(pán),DS1307時(shí)鐘芯片,TC74溫度計(jì)芯片,還有PWM控制的蜂鳴器模塊。現(xiàn)將各個(gè)模塊的硬件原理圖畫(huà)于下方:1.1電源模塊圖1-1電源模塊電源部分包括接RE3/MCLR的復(fù)位電路,按下S17可復(fù)位單片機(jī);電源并接的電容C24、C23起到消除干擾,穩(wěn)定電源電壓的作用;RA6、RA7接外部4M晶振,為單片機(jī)提供時(shí)基頻率。1.2LCD模塊圖1-2LCD模塊PROTEUS接線:本次設(shè)計(jì)采用點(diǎn)陣型LCDYB1602A,圖中采用4位數(shù)據(jù)線接線方式,可以節(jié)省單片機(jī)的I/O口,原理圖中電位器用于調(diào)整背光亮度接VEE腳。(因在PROTEUS中無(wú)法仿真背光亮度,故仿真圖未畫(huà)出)該LCD為16×2型,5×8點(diǎn)陣。1.3矩陣按鍵模塊圖1-3矩陣鍵盤(pán)模塊1-4行接RB0-RB3,1-4列接RB4-RB7。1.4時(shí)鐘模塊(DS1307)+溫度模塊(TC74)1.4.1時(shí)鐘模塊(DS1307)DS1307是實(shí)時(shí)時(shí)鐘芯片,它提供秒、分、時(shí)、日、月、年和星期等數(shù)據(jù),并能自動(dòng)計(jì)算閏年至2100年。時(shí)鐘晶振是典型的32.768kHz。1.4.2溫度模塊(TC74)溫度傳感器TC74是Microchip公司的一款I(lǐng)2C接口的數(shù)字式溫度傳感器。其測(cè)溫范圍為-40至125℃。PROTEUS接線:DS1307和DC74的時(shí)鐘線接RC3/SCL,數(shù)據(jù)線接RC4/SDA;DS1307的SOUT脈沖輸出接RA4,以供修改數(shù)據(jù)時(shí)顯示閃爍控制。1.5蜂鳴器模塊圖1-4蜂鳴器模塊本設(shè)計(jì)中采用CCP2,故接RC2。1.6PROTEUS仿真圖2、軟件介紹2.1Main程序2.2初始化其中:D端口設(shè)置為輸出,控制YB1602,D7設(shè)置高電平使能LCD背光;B口工作于矩陣按鍵掃描模式,B口低4位為輸入,且電平變化中斷使能,設(shè)置ANSELH,使B端口為I/O口,B口上拉使能;RC2輸出低電平,方向?yàn)檩斎耄蝗种袛嗍鼓?外設(shè)中斷使能,T0IE和RBIE使能,清中斷標(biāo)志位RBIF;LCD寫(xiě)入自定義字符;發(fā)送控制序列,4位數(shù)據(jù)格式,2行,清屏;DS1307初始化時(shí)間為2014年11月27日15時(shí)32分00秒星期四。2.3自定義字符constcharDDD[8][8]={{0b01111,0b01001,0b01001,0b01111,0b01001,0b01001,0b01111,0b00000},//“時(shí)”1{0b00010,0b11111,0b00010,0b01110,0b00010,0b01010,0b00110,0b00000},//“時(shí)”2{0b01011,0b00100,0b10011,0b10010,0b10011,0b10010,0b10011,0b00000},//“間”1{0b11111,0b00001,0b11001,0b01001,0b11001,0b01001,0b11011,0b00000},//“間”2{0b00111,0b01000,0b00011,0b00000,0b00111,0b00000,0b00000,0b00000},//“氣”1{0b11000,0b00000,0b10000,0b01000,0b11000,0b01010,0b01100,0b00000},//“氣”2{0b10011,0b01010,0b00011,0b11000,0b00011,0b01010,0b10111,0b00000},//“溫”1{0b11110,0b00010,0b11110,0b00000,0b11110,0b11010,0b11111,0b00000}//“溫”2};voidZK(void)//用來(lái)存LCD1602自定義符號(hào)”時(shí)間“”氣溫“的子程序{unsignedi,j,k; DELAY(2); k=0b01000000; for(i=0;i<8;i++) { LCD_WRITE(k,COM); //寫(xiě)地址,每個(gè)字符為8個(gè)字節(jié)數(shù)據(jù)(5x8點(diǎn)陣) for(j=0;j<8;j++) //對(duì)每個(gè)數(shù)據(jù)的行循環(huán),共8行 LCD_WRITE(DDD[i][j],DATA); k+=8; }}2.4顯示歡迎語(yǔ)constcharWelcomeWord1[11]//WelcometoconstcharWelcomeWord2[15]//ElectricClockconstcharIDCode1[10]//011200715constcharIDCode2[10]//BestwishvoidDISP_Welcome(void){signedchari,j,k,l; LCD_WRITE(0b00000001,COM);//清屏顯示,光標(biāo)歸零 DELAY(30); LCD_WRITE(LINE1,COM); for(i=0;i<10;i++) LCD_WRITE(WelcomeWord1[i],DATA);//顯示W(wǎng)elcometo LCD_WRITE(LINE2,COM); for(i=0;i<14;i++)LCD_WRITE(WelcomeWord2[i],DATA);//顯示ElectricClock DELAY(500); LCD_WRITE(0b00000001,COM);//清屏顯示,光標(biāo)歸零 DELAY(30); for(i=0,k=0;i<16;i++) { LCD_WRITE(LINE1,COM); for(l=i;l>0;l--) LCD_WRITE('',DATA); if(i>7)k++; for(j=0;j<9-k;j++) LCD_WRITE(IDCode1[j],DATA);//顯示011200715,并右移出屏幕 DELAY(100);//調(diào)節(jié)數(shù)值可調(diào)節(jié)移動(dòng)移動(dòng)速度 } LCD_WRITE(0b00000001,COM);//清屏顯示,光標(biāo)歸零 DELAY(30); for(i=0,k=0;i<25;i++) { LCD_WRITE(LINE2,COM); for(l=16-i;l>0;l--) LCD_WRITE('',DATA); if(i>16)k++; for(j=k;j<9;j++) LCD_WRITE(IDCode2[j],DATA);//顯示BestWish,并左移出屏幕 for(l=i-9;l>0;l--) LCD_WRITE('',DATA); DELAY(100); } LCD_WRITE(0b00000001,COM);//清屏顯示,光標(biāo)歸零 DELAY(30);}2.5時(shí)間及溫度顯示各時(shí)間單位、自定義字符、其他符號(hào)位置如圖所示。其中,星期由英文單詞縮寫(xiě)表示,分別為Sat、Sun、Mon、Tue、Wed、Thu、Fri。自定義字符顯示函數(shù)(以自定義的第1至4個(gè)字符為例): for(i1=0;i1<4;i1++) { LCD_WRITE(LINE1+i1,COM); LCD_WRITE(0x00+i1,DATA); }時(shí)間顯示函數(shù)(以“年”為例): LCD_WRITE(YEAR,COM);//寫(xiě)命令 LCD_WRITE('2',DATA); LCD_WRITE('0',DATA); LCD_WRITE(((TIME[6]&0xF0)>>4)+0x30,DATA);//取“年”的高四位 LCD_WRITE((TIME[6]&0x0F)+0x30,DATA);//取“年”的低四位 2.6中斷設(shè)置 WPUB=0xFF;//B口設(shè)為弱上拉 TRISB=0x0F;//先將B口低4位設(shè)為輸入 IOCB=0x0F;//B口低4位電平變化中斷 PORTB=0x0F;//先讓B口高4為輸出低電平 if(RB0==0) //若RB0為0,檢測(cè)到第一行有按鍵按下{H=0;PORTB=0b11111110;}//H=0,代表第一行有按鍵按下,然后將有按鍵按下的那行的RB值拉低if(RB1==0)//以下的意思同上{H=1;PORTB=0b11111101;} if(RB2==0) {H=2;PORTB=0b11111011;} if(RB3==0) {H=3;PORTB=0b11110111;} TRISB=0xF0;//將RB口高4位設(shè)為輸入 IOCB=0xF0;//B口高4位電平變化中斷 PORTB=0xF0;//讓B口高4為輸出高電平 if(RB4==0)//若RB4=0,說(shuō)明第一列有按鍵按下,L=0;//L=0,代表第一列 if(RB5==0)//以下意思同上L=1; if(RB6==0) L=2; if(RB7==0)L=3;TRISB=0x0F;//掃描一次按鍵完畢將RB口重新設(shè)為低4位輸入PORTB=0x0F;//重新設(shè)RB口高4位輸出低電平 IOCB=0x0F;//B口低4位電平變化中斷 RBIF=0;//清電平變化中斷標(biāo)志2.6.1按鍵功能說(shuō)明0123456789前移后移1:時(shí)間顯示2:鬧鐘設(shè)置3:返回默認(rèn)模式待開(kāi)發(fā)1:鬧鐘開(kāi)啟2:鬧鐘關(guān)閉確認(rèn)鍵受篇幅所限,省略KEY_Number[H][L]值為10、11即前移后移鍵所對(duì)應(yīng)的流程圖,其主要?jiǎng)幼鳛橹梦灰苿?dòng)標(biāo)志位FLAG.Move,并賦值對(duì)應(yīng)的前移后移標(biāo)志位FLAG.Front_Back。 相應(yīng)程序如下:switch(KEY_Number[H][L]) {case(10):FLAG.Move=1;iplus=1;FLAG.Front_Back=1;break;//前移光標(biāo)case(11):FLAG.Move=1;iplus=1;FLAG.Front_Back=0;break;//后移光標(biāo) case(12): FLAG.Affirm_Alarm=1; if(N1<4) {FLAG.CA_Change=1; N1+=1; }//FLAG.CA_Change=1時(shí)鐘顯示和鬧鐘修改模式開(kāi)啟 if((N1==2)&&(FLAG.Alarm==0))//時(shí)間顯示修改 {FLAG.Alarm=1; R1=LCD_READ(); LCD_WRITE(0b00000001,COM);//清屏顯示,光標(biāo)歸零 DELAY(30); } if((N1==3)&&(FLAG.Alarm==1))//鬧鐘設(shè)置修改 {FLAG.Alarm=0; KEY.SET=4; R1=LCD_READ(); LCD_WRITE(0b00000001,COM);//清屏顯示,光標(biāo)歸零 DELAY(30); } if((FLAG.CA_Change==1)&&(N1==4)) {FLAG.CA_Change=0;N1=0;FLAG.Alarm=1;}//FLAG.CA_Change=1時(shí)鐘顯示和鬧鐘修改模式關(guān)閉 break; case(14):if(FLAG.On_Off==0)FLAG.On_Off=1;//鬧鐘開(kāi)啟 elseFLAG.On_Off=0;//鬧鐘關(guān)閉 break; case(15)://確認(rèn)鍵 if(((FLAG.CA_Change==1)&&(FLAG.Affirm==0)))//時(shí)間顯示模式下的確認(rèn)鍵 FLAG.Affirm=1;//FLAG.Affirm=1確認(rèn)修改 break; }2.6.2按鍵修改說(shuō)明程序以修改“年“為例:case(1)://年份設(shè)置 if(FLAG.Affirm==1) { TIME[6]=KEY1*16+KEY2; BCD1(TIME[6]); DS1307_WRITE(0x06,TIME[6]); LCD_WRITE(YEAR+2,COM); LCD_WRITE(SW+0x30,DATA); LCD_WRITE(YEAR+3,COM); LCD_WRITE(GW+0x30,DATA); FLAG.Affirm=0; }2.6.3光標(biāo)移動(dòng)說(shuō)明以時(shí)間修改前移為例:if((FLAG.Front_Back==1)&&(FLAG.Move==1))//時(shí)間顯示模式下前移光標(biāo) {KEY.SET-=1;//KEY.SET代表光標(biāo)對(duì)應(yīng)時(shí)間位置 if(KEY.SET==0)//使循環(huán)移動(dòng) KEY.SET=7; FLAG.Move=0; }2.7蜂鳴器設(shè)置音樂(lè)查閱資料得中音do為523.3Hz,Re為587.3Hz,Mi為659.3Hz,So為784Hz,低音La為440Hz,Si為493.9Hz,經(jīng)計(jì)算得對(duì)應(yīng)PWM設(shè)置的寫(xiě)入值。連續(xù)調(diào)用不同頻率的PWM可得樂(lè)音,即鬧鐘鈴聲。以Do為例:voidPWM1(void){ TRISC2=0; //RC2/CCP1為輸出 PR2=238; //周期為1ms,X=0b0010010110 CCPR1L=0b01111101;//高八位放入CCPR1L CCP1CON=0b00001100; //PWM模式,低二位為10 T2CON=0b00001101; //TMR2預(yù)分頻1:16,開(kāi)始工作}3、設(shè)計(jì)結(jié)果歡迎界面:時(shí)間顯示模式:時(shí)間修改模式(修改時(shí)對(duì)應(yīng)位會(huì)全黑閃爍):鬧鐘關(guān)閉:鬧鐘開(kāi)啟:4、設(shè)計(jì)體會(huì)經(jīng)過(guò)近一個(gè)學(xué)期的學(xué)習(xí),雖然知道距離真正掌握單片機(jī)程序設(shè)計(jì)的技術(shù)還要有很長(zhǎng)的實(shí)踐和經(jīng)驗(yàn)積累過(guò)程,但在課堂和完成課程設(shè)計(jì)的過(guò)程中學(xué)到的單片機(jī)知識(shí)已經(jīng)讓我受益匪淺。平時(shí)課程的實(shí)驗(yàn)主要都是單一模塊,如TMR,AD等,但在課程設(shè)計(jì)中,則要求我們能綜合運(yùn)用各種

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論