基于51單片機的自動打鈴系統_第1頁
基于51單片機的自動打鈴系統_第2頁
基于51單片機的自動打鈴系統_第3頁
已閱讀5頁,還剩22頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

大連民族學院2007級電子信息工程專業單片機系統課程設計報告機電信息工程學院單片機系統課程設計報告系:班級:

電子信息工程系電子信息工程072班自動打鈴系統設計張錫斌仇龍佳劉忠富于為民完成日期:2010531日大連民族學院2007級電子信息工程專業單片機系統課程設計報告目 錄一、設計任務和性能指標 2設計任務 2性能指標 2二、設計方案 2三、系統硬件設置 3、單片機最小系統 3時鐘電路DS1302 4、顯示電路的設計 5、鍵盤接口的設計 5打鈴電路的設計 6四、系統軟件設計 7程序流程圖 7主程序設計 10顯示子程序的設計 11五、調試及性能分析 12調試步驟 12性能分析 12六、心得體會 12參考文獻 13附錄1系統硬件電路圖 14附錄2 程序清單 15大連民族學院2007級電子信息工程專業單片機系統課程設計報告大連民族學院2007級電子信息工程專業單片機系統課程設計報告PAGEPAGE3一、設計任務和性能指標設計任務用單片機器件為主體,設計一臺自動打鈴系統。(一)基本要求1、基本計時和顯示功能(用12小時制顯示)。包括上下午標志,時、分的數字顯示,秒信號指示。2、能設置當前時間(含上、下午,時,分)。36:0052秒、5525用小喇叭播放,凡是用到鈴聲功能的均按此處理。(二)發揮部分1、增加整點報時功能,整點時響鈴5秒,要求有控制啟動和關閉功能。2、增加調整起床鈴、熄燈鈴時間的功能。347.305秒。4、特色和創新自選。性能指標時鐘:上下午(1、時(2(2校對鍵:確認鍵/設置鍵、右移鍵/滅鈴鍵、加鍵、減鍵響鈴:蜂鳴器二.設計方案二、設計方案示模塊、鍵掃描接口電路共四個模塊組成,電路系統構成框圖如圖1.1所示通過內部定時產生中斷,從而驅動電鈴打鈴。電路系統構成框圖如圖1.1所示。主控51AT89C5280C51Flash8COMS微處理芯片,市場應用最多。DALLASRAM的DS1302DS1302作為主要計時芯片、可以做到計時準確。(2.5~5.5V2.5V時300nA)下繼續計時,并可編程選擇多種充電電流對后備電源進行慢速DS12887DS1302。電源AT89C51CPU電鈴1.1硬件電路設計511100ms產生一次中斷,利用軟100ms101S信號,這時1。同理,對分單元時單元和上下午單元計數,從而產生秒,分,時,LED的顯示。鍵為功能鍵,另外三個做控制鍵。按一下1234412鍵強制滅鈴。三、系統硬件設置單片機最小系統單片機最小應用系統的設計電路原理圖,如圖3.1所示。本次設計我們選用了AT89C52單片機。該單片機要求電源電壓為+5V,所以40號引腳接+5V電源,20號腳接地。因為AT89C52單片機的片內ROM為4KB,128位RAM,根據初步分析,本設計程序應該小于4KB,故無須外擴的ROM,所以單片機應直接訪問片內程序存儲器,單片機的31號腳接高電平。AT89C52單片機是一種時序邏輯電路,必須有脈沖信號才能正常工作,而時鐘脈沖是由振蕩電路提供的時鐘可以由內部方式或外部方式產生內部振蕩方式只要接上兩個微調電容和一個晶振即可,其中微調電容選用33pF其作用是穩定振蕩頻率,快速起振。本次畢業設計我們采用內部振蕩方式 ,外接晶振為11.0592MHz,振蕩周期=1/11.0592μs,時鐘周期=2/11.0592μs,機器周期=12/11.0592μs,指令周期=1~4μs。AT89C52CPUMCS-51大連民族學院2007級電子信息工程專業單片機系統課程設計報告10μF8.2K電阻組成,T=RC,T=10μf×8.2k,T=82ms10ms82ms以上的高電平就能使單片機有效復位圖3.1單片機最小應用系統DS1302性能特性31*8I/O電壓工作范圍;2.5VRAM數據讀/3DS130231RAM,它經過一個簡單的24HAM/PM12HCPU進行同眇通信,并可采RAM數據。DS1302有主電源/后備電源雙電源引腳;工作原理DS1302RST8位地址和命令裝入移位寄存器,數據在SCLK的上升沿被輸入,無論是讀周期還8408888248字節數。32RAM004大連民族學院2007級電子信息工程專業單片機系統課程設計報告序電先的8個寄存器。但是當以多個字節寫RAM時,為了傳送數據不必寫所有31字節,不管是否寫了全部31字節,所寫的每個字節都將傳送至RAM。71DS13020時時鐘將開始啟動。8051DS13023.2,其中,PxI/O口,DS13028051行口不完全一致,因此,需要在TXD的輸出端加反相器,另外,接收數據時,行口的接收方式接收,I/O口進行數據接收.DS130232.768KHZ6PFVcc1Vcc28051

PXTXDRXD

DS1302RSTSCLKI/O X2圖3.2 DS1302寫數據的程序框圖顯示電路的設計顯示部分采用普通的共陽數碼管顯示,采用動態掃描,以減少硬件電路,數碼管分別為上下午,十時,時,十分,分顯示,顯示時采用串行口輸出控制數碼管,其中P2.2~P2.4口控制數碼管的位選,低電平數碼管顯示,動態掃描顯示中單片機P0口輸出數碼管的段碼。鍵盤接口的設計圖3.4 鍵盤電路5大連民族學院2007級電子信息工程專業單片機系統課程設計報告43.4P1P1.0P1.3P1所以該圖中上拉電阻可以省去。四個按鍵中,S1為數據+1鍵,S2為數據-1鍵,S3為數據選擇鍵,S4為強制打鈴或者強制關閉鍵。打鈴電路的設計3.5P3.7P3.71KHz的方波,使得蜂PNP三極管作用是電流放大,以保證蜂鳴器能正常發出聲音。圖3.5 打鈴電路6大連民族學院2007級電子信息工程專業單片機系統課程設計報告大連民族學院2007級電子信息工程專業單片機系統課程設計報告PAGEPAGE13四、系統軟件設計程序流程圖開始開始初始化參數設置調用鍵盤子程序調用顯示子程序調用控制子程序主程序流程圖開始開始保護現場1N=0?1N=60?1N=60?1NN退出定時中斷程序流程圖開始開始向緩沖區放數指向緩沖區首地址關顯示AB1ms顯示下一位六位顯示完返回顯示程序流程圖voidmain(){ucharNowKey;ucharBeforKey=0xff;ucharKeyCount=0;uchari=0;AlarmSingal=0;RayFlag=1;RayFlag2=1;TMOD=0x10;//設置T1EA=1;ET1=1;TH1=0x3c;TL1=0xb0;TR1=1;while(1){D_Scan(TimeData,0);//動態掃描//按鍵控制if(KeyCount==2){KeyCount=0;NowKey=GetKey();if(NowKey!=BeforKey){switch(NowKey){case1:case2:default:}}

TimeSet();break;AlarmSingal=0;break;break;BeforKey=NowKey;}elseKeyCount++;}}顯示子程序的設計voidD_Scan(uchar*ShowAddress,ucharFlagBit){ucharShowBit;ucharShow;for(ShowBit=0;ShowBit<5;ShowBit++){if(FlagBit!=5){switch(ShowBit){case0:Show=BCD_to_Text((*ShowAddress)%10);break;case1:Show=BCD_to_Text((*ShowAddress)/10);break;case2:Show=BCD_to_Text((*(ShowAddress+1))%10);break;case3:Show=BCD_to_Text((*(ShowAddress+1))/10);break;case4:Show=BCD_to_Text((*(ShowAddress+2))%10);break;}}P2=0xff;switch(FlagBit){case0:P0=Show;break;case1://設分閃動if(RayFlag2&&(ShowBit==0||ShowBit==1))P0=0x40;elseP0=Show;break;case2://設時閃動if(RayFlag2&&(ShowBit==2||ShowBit==3))P0=0x40;elseP0=Show;break;case3://設上下午閃動if(RayFlag2&&ShowBit==4)P0=0x40;elseP0=Show;break;}P2=GetClockBit(ShowBit);Delay(1);}}五、調試及性能分析調試步驟性能分析計時器DS1302使系統更加方便。六、心得體會本系統被子廣泛用企事業單位,設計比較簡單。經過一學期的學習,使我對單,.我感謝老師,課程設計加深了學生對所學課程理論的理用能力。參考文獻〔1〕嚴仲興,王熔熔:《單片機原理與應用》,中國計劃出版社,2001.7〔2〕江力:《單片機原理與應用技術》,清華大學出版社,2006.5〔3C51windows〔4〔5〕康華光:《電子技術基礎:模擬部分》,北京高等教育出版社,1999.6〔6〕江太輝MCS-51劉海寬單片機實驗與實踐教程東南大學出版社20091楊易德模擬電路重慶大學出版社200610廖先蕓電子技術實踐與訓練高等教育出版社20056郭勇EDA技術基礎機械工業出版社20091大連民族學院2007級電子信息工程專業單片機系統課程設計報告附錄1系統硬件電路圖14大連民族學院2007級電子信息工程專業單片機系統課程設計報告大連民族學院2007級電子信息工程專業單片機系統課程設計報告PAGEPAGE26附錄2 程序清單#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharucharTimeData[]={0,0,0};//時鐘數據ucharsec;//秒uchari;ucharcounter=0;//時鐘變量ucharRayFlag1=0;//sbitRayFlag=P3^3;//秒閃sbitRayFlag2=P3^2;//秒閃標志2sbitAlarmSingal=P3^7;//鬧鈴信號ucharcodeBellData[]={0,0,0,0,0,0,0,0,0,1};//上下午標志ucharcodeBellDataH[]={6,7,8,8,9,9,10,10,11,10};//時ucharcodeBellDataL[]={0,30,20,30,20,40,30,40,30,30};//分ucharBCD_to_Text(ucharData);ucharGetClockBit(ucharShowBit);voidDelay(uintcount);voidD_Scan(uchar*ShowAddress,ucharFlagBit);ucharGetKey();voidTimeSet();// 主程序 voidmain(){ucharNowKey;ucharBeforKey=0xff;ucharKeyCount=0;uchari=0;AlarmSingal=0;RayFlag=1;RayFlag2=1;TMOD=0x10;//設置EA=1;ET1=1;TH1=0x3c;TL1=0xb0;TR1=1;while(1){D_Scan(TimeData,0);//動態掃描//按鍵控制if(KeyCount==2){KeyCount=0;NowKey=GetKey();if(NowKey!=BeforKey){switch(NowKey){case1:case2:default:}}

TimeSet();break;AlarmSingal=0;break;break;BeforKey=NowKey;}elseKeyCount++;}}//DS1302#ifndef_DS1302_H_#define_DS1302_H_#defineTime_12_Hour0x00//24時制控制#defineTime_Start0x00//開始走時#defineTime_Stop0x80//停止走時#defineDS1302_SECOND0x80 //DS1302各寄存器操作命令定義#defineDS1302_MINUTE0x82#defineDS1302_HOUR0x84#defineDS1302_WEEK0x8A#defineDS1302_DAY0x86#defineDS1302_MONTH0x88#defineDS1302_YEAR0x8C#defineDS1302_WRITE0x8E#defineDS1302_POWER #defineBCD2DEC(X) (((X&0x70)>>4)*10+(X&0x0F))//BCD進制的宏#defineDEC2BCD(X) ((X/10)<<4|(X%10)) //用于將十進制轉成BCD碼的宏sbitDS1302_CLK=P1^5;//sbitDS1302_IO=P1^6;//sbitDS1302_RST=P1^4;//sbitACC0=ACC^0;sbitACC7=ACC^7;typedefstruct SYSTEMTIME 制{

//定義的時間類型結構體,全部數為十進unsignedcharSecond;unsignedcharMinute;unsignedcharHour;unsignedcharWeek;unsignedcharDay;unsignedcharMonth;unsignedcharYear;}SYSTEMTIME;//實時時鐘寫入一字節(內部函數)voidDS1302InputByte(unsignedchard){unsignedchari;ACC=d;for(i=8;i>0;i--){DS1302_IOACC0; //相當于匯編中的DS1302_CLK=1;DS1302_CLK=ACC=ACC>>1;}}//實時時鐘讀取一字節(內部函數)unsignedcharDS1302OutputByte(void){unsignedchari;for(i=8;i>0;i--){ACC=ACC>>1; //相當于匯編中的ACC7=DS1302_IO;DS1302_CLK=1;DS1302_CLK=0;}return(ACC);}//DS1302,ucAddr:DS1302地址,ucData:要寫的數據voidWrite1302(unsignedcharucAddr,unsignedcharucDa){DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr); //地址,命令DS1302InputByte(ucDa); //寫1Byte數DS1302_CLK=1;DS1302_RST=0;}//讀取DS1302某地址的數據unsignedcharRead1302(unsignedcharucAddr){unsignedcharucData;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr|0x01); //地址,命令ucData=DS1302OutputByte(); //讀1Byte數DS1302_CLK=1;DS1302_RST=0;return(ucData);}//讀取時間函數voidDS1302_GetTime(SYSTEMTIME*Time){unsignedcharReadValue;ReadValue=Read1302(DS1302_SECOND);Time->Second=BCD2DEC(ReadValue&0x7F);ReadValue=Read1302(DS1302_MINUTE);Time->Minute=BCD2DEC(ReadValue);ReadValue=Read1302(DS1302_HOUR);Time->Hour=BCD2DEC(ReadValue&0x7F);ReadValue=Read1302(DS1302_DAY);Time->Day=BCD2DEC(ReadValue);ReadValue=Read1302(DS1302_WEEK);Time->Week=BCD2DEC(ReadValue);ReadValue=BCD2DEC(DS1302_MONTH);Time->Month=BCD2DEC(ReadValue);ReadValue=Read1302(DS1302_YEAR);Time->Year=BCD2DEC(ReadValue);}//設置時間函數voidDS1302_SetTime(SYSTEMTIME*Time){Write1302(DS1302_WRITE,0x00); //關閉寫保護Write1302(DS1302_YEAR,DEC2BCD(Time->Year));Write1302(DS1302_MONTH,DEC2BCD(Time->Month));Write1302(DS1302_WEEK,DEC2BCD(Time->Week));Write1302(DS1302_DAY,DEC2BCD(Time->Day));Write1302(DS1302_HOUR,DEC2BCD(Time->Hour)|Time_12_Hour);Write1302(DS1302_MINUTE,DEC2BCD(Time->Minute));Write1302(DS1302_SECOND,DEC2BCD(Time->Second)|Time_Start);Write1302(DS1302_WRITE,0x80); //打開寫保護}//初始化DS1302voidDS1302_Initial(void){Write1302(DS1302_WRITE,0x00); //關閉寫保護Write1302(DS1302_SECOND,Time_Stop);//停止計時Write1302(DS1302_HOUR,Time_12_Hour);//24時制Write1302(DS1302_POWER,0xA6); //單二極管,4K電阻充Write1302(DS1302_WRITE,0x80); //打開寫保護}#endif//T1中斷,產生時鐘voidTimer1(void)interrupt3using1{TH1=0x3c;TL1=0xb0;if(counter%10==0){RayFlag2=~RayFlag2;if(RayFlag1)RayFlag=0;elseRayFlag=~RayFlag;}if(counter==20){counter=0;if(sec==59){sec=0;if(TimeData[0]==59){TimeData[0]=0;if(TimeData[1]==11){TimeData[1]=0;if(TimeData[2]==1){TimeData[2]=0;}elseTimeData[2]++;//上下午}elseTimeData[1]++;//時}elseTimeData[0]++;//分}elsesec++;//秒for(i=0;i<10;i++){if((BellData[i]==TimeData[2])&&(BellDataH[i]==TimeData[1]) (BellDataL[i]==TimeData[0])){if(i==0||i==9){if(sec==0){AlarmSingal=0;}if(sec==5){AlarmSingal=1;}if(sec==7){AlarmSingal=0;}if(sec==12){AlarmSingal=1;}}else{AlarmSingal=0;if(sec==5){AlarmSingal=1;}}break;}elseAlarmSingal=1;}}elsecounter++;}//BCD碼轉換成字形碼的程序ucharBCD_to_Text(ucharData){switch(Data){case0:return0xC0;case1:return0xF9;case2:return0xA4;case3:return0xB0;case4:return0x99;case5:return0x92;case6:return0x82;case7:return0xF8;case8:return0x80;case9:return0x90;}}//得到位地址的程序ucharGetClockBit(ucharShowBit){switch(ShowBit){case0:return0xfe;case1:return0xfd;case2:return0xfb;case3:return0xf7;case4:return0xef;}}//延時count個ms的程序voidDelay(uintcount){uinti,j;for(i=count;i>0;i--)for(j=100;j>0;j--);}//動態掃描的程序voidD_Scan(uchar*ShowAddress,ucharFlagBit){ucharShowBit;ucharShow;for(ShowBit=0;ShowBit<5;ShowBit++){if(FlagBit!=5){switch(ShowBit){case0:Show=BCD_to_Text((*ShowAddress)%10);break;case1:Show=BCD_to_Text((*ShowAddress)/10);break;case2:Show=BCD_to_Text((*(ShowAddress+1))%10);break;case3:Show=BCD_to_Text((*(ShowAddress+1))/10);break;case4:Show=BCD_to_Text((*(ShowAddress+2))%10);break;}}P2=0xff;switch(FlagBit){case0:P0=Show;break;case1://設分閃動if(RayFlag2&&(ShowBit==0||ShowBit==1))P0=0x40;elseP0=Show;break;case2://設時閃動if(RayFlag2&&(ShowBit==2||ShowBit==3))P0=0x40;elseP0=Show;break;case3://設上下午閃動if(RayFlag2&&ShowBit==4)P0=0x40;elseP0=Show;break;}P2=GetClockBit(ShowBit);Delay(1);}}//得到鍵盤值的程序ucharGetKey(){ucharp;p=P1&0x0f;switch(p){case0x0f:return0;case0x0e:return1;case0x0d:return2;case0x0b:return3;case0x07:return4;}}// 時間設置的程序 voidTimeSet(){ucharS_Flag=1;ucharM_Flag=1;ucharH_Flag=1;ucharcount1=0x40;//無操作時的時間控制ucharcount2=0xff;//無操作時的時間控制ucharNowKey=0xff;ucharBeforKey=0xff;ucharKeyCount=0;ucharFlagBit=1;ucharuint a=0;LS_TimeData[2]=TimeData[2];LS_TimeData[1]=Ti

溫馨提示

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

評論

0/150

提交評論