單片機課程設計說明書數字時鐘設計_第1頁
單片機課程設計說明書數字時鐘設計_第2頁
單片機課程設計說明書數字時鐘設計_第3頁
單片機課程設計說明書數字時鐘設計_第4頁
單片機課程設計說明書數字時鐘設計_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、單片機課程設計說明書目錄1.引言21.1設計任務與要求21.2數字鐘得實用價值和理論意義21.3設計所用器件簡介31.3.1 單片機簡介31.3.2 1602lcd的基本參數及引腳功能32.設計內容73程序設計及硬件電路83.1原理圖(protues)83.2原理圖(protel)84.仿真結果95.收獲、體會和建議116.參考文獻117.附:源程序121.引言近年來隨著計算機在社會領域的滲透和大規模集成電路的發展,單片機的應用正在不斷地走向深入,由于它具有功能強,體積小,功耗低,價格便宜,工作可靠,使用方便等特點,因此特別適合于與控制有關的系統,越來越廣泛地應用于自動控制,智能化儀器,儀表,

2、數據采集,軍工產品以及家用電器等各個領域,單片機往往是作為一個核心部件來使用,在根據具體硬件結構,以及針對具體應用對象特點的軟件結合,以作完善。單片機模塊中最常見的是數字鐘,數字鐘是一種用數字電路技術實現時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。數字鐘是采用數字電路實現對時,分,秒數字顯示的計時裝置,廣泛用于個人家庭,車站, 碼頭辦公室等公共場所,成為人們日常生活中不可少的必需品,由于數字集成電路的發展和石英晶體振蕩器的廣泛應用,使得數字鐘的精度,遠遠超過老式鐘表, 鐘表的數字化給人們生產生活帶來了極大的方便,而且

3、大大地擴展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定時開關烘箱、通斷動力設備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數字化為基礎的。因此,研究數字鐘及擴大其應用,有著非?,F實的意義。1.1設計任務與要求1.利用at89c51定時器設計一個電子時鐘;2.顯示格式位 “xx xx xx”,從左向右分別是:時、分、秒;3.顯示部分用1602lcd顯示屏;4.具有四個調整鍵k0,k1,k2,k3;5.按下相應的鍵可以調整時,分,秒;6.調整到哪一位哪一位閃爍;7.在1602上方顯示“年,月,日,星期”。1.2數字鐘得實用價值和理論意義

4、數字鐘是采用數字電路實現對時,分,秒數字顯示的計時裝置,廣泛用于個人家庭,車站, 碼頭辦公室等公共場所,成為人們日常生活中不可少的必需品,由于數字集成電路的發展和石英晶體振蕩器的廣泛應用,使得數字鐘的精度,遠遠超過老式鐘表, 鐘表的數字化給人們生產生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定時開關烘箱、通斷動力設備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數字化為基礎的。因此,研究數字鐘及擴大其應用,有著非常現實的意義。1.3設計所用器件簡介1.3.1 單片機簡介mcs51是指由美國intel公

5、司(對了,就是大名鼎鼎的intel)生產的一系列單片機的總稱,這一系列單片機包括了好些品種,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的產品,該系列其它單片機都是在8051的基礎上進行功能的增、減、改變而來的,所以人們習慣于用8051來稱呼mcs51系列單片機,而8031是前些年在我國最流行的單片機,所以很多場合會看到8031的名稱。intel公司將mcs51的核心技術授權給了很多其它公司,所以有很多公司在做以8051為核心的單片機,當然,功能或多或少有些改變,以滿足不同的需求,其中89c51就是這幾年在我國非常流行的單片機,它是由美國atmel公

6、司開發生產的。以后我們將用89c51、89s51來完成一系列的實驗。mcs-51系列單片機mcs-51系列單片機分為兩大系列,即51子系列與52子系列。51子系列:基本型,根據片內rom的配置,對應的芯片為8031、8051、8751、895152子系列:增強型,根據片內rom的配置,對應的芯片為8032、8052、8752、8952這兩大系列單片機的主要硬件特性如下表:上表中可以看到,8031、8031、8032、80c32片內是沒有rom的,對應著上表看,我們可以發現,51系列的單片機的ram大小為128b,52系列的ram大小為256b,51系列的計數器為兩個16位的,52系列的計數器為

