




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
目錄1.引言 21.1設計任務與規(guī)定 21.2數(shù)字鐘得實用價值和理論意義 21.3設計所用器件簡介 31.3.1單片機簡介 31.3.21602LCD基本參數(shù)及引腳功能 32.設計內容 73.程序設計及硬件電路 83.1原理圖(protues) 83.2原理圖(protel) 84.仿真成果 95.收獲、體會和建議 116.參照文獻 117.附:源程序 121.引言近年來隨著計算機在社會領域滲入和大規(guī)模集成電路發(fā)展,單片機應用正在不斷地走向進一步,由于它具備功能強,體積小,功耗低,價格便宜,工作可靠,使用以便等特點,因而特別適合于與控制關于系統(tǒng),越來越廣泛地應用于自動控制,智能化儀器,儀表,數(shù)據(jù)采集,軍工產品以及家用電器等各個領域,單片機往往是作為一種核心部件來使用,在依照詳細硬件構造,以及針對詳細應用對象特點軟件結合,以作完善。單片機模塊中最常用是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術實現(xiàn)時、分、秒計時裝置,與機械式時鐘相比具備更高精確性和直觀性,且無機械裝置,具備更更長使用壽命,因而得到了廣泛使用。數(shù)字鐘是采用數(shù)字電路實現(xiàn)對時,分,秒數(shù)字顯示計時裝置,廣泛用于個人家庭,車站,碼頭辦公室等公共場合,成為人們尋常生活中不可少必須品,由于數(shù)字集成電路發(fā)展和石英晶體振蕩器廣泛應用,使得數(shù)字鐘精度,遠遠超過老式鐘表,鐘表數(shù)字化給人們生產生活帶來了極大以便,并且大大地擴展了鐘表原先報時功能。諸如定期自動報警、準時自動打鈴、時間程序自動控制、定期廣播、自動起閉路燈、定期開關烘箱、通斷動力設備、甚至各種定期電氣自動啟用等,所有這些,都是以鐘表數(shù)字化為基本。因而,研究數(shù)字鐘及擴大其應用,有著非?,F(xiàn)實意義。1.1設計任務與規(guī)定1.運用AT89C51定期器設計一種電子時鐘;2.顯示格式位“XXXXXX”,從左向右分別是:時、分、秒;3.顯示某些用1602LCD顯示屏;4.具備四個調節(jié)鍵K0,K1,K2,K3;5.按下相應鍵可以調節(jié)時,分,秒;6.調節(jié)到哪一位哪一位閃爍;7.在1602上方顯示“年,月,日,星期”。1.2數(shù)字鐘得實用價值和理論意義數(shù)字鐘是采用數(shù)字電路實現(xiàn)對時,分,秒數(shù)字顯示計時裝置,廣泛用于個人家庭,車站,碼頭辦公室等公共場合,成為人們尋常生活中不可少必須品,由于數(shù)字集成電路發(fā)展和石英晶體振蕩器廣泛應用,使得數(shù)字鐘精度,遠遠超過老式鐘表,鐘表數(shù)字化給人們生產生活帶來了極大以便,并且大大地擴展了鐘表原先報時功能。諸如定期自動報警、準時自動打鈴、時間程序自動控制、定期廣播、自動起閉路燈、定期開關烘箱、通斷動力設備、甚至各種定期電氣自動啟用等,所有這些,都是以鐘表數(shù)字化為基本。因而,研究數(shù)字鐘及擴大其應用,有著非?,F(xiàn)實意義。1.3設計所用器件簡介1.3.1單片機簡介MCS51是指由美國INTEL公司(對了,就是大名鼎鼎INTEL)生產一系列單片機總稱,這一系列單片機涉及了好些品種,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型產品,該系列其他單片機都是在8051基本上進行功能增、減、變化而來,因此人們習慣于用8051來稱呼MCS51系列單片機,而8031是前些年在國內最流行單片機,因此諸多場合會看到8031名稱。INTEL公司將MCS51核心技術授權給了諸多其他公司,因此有諸多公司在做以8051為核心單片機,固然,功能或多或少有些變化,以滿足不同需求,其中89C51就是這幾年在國內非常流行單片機,它是由美國ATMEL公司開發(fā)生產。后來咱們將用89C51、89S51來完畢一系列實驗。MCS-51系列單片機MCS-51系列單片機分為兩大系列,即51子系列與52子系列。51子系列:基本型,依照片內ROM配備,相應芯片為8031、8051、8751、895152子系列:增強型,依照片內ROM配備,相應芯片為8032、8052、8752、8952這兩大系列單片機重要硬件特性如下表:上表中可以看到,8031、8031、8032、80C32片內是沒有ROM,相應著上表看,咱們可以發(fā)現(xiàn),51系列單片機RAM大小為128B,52系列RAM大小為256B,51系列計數(shù)器為兩個16位,52系列計數(shù)器為三個16位計數(shù)器。51系列中斷源為5個,52系列中斷源為6個。1.3.21602LCD基本參數(shù)及引腳功能1602LCD分為帶背光和不帶背光兩種,基控制器大某些為HD44780,帶背光比不帶背光厚,與否帶背光在應用中并無差別,兩者尺寸差別如下圖10-54所示:圖10-541602LCD尺寸圖1602LCD重要技術參數(shù):顯示容量:16×2個字符芯片工作電壓:4.5—5.5V工作電流:2.0mA(5.0V)模塊最佳工作電壓:5.0V字符尺寸:2.95×4.35(W×H)mm引腳功能闡明1602LCD采用原則14腳(無背光)或16腳(帶背光)接口,各引腳接口闡明如表10-13所示:編號符號引腳闡明編號符號引腳闡明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選取12D5數(shù)據(jù)5R/W讀/寫選取13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負極引腳接口闡明表第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示屏對比度調節(jié)端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一種10K電位器調節(jié)對比度。第4腳:RS為寄存器選取,高電平時選取數(shù)據(jù)寄存器、低電平時選取指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負極。1602LCD指令闡明及時序1602液晶模塊內部控制器共有11條控制指令,如表所示:序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關控制0000001DCB5光標或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫數(shù)據(jù)內容11從CGRAM或DDRAM讀數(shù)11讀出數(shù)據(jù)內容控制命令表1602液晶模塊讀寫操作、屏幕和光標操作都是通過指令編程來實現(xiàn)。(闡明:1為高電平、0為低電平)指令1:清顯示,指令碼01H,光標復位到地址00H位置。指令2:光標復位,光標返回到地址00H。指令3:光標和顯示模式設立I/D:光標移動方向,高電平右移,低電平左移S:屏幕上所有文字與否左移或者右移。高電平表達有效,低電平則無效。指令4:顯示開關控制。D:控制整體顯示開與關,高電平表達開顯示,低電平表達關顯示C:控制光標開與關,高電平表達有光標,低電平表達無光標B:控制光標與否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位S/C:高電平時移動顯示文字,低電平時移動光標。指令6:功能設立命令DL:高電平時為4位總線,低電平時為8位總線N:低電平時為單行顯示,高電平時雙行顯示F:低電平時顯示5x7點陣字符,高電平時顯示5x10點陣字符。指令7:字符發(fā)生器RAM地址設立。指令8:DDRAM地址設立。指令9:讀忙信號和光標地址BF:為忙標志位,高電平表達忙,此時模塊不能接受命令或者數(shù)據(jù),如果為低電平表達不忙。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。與HD44780相兼容芯片時序表如下:讀狀態(tài)輸入RS=L,R/W=H,E=H輸出D0—D7=狀態(tài)字寫指令輸入RS=L,R/W=L,D0—D7=指令碼,E=高脈沖輸出無讀數(shù)據(jù)輸入RS=H,R/W=H,E=H輸出D0—D7=數(shù)據(jù)寫數(shù)據(jù)輸入RS=H,R/W=L,D0—D7=數(shù)據(jù),E=高脈沖輸出無2.設計內容ATCATC89C51單片機lcd1602顯示屏按鍵K0K1K2K3位驅動3.程序設計及硬件電路程序流程圖3.1原理圖(protues)3.2原理圖(protel)4.仿真成果上電后按下K0開始運營:按下K3秒閃爍按下K1閃爍減一(05調到04)按下K2加一(04調到05)依照按下K0次數(shù)可以變化閃爍位置進行分,時,年,月,日,星期調節(jié)調節(jié)分調節(jié)時調節(jié)年調節(jié)月調節(jié)日調節(jié)星期5.收獲、體會和建議單片機數(shù)字鐘可以說是一種較小系統(tǒng),開始時咱們覺得通過C語言較容易實現(xiàn),的確,只實現(xiàn)一種可以正常走時并且可以校時數(shù)字鐘是比較容易。但咱們想錯了,畢竟是第一次從總體角度來考慮地完畢一種小系統(tǒng),好多實際性問題咱們沒有考慮,因此導致咱們最后設計數(shù)字鐘精度不高,并且存在好多問題,固然問題多了對咱們來說是好事,這樣咱們在解決更多問題時學會更多解決問題辦法,對咱們也算是長長經驗吧。通過這次對數(shù)字鐘設計,讓我理解了設計電路程序,也讓我理解了關于數(shù)字鐘原理與設計理念,要設計一種完整電路總要通過多次失敗才干成功,在設計中,遇到了許多匪夷所思問題,一種人就是想破腦子也做不出來,這時候,就需要去詢問教師、和同窗探討,共同解決浮現(xiàn)問題,也許就是由于教師一句提示、同窗探討中就會豁然開朗。。從這次設計中我也覺得自己還對單片機功能理解只是個皮毛,單片機強大功能還等著咱們去開發(fā)。通過這次設計,不但使我學到了知識,讓我對電路設計有了大概理解;另一方面,還體會到了團隊精神。綜上所述,這次設計是成功。6.參照文獻1楊文龍.單片機原理及應用.西安:西安電子科技大學出版社,19932李朝青.單片機原理及接口技術.北京:北京航空航天大學出版社,3胡漢才.單片機原理及系統(tǒng)設計.北京:清華大學出版社,4楊忠煌,黃博俊,李文昌.單芯片8051實務與應用.北京:中華人民共和國水利水電出版社,7.附:源程序#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharcodetable1[]={"-00-00-MON"};//星期一MON星期二TUE星期三WED星期四THU星期五FRI星期六SAT星期天SUNucharcodetable2[]={"00:00:00"};ucharcodetable[]={'0','1','2','3','4','5','6','7','8','9'};ucharnum,count,miao,fen,xiao,week,day,month,year,shi,ge,flag,num1;sbitLCD_RW=P3^7;sbitLCD_RS=P3^5;sbitLCD_E=P3^4;sbitk1=P1^0;//選取sbitk2=P1^1;//增長sbitk3=P1^2;//減少sbitk4=P1^3;//開始voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}/////////////////////////////////////////////////////////////////////////////////////////lcd顯示voidinit(void);//初始化函數(shù)voidwrite_com(ucharcommand);//寫指令函數(shù)voidwrite_date(uchardat);//寫數(shù)據(jù)函數(shù)voidLCD_disp_char(ucharx,uchary,uchardat);//在某個屏幕位置上顯示一種字符,X(0-16),y(1-2)//voidLCD_check_busy(void);//檢查忙函數(shù)。我沒用到此函數(shù),由于通過率極低。voiddelay_n40us(uintn);//延時函數(shù)//********************************//*******初始化函數(shù)***************voidinit(void){write_com(0x38);//設立8位格式,2行,5x7write_com(0x0c);//整體顯示,關光標,不閃爍write_com(0x06);//設定輸入方式,增量不移位write_com(0x01);//清除屏幕顯示delay_n40us(100);//實踐證明,用for循環(huán)200次就能可靠完畢清屏指令。}//********************************//********寫指令函數(shù)************voidwrite_com(uchardat){P2=dat;LCD_RS=0;//指令LCD_RW=0;//寫入LCD_E=1;//容許LCD_E=0;delay_n40us(1);//實踐證明,我LCD1602上,用for循環(huán)1次就能完畢普通寫指令。}//*******************************//********寫數(shù)據(jù)函數(shù)*************voidwrite_date(uchardat){P2=dat;LCD_RS=1;//數(shù)據(jù)LCD_RW=0;//寫入LCD_E=1;//容許LCD_E=0;delay_n40us(1);}//********************************//********延時函數(shù)***************voiddelay_n40us(uintn){uinti;ucharj;for(i=n;i>0;i--)for(j=0;j<2;j++);//在這個延時循環(huán)函數(shù)中我只做了2次循環(huán),}//實踐證明我LCD1602上普通指令只需1次循環(huán)就能可靠完畢。////////////////////////////////////////////////////////////////////////voidmain(){ init(); write_com(0x80);///////初始化 for(num=0;num<15;num++)////////顯示年月日 { write_date(table1[num]); delay(5); } write_com(0x80+0x40); for(num=0;num<15;num++)/////////////顯示時間 { write_date(table2[num]); delay(5); } while(1) { if(count==20)//////////計時數(shù) { count=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; xiao++; if(xiao==24) { xiao=0; week++; if(week==8)week=0; switch(week) { case1:write_com(0x80+0x0c);write_date('M');delay(5); write_date('O');delay(5); write_date('N');break; case2:write_com(0x80+0x0c);write_date('T');delay(5); write_date('U');delay(5); write_date('E');break; case3:write_com(0x80+0x0c);write_date('W');delay(5); write_date('E');delay(5); write_date('D');break; case4:write_com(0x80+0x0c);write_date('T');delay(5); write_date('H');delay(5); write_date('U');break; case5:write_com(0x80+0x0c);write_date('F');delay(5); write_date('R');delay(5); write_date('I');break; case6:write_com(0x80+0x0c);write_date('S');delay(5); write_date('T');delay(5); write_date('A');break; case7:write_com(0x80+0x0c);write_date('S');delay(5); write_date('U');delay(5); write_date('N');break; } day++; if((month%2==0&&day==31)||(month%2==1&&day==32&&month!=2)||(((year%4==0&&year%100!=0)||year%400==0)&&month==2&&day==30)||((!(year%4==0&&year%100!=0)||year%400==0)&&month==2&&day==29)) {////////////////////判斷每月有多少天 day=0; month++; if(month==13) { month=1; year++; shi=year/10; ge=year%10; write_com(0x80+0x04); write_date(table[ge]); write_com(0x80+0x03); write_date(table[shi]); } shi=month/10; ge=month%10; write_com(0x80+0x07); write_date(table[ge]); write_com(0x80+0x06); write_date(table[shi]); } shi=day/10; ge=day%10; write_com(0x80+0x0a); write_date(table[ge]); write_com(0x80+0x09); write_date(table[shi]); } shi=xiao/10; ge=xiao%10; write_com(0x80+0x45); write_date(table[ge]); write_com(0x80+0x44); write_date(table[shi]); } shi=fen/10; ge=fen%10; write_com(0x80+0x48); write_date(table[ge]); write_com(0x80+0x47); write_date(table[shi]); } shi=miao/10; ge=miao%10; write_com(0x80+0x4b); write_date(table[ge]); write_com(0x80+0x4a); write_date(table[shi]); }//////////////////////////////////////////顯示當前年月日和詳細時間 if(k1==0)////////////////按鍵K1按下 { delay(10); if(k1==0) { TR0=0; flag++; num1=0; if(flag==8)flag=1; switch(flag) { case1: write_com(0x80+0x4b);write_com(0x0f);break; case2: write_com(0x80+0x48);write_com(0x0f);break; case3: write_com(0x80+0x45);write_com(0x0f);break; case4: write_com(0x80+0x0a);write_com(0x0f);break; case5: write_com(0x80+0x07);write_com(0x0f);break; case6: write_com(0x80+0x04);write_com(0x0f);break; case7: write_com(0x80+0x0c);write_com(0x0f);break; }////////////////////////時間停止運營擬定調節(jié)時間位置 } while(!k1);///////////消抖 } if(k2==0)//////////////////K2鍵按下 { delay(10); if(k2==0) { num1++; if(num1==60)num1=0;///////////////////60為周期 switch(flag) { case1:miao=num1; shi=miao/10; ge=miao%10; write_com(0x80+0x4b);////////////////地址 write_date(table[ge]);///////////////數(shù)據(jù) write_com(0x80+0x4a); write_date(table[shi]); break; case2:fen=num1; shi=fen/10; ge=fen%10; write_com(0x80+0x48); write_date(table[ge]); write_com(0x80+0x47); write_date(table[shi]); break; case3:xiao=num1; shi=xiao/10; ge=xiao%10; write_com(0x80+0x45); write_date(table[ge]); write_com(0x80+0x44); write_date(table[shi]);break; case4:day=num1; shi=day/10; ge=day%10; write_com(0x80+0x0a); write_date(table[ge]); write_com(0x80+0x09); write_date(table[shi]);break; case5:month=num1; shi=month/10; ge=month%10; write_com(0x80+0x07); write_date(table[ge]); write_com(0x80+0x06); write_date(table[shi]);break; case6:year=num1; shi=year/10; ge=year%10; write_com(0x80+0x04); write_date(table[ge]); write_com(0x80+0x03); write_date(table[shi]);break; case7:week=num1; switch(week) { case1:write_com(0x80+0x0c);write_date('M');delay(5); write_date('O');delay(5); write_date('N');break; case2:write_com(0x80+0x0c);write_date('T');delay(5); write_date('U');delay(5); write_date('E');break; case3:write_com(0x80+0x0c);write_date('W');delay(5); write_date('E');delay(5); write_date('D');break; case4:write_com(0x80+0x0c);write_date('T');delay(5); write_date('H');delay(5); write_date('U');break; case5:write_com(0x80+0x0c);write_date('F');delay(5); write_date('R');delay(5); write_date('I');break; case6:write_com(0x80+0x0c);write_date('S');delay(5); write_date('T');delay(5); write_date('A');break; case7:write_com(0x80+0x0c);write_date('S');delay(5); write_date('U');delay(5); write_date('N');break; } break; }/////////////////////////////////////////是時間加 } while(!k2); } if(k3==0)//////////////////////////K3按下 { delay(10); if(k3==0) { if(num1==0)num1=60; num1--; switch(flag) { case1:miao=num1; shi=miao/10; ge=miao%10; write_com(0x80+0x4b); write_date(table[ge]); write_com(0x80+0x4a); write_date(table[shi]); break; case2:fen=num1; shi=fen/10; ge=fen%10; write_com(0x80+0x48); write_date(table[ge]); write_com(0x80+0x47); write_date(table[shi]); break; case3:xiao=num1; shi=xiao/10; ge=xiao%10; write_com(0x80+0x45); write_date(table[ge]); write_com(0x80+0x44); write_date(table[shi]);break; case4:day=num1; shi=day/10; ge=day%10; write_com(0x80+0x0a); write_date(table[ge]); write_com(0x80+0x09); write_date(table[shi]);break; case5:month=num1; shi=month/10; ge=month%10; write_com(0x80+0x07); write_date(table[ge]); write_com(0x80+0x06); write_date(table[shi]);break; case6:year=num1; shi=year/10; ge=year%10; write_com(0x80+0x04); write_date(table[ge]); write_com(0x80+0x03); write_date(table[shi]);break; cas
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基因工程生長因子受體拮抗劑企業(yè)制定與實施新質生產力戰(zhàn)略研究報告
- 二零二五年度房屋代購與房產電商服務合同
- 養(yǎng)老項目借款合同
- 食品業(yè)油煙凈化裝備企業(yè)數(shù)字化轉型與智慧升級戰(zhàn)略研究報告
- 口腔設備及器具智能生產設備企業(yè)制定與實施新質生產力戰(zhàn)略研究報告
- 多文化接觸協(xié)議
- 2025年度設備拆除及環(huán)保處理安全責任合同
- 沙發(fā)半成品企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 商業(yè)地產購房合同
- 2025年度綠色環(huán)保型出租房退房協(xié)議
- 新統(tǒng)編版五年級下冊道德與法治全冊課時練一課一練(同步練習)(含答案)
- 法律方法階梯PPT課件
- 計算機2級二級浙江旅游概述
- 《色彩基礎知識》PPT課件(完整版)
- 故事我把媽媽弄丟了ppt課件
- NACE產品金屬材料要求
- 布朗德戰(zhàn)略導向的薪酬管理體系
- 食品經營餐飲操作流程(共1頁)
- 中儲糧購銷電子交易平臺成交合同
- SL/T212-2020 水工預應力錨固技術規(guī)范_(高清-有效)
- 河北省省直行政事業(yè)單位資產(房屋)租賃合同書(共7頁)
評論
0/150
提交評論