7、三個16位計數器。51系列的中斷源為5個,52系列的中斷源為6個。1.3.2 1602lcd的基本參數及引腳功能1602lcd分為帶背光和不帶背光兩種,基控制器大部分為hd44780,帶背光的比不帶背光的厚,是否帶背光在應用中并無差別,兩者尺寸差別如下圖10-54所示:圖10-54 1602lcd尺寸圖1602lcd主要技術參數:顯示容量:16×2個字符芯片工作電壓:4.55.5v工作電流:2.0ma(5.0v)模塊最佳工作電壓:5.0v字符尺寸:2.95×4.35(w×h)mm引腳功能說明1602lcd采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口

8、說明如表10-13所示:編號符號引腳說明編號符號引腳說明1vss電源地9d2數據2vdd電源正極10d3數據3vl液晶顯示偏壓11d4數據4rs數據/命令選擇12d5數據5r/w讀/寫選擇13d6數據6e使能信號14d7數據7d0數據15bla背光源正極8d1數據16blk背光源負極引腳接口說明表第1腳:vss為地電源。第2腳:vdd接5v正電源。第3腳:vl為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10k的電位器調整對比度。第4腳:rs為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。第5腳:r/w為讀寫信號線

9、,高電平時進行讀操作,低電平時進行寫操作。當rs和r/w共同為低電平時可以寫入指令或者顯示地址,當rs為低電平r/w為高電平時可以讀忙信號,當rs為高電平r/w為低電平時可以寫入數據。第6腳:e端為使能端,當e端由高電平跳變成低電平時,液晶模塊執行命令。第714腳:d0d7為8位雙向數據線。第15腳:背光源正極。第16腳:背光源負極。1602lcd的指令說明及時序1602液晶模塊內部的控制器共有11條控制指令,如表所示:序號指令rsr/wd7d6d5d4d3d2d1d01清顯示00000000012光標返回000000001*3置輸入模式00000001i/ds4顯示開/關控制0000001d

10、cb5光標或字符移位000001s/cr/l*6置功能00001dlnf*7置字符發生存貯器地址0001字符發生存貯器地址8置數據存貯器地址001顯示數據存貯器地址9讀忙標志或地址01bf計數器地址10寫數到cgram或ddram)10要寫的數據內容11從cgram或ddram讀數11讀出的數據內容控制命令表1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01h,光標復位到地址00h位置。指令2:光標復位,光標返回到地址00h。指令3:光標和顯示模式設置 i/d:光標移動方向,高電平右移,低電平左移 s:屏幕上所有文字

11、是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關控制。 d:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示 c:控制光標的開與關,高電平表示有光標,低電平表示無光標 b:控制光標是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位 s/c:高電平時移動顯示的文字,低電平時移動光標。指令6:功能設置命令 dl:高電平時為4位總線,低電平時為8位總線 n:低電平時為單行顯示,高電平時雙行顯示 f: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。指令7:字符發生器ram地址設置。指令8:ddram地址設置。指令9:讀忙信號和光標地址 bf:為忙標志位,

12、高電平表示忙,此時模塊不能接收命令或者數據,如果為低電平表示不忙。指令10:寫數據。指令11:讀數據。與hd44780相兼容的芯片時序表如下:讀狀態輸入rs=l,r/w=h,e=h輸出d0d7=狀態字寫指令輸入rs=l,r/w=l,d0d7=指令碼,e=高脈沖輸出無讀數據輸入rs=h,r/w=h,e=h輸出d0d7=數據寫數據輸入rs=h,r/w=l,d0d7=數據,e=高脈沖輸出無2.設計內容atc89c51單片機lcd1602顯示器按鍵k0 k1 k2 k3 位驅動 3程序設計及硬件電路程序流程圖3.1原理圖(protues)3.2原理圖(protel)4.仿真結果上電后按下k0開始運行:

13、按下k3秒閃爍按下k1 閃爍 減一(05調到04)按下k2 加一(04調到05)根據按下k0的次數可以改變閃爍的位置進行分,時,年,月,日,星期的調整調整分調整時調整年調整月調整日調整星期5.收獲、體會和建議單片機數字鐘可以說是一個較小的系統,開始時我們覺得通過c語言較容易實現,確實,只實現一個能夠正常走時并且能夠校時的數字鐘是比較容易的。但我們想錯了,畢竟是第一次從總體角度來考慮地完成一個小系統,好多的實際性的問題我們沒有考慮,所以造成我們最終設計的數字鐘精度不高,并且存在好多問題,當然問題多了對我們來說是好事,這樣我們在解決更多問題時學會更多解決問題的方法,對我們也算是長長經驗吧。通過這次

14、對數字鐘的設計,讓我了解了設計電路的程序,也讓我了解了關于數字鐘的原理與設計理念,要設計一個完整的電路總要經過多次的失敗才能成功的,在設計中,遇到了許多匪夷所思的問題,一個人就是想破腦子也做不出來,這時候,就需要去詢問老師、和同學探討,共同解決出現的問題,也許就是因為老師的一句提醒、同學的探討中就會豁然開朗。從這次設計中我也覺得自己還對單片機的功能了解只是個皮毛,單片機強大的功能還等著我們去開發。通過這次設計,不僅使我學到了知識,讓我對電路設計有了大概的了解;其次,還體會到了團隊精神??偠灾@次設計是成功的。6.參考文獻1 楊文龍.單片機原理及應用.西安:西安電子科技大學出版社,19932

15、 李朝青.單片機原理及接口技術.北京:北京航空航天大學出版社,20033 胡漢才.單片機原理及系統設計.北京:清華大學出版社,20034 楊忠煌,黃博俊,李文昌.單芯片8051實務與應用.北京:中國水利水電出版社,20017.附:源程序#include <reg51.h>#define uchar unsigned char#define uint unsigned int uchar code table1=" 2011-00-00-mon"/星期一 mon 星期二 tue 星期三 wed 星期四 thu 星期五 fri 星期六 sat 星期天 sun uch

16、ar code table2=" 00:00:00 "uchar code table='0','1','2','3','4','5','6','7','8','9'uchar num,count,miao,fen,xiao,week,day,month,year,shi,ge,flag,num1;sbit lcd_rw=p37;sbit lcd_rs=p35;sbit lcd_e=p34;sbit k1=p10;/

17、選擇sbit k2=p11;/增加sbit k3=p12;/減少sbit k4=p13;/開始void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/lcd顯示void init(void);/初始化函數void write_com(uchar command);/寫指令函數void write_date(uchar dat);/寫數據函數void lcd_disp_char(uchar x,uchar y,uchar dat);/在某個屏幕位置上顯示一個字符,x(0-16),y(1-2)/void lcd_chec

18、k_busy(void);/檢查忙函數。我沒用到此函數,因為通過率極低。void delay_n40us(uint n);/延時函數/*/*初始化函數*void init(void)write_com(0x38);/設置8位格式,2行,5x7write_com(0x0c);/整體顯示,關光標,不閃爍write_com(0x06);/設定輸入方式,增量不移位write_com(0x01);/清除屏幕顯示delay_n40us(100);/實踐證明,用for循環200次就能可靠完成清屏指令。/*/*寫指令函數*void write_com(uchar dat)p2=dat;lcd_rs=0;/指令

19、lcd_rw=0;/寫入lcd_e=1;/允許lcd_e=0;delay_n40us(1);/實踐證明,我的lcd1602上,用for循環1次就能完成普通寫指令。/*/*寫數據函數*void write_date(uchar dat)p2=dat;lcd_rs=1;/數據lcd_rw=0;/寫入lcd_e=1;/允許lcd_e=0;delay_n40us(1);/*/*延時函數*void delay_n40us(uint n) uint i; uchar j; for(i=n;i>0;i-) for(j=0;j<2;j+); /在這個延時循環函數中我只做了2次循環, /實踐證明我的

20、lcd1602上普通的指令只需1次循環就能可靠完成。/void main()init();write_com(0x80); /初始化for(num=0;num<15;num+)/顯示年月日write_date(table1num);delay(5);write_com(0x80+0x40);for(num=0;num<15;num+) /顯示時間write_date(table2num);delay(5);while(1)if(count=20)/計時的數count=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;xiao+;if(xi

21、ao=24)xiao=0;week+;if(week=8)week=0;switch(week)case 1:write_com(0x80+0x0c);write_date('m');delay(5);write_date('o');delay(5);write_date('n');break;case 2:write_com(0x80+0x0c);write_date('t');delay(5);write_date('u');delay(5);write_date('e');break;case

22、 3:write_com(0x80+0x0c);write_date('w');delay(5);write_date('e');delay(5);write_date('d');break;case 4:write_com(0x80+0x0c);write_date('t');delay(5);write_date('h');delay(5);write_date('u');break;case 5:write_com(0x80+0x0c);write_date('f');dela

23、y(5);write_date('r');delay(5);write_date('i');break;case 6:write_com(0x80+0x0c);write_date('s');delay(5);write_date('t');delay(5);write_date('a');break;case 7:write_com(0x80+0x0c);write_date('s');delay(5);write_date('u');delay(5);write_date(

24、9;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

25、+;shi=year/10;ge=year%10;write_com(0x80+0x04);write_date(tablege);write_com(0x80+0x03);write_date(tableshi);shi=month/10;ge=month%10;write_com(0x80+0x07);write_date(tablege);write_com(0x80+0x06);write_date(tableshi);shi=day/10;ge=day%10;write_com(0x80+0x0a);write_date(tablege);write_com(0x80+0x09);w

26、rite_date(tableshi);shi=xiao/10;ge=xiao%10;write_com(0x80+0x45);write_date(tablege);write_com(0x80+0x44);write_date(tableshi);shi=fen/10;ge=fen%10;write_com(0x80+0x48);write_date(tablege);write_com(0x80+0x47);write_date(tableshi);shi=miao/10;ge=miao%10;write_com(0x80+0x4b);write_date(tablege);write_

27、com(0x80+0x4a);write_date(tableshi);/顯示目前的年月日和具體時間if(k1=0) /按鍵k1按下delay(10);if(k1=0)tr0=0;flag+;num1=0;if(flag=8)flag=1;switch(flag)case 1:write_com(0x80+0x4b);write_com(0x0f);break;case 2:write_com(0x80+0x48);write_com(0x0f);break;case 3:write_com(0x80+0x45);write_com(0x0f);break;case 4:write_com(0

28、x80+0x0a);write_com(0x0f);break;case 5:write_com(0x80+0x07);write_com(0x0f);break;case 6:write_com(0x80+0x04);write_com(0x0f);break;case 7:write_com(0x80+0x0c);write_com(0x0f);break;/時間停止運行 確定調整時間的位置while(!k1);/消抖if(k2=0)/k2鍵按下delay(10);if(k2=0)num1+;if(num1=60)num1=0;/60為周期switch(flag)case 1:miao=n

29、um1;shi=miao/10;ge=miao%10;write_com(0x80+0x4b);/地址write_date(tablege);/數據write_com(0x80+0x4a);write_date(tableshi);break;case 2:fen=num1;shi=fen/10;ge=fen%10;write_com(0x80+0x48);write_date(tablege);write_com(0x80+0x47);write_date(tableshi);break;case 3:xiao=num1;shi=xiao/10;ge=xiao%10;write_com(0x

30、80+0x45);write_date(tablege);write_com(0x80+0x44);write_date(tableshi);break;case 4:day=num1;shi=day/10;ge=day%10;write_com(0x80+0x0a);write_date(tablege);write_com(0x80+0x09);write_date(tableshi);break;case 5:month=num1;shi=month/10;ge=month%10;write_com(0x80+0x07);write_date(tablege);write_com(0x8

31、0+0x06);write_date(tableshi);break;case 6:year=num1;shi=year/10;ge=year%10;write_com(0x80+0x04);write_date(tablege);write_com(0x80+0x03);write_date(tableshi);break;case 7:week=num1;switch(week)case 1:write_com(0x80+0x0c);write_date('m');delay(5);write_date('o');delay(5);write_date(&#

32、39;n');break;case 2:write_com(0x80+0x0c);write_date('t');delay(5);write_date('u');delay(5);write_date('e');break;case 3:write_com(0x80+0x0c);write_date('w');delay(5);write_date('e');delay(5);write_date('d');break;case 4:write_com(0x80+0x0c);write_d

33、ate('t');delay(5);write_date('h');delay(5);write_date('u');break;case 5:write_com(0x80+0x0c);write_date('f');delay(5);write_date('r');delay(5);write_date('i');break;case 6:write_com(0x80+0x0c);write_date('s');delay(5);write_date('t');de

34、lay(5);write_date('a');break;case 7: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)case 1:miao=num1;shi=miao/10;ge=miao%10;write_com(

35、0x80+0x4b);write_date(tablege);write_com(0x80+0x4a);write_date(tableshi);break;case 2:fen=num1;shi=fen/10;ge=fen%10;write_com(0x80+0x48);write_date(tablege);write_com(0x80+0x47);write_date(tableshi);break;case 3:xiao=num1;shi=xiao/10;ge=xiao%10;write_com(0x80+0x45);write_date(tablege);write_com(0x80

36、+0x44);write_date(tableshi);break;case 4:day=num1;shi=day/10;ge=day%10;write_com(0x80+0x0a);write_date(tablege);write_com(0x80+0x09);write_date(tableshi);break;case 5:month=num1;shi=month/10;ge=month%10;write_com(0x80+0x07);write_date(tablege);write_com(0x80+0x06);write_date(tableshi);break;case 6:year=num1;shi=year/10;ge=year%10;write_com(0x80+0x04);write_date(tablege);write_com(0x80+0x03);write_date(tableshi);

溫馨提示

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

評論

0/150

提交評論