久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

單片機電子鐘實習報告

時間:2019-05-15 09:28:18下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《單片機電子鐘實習報告》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《單片機電子鐘實習報告》。

第一篇:單片機電子鐘實習報告

學院:xxx 班級:自動化xx班 姓名:xxx 學號:xxx 日期:2013-3-15

單片機LCD1602電子鐘設計實習報告

一、引言

1.1設計的背景及目的

隨著計算機科學與技術的飛速發展,計算機的應用已經滲透到國民經濟與人們生活的各個角落,正在日益改變著傳統的人類工作方式和生活方式,而單片機技術又作為計算機技術中的一個獨立分支,有著性價比高,集成度高,體積小,可靠性高,控制功能強大,低功耗,低電壓,便于生產,便于攜帶等特點,所以得到越來越廣泛的應用,特別是在工業控制和儀表儀器智能化中起極其重要的作用.本文利用單片機強大的控制功能和內部定時器重要部件,設計了一款自行對時間進行調整以及把時、分、秒用LCD顯示的電子鐘。

電子鐘從原理上講是一種典型的數字電路,其中包括了組合邏輯電路和時序電路。因此,我們此次設計與制做數字鐘就是為了了解數字鐘的原理,從而學會制作數字鐘.而且通過數字鐘的制作進一步的了解各種在制作中用到的中小規模集成電路的作用及實用方法.且由于數字鐘包括組合邏輯電路和時敘電路.通過它可以進一步學習與掌握各種組合邏輯電路與時序電路的原理與使用方法

1.2設計的內容要求及研究方法 ① 時間以24小時為一個周期; ② 顯示時、分、秒;

③ 具有校時功能,可以分別對時及分進行單獨校時,使其校正到標準時間;

二、設計的原理圖、程序及調試

1、基本原理

本設計基于單片機技術原理,以單片機芯片AT89S51作為核心控制器,通過硬件電路的制作以及軟件程序的編制,設計制作出一個多功能數字時鐘系統。單片機擴展的LCD顯示器用來顯示秒、分、時計數單元中的值。整個設計包括兩大部分: 硬件部分和軟件部分,以單片機為核心, 配以一定的外圍電路和軟件。硬件是整個系統的基礎, 軟件部分則要合理、充分地支持和使用系統的硬件, 從而完成系統所要完成的任務。

該時鐘系統主要由時鐘模塊、液晶顯示模塊、鍵盤控制模塊以及信號提示模塊組成。能夠準確顯示時間(顯示格式為時時:分分:秒秒,24小時制),可隨時進行時間調整。設計以硬件軟件化為指導思想,充分發揮單片機功能,大部分功能通過軟件編程來實現,電路簡單明了,系統穩定性高。單片機在這種情況下誕生了基于單片機電子時鐘。

2、硬件電路原理圖

3、原理仿真圖

4.硬件模塊功能介紹

4.1 AT89S51單片機:AT89S51提供以下標準功能:8k字節Flash閃速存儲器,256字節內部RAM,32個I/O口線,3個16位定時/計數器,一個6向量兩級中斷結構,一個全雙工串行通信口,片內振蕩器及時鐘電路[2]。同時,AT89S51可降至0HZ的靜態邏輯操作,并支持兩種軟件可選的節電工作模式。空閑方式停止CPU的工作,但允許RAM,定時/計數器,串行通信口及中斷系統繼續工作。掉電方式保存RAM中的內容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位。

4.2 液晶顯示器LCD:液晶顯示器簡稱是利用液晶經過處理后能夠改變光線傳輸方向的特性,達到顯示字符或者圖形的目的。其特點是體積小、重量輕、功耗極低、顯示內容豐富等特點,在單片機應用系統中有著日益廣泛的應用。

1602芯片:主要用于顯示時間和定時時間。1602芯片由點陣字符液晶顯示器件和專用的行、列驅動器、控制及必要的鏈接件、結構件組裝而成,可以顯示數字和西文字符,但不能顯示圖形,已經可以滿足本次設計的需要。1602型LCD可以顯示2行16個字符,有8位數據總線D0~D7和RS,R/W,EN三個控制端口,工作電壓為5V,并且具有字符對比度調節和背光功能。

4.3 鍵盤控制模塊:按鍵中有一個復位鍵及定時鍵、調時鍵加一鍵和減一鍵,一個按鍵接在復位電路上,另外三個按鍵接在P3.0——P3.2口,低電平表示有按鈕按下;按鈕沒有接防抖電路,需要設計軟件防抖。

1、定時。按下定時鍵后可以開始定時,過程如下:定時---〉小時加/減---〉按定時---分鐘加/減---按定時。

2、調時。按下調時鍵后可以調時,過程如下:調時---年加/減---調時--月加/減---調時---日加/減---調時---時加/減---調時---分加/減---調時---秒加/減---調時。

4.4 直流穩壓電源部分:直流穩壓電源是給電子設備提供穩定直流電壓的電子電路。這次電路需要的是+5V直流電源。5.軟件設計

5.1 代碼附錄

#include #define uchar unsigned char #define uint unsigned int #define WUFU P2 sbit lcdrs = P1^0;sbit lcdrw = P1^1;sbit lcden = P1^2;sbit key1 = P3^0;sbit key2 = P3^1;sbit key3 = P3^2;sbit key4 = P3^3;sbit bell = P3^7;uchar num, count, keynum;//定義幾個變量 uchar week, month,day, nian;//定義幾個變量 uchar shi, fen, miao;//定義幾個變量

void delay(uint x){ uint i, j;for(i=0;i

uchar code table[]=“ 2013-01-18 MON ”;//定義數組 表示年月日

uchar code table1[]=“ 12-30-16 ”;//定義數組 表示時分秒

//********************寫命令******************************** //===========

void write_com(uchar com){ lcdrs = 0;//表示寫入的是指令,即對指令進行操作

lcdrw = 0;lcden = 0;//使能信號為0 delay(2);WUFU = com;//向端口傳送命令

lcden = 1;delay(2);lcden = 0;} //*********************寫數據********************************** //===============

void write_date(uchar date)//寫數據初始化 { lcdrw = 0;lcdrs = 1;//表示寫入的是數據,即對數據進行操作

delay(2);lcden = 0;WUFU = date;lcden = 1;delay(2);lcden = 0;} //********************函數初始化***************************** //----------------------------

void init()//寫入時間函數 {

shi = 12;fen =30;miao = 16;write_com(0x38);//這句意思是用1602,5*7,的點整來顯示數據 能顯示16個字節

write_com(0x0c);//光標不閃爍

write_com(0x06);//輸入數據光標制動加1,數據地址制動加1 write_com(0x01);//清屏指令

write_com(0x80);//1602液晶第一行

for(num=0;num<16;num++)//通過for循環調用數組里面的元素

{

write_date(table[num]);//寫入數據

delay(5);//延時5秒

} write_com(0xc0);//1602液晶第二行

for(num=0;num<14;num++){

write_date(table1[num]);

delay(5);} TMOD = 0x01;//T0工作模式1 TH0 =(65532-50000)/256;//賦初值高8位 想定時器中寫入初始值為50毫秒

TL0 =(65532-50000)%256;//賦初值低8位

EA = 1;//cpu開中斷

ET0 = 1;//打開定時器

TR0 = 1;//啟動定時器

}

void write_sfm(uchar add, uchar date){ uchar shi,ge;shi= date/10;//把時間的十位分離出來

ge = date%10;//把時間的各位分離出來

write_com(0xc0+add);//顯示這個時間的地址,這具體是顯示十位的地址,但因為顯示了十位地址制動加加所以不用現出顯示個位的地址

write_date(0x30+shi);//在1602中要顯示1它的地址是0x31,以此類推顯示數字9是為0x39,所以前面要加上0x30

write_date(0x30+ge);//與上同理

}

void write_nyr(uchar add, uchar date){ uchar shi,ge;shi= date/10;ge = date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);}

void write_week(uchar we){ write_com(0x80+12);switch(we){

case 1:

write_date('M');

delay(5);

write_date('o');

delay(5);

write_date('N');

break;

case 2:

write_date('T');

delay(5);

write_date('U');

delay(5);

write_date('E');

break;

case 3:

write_date('W');

delay(5);

write_date('E');

delay(5);

write_date('D');

break;

case 4:

write_date('T');

delay(5);

write_date('H');

delay(5);

write_date('U');

break;

case 5:

write_date('F');

delay(5);

write_date('R');

delay(5);

write_date('I');

break;

case 6:

write_date('S');

delay(5);

write_date('A');

delay(5);

write_date('T');

break;

case 7:

write_date('S');

delay(5);

write_date('U');

delay(5);

write_date('N');

break;} }

void timer0()interrupt 1 { TH0 =(65532-50000)/256;TL0 =(65532-50000)%256;count ++;

if(count == 20){

count = 0;

miao ++;

if(miao == 60)

{

miao = 0;

fen ++;

if(fen == 60)

{

fen = 0;

shi ++;

if(shi == 24)

{

shi = 0;

}

write_sfm(3,shi);//刷新在屏幕上顯示變化的小時數值

}

write_sfm(6,fen);// 刷新在屏幕上顯示變化的分鐘數值

}

write_sfm(9,miao);// 刷新在屏幕上顯示變化的秒的數值

}

}

void keyscan(){ if(key1 == 0){

delay(5);

if(key1 == 0)

{

keynum ++;

while(!key1);

if(keynum == 1)

{

TR0 = 0;//關定時器

write_com(0xc0+9);//光標定位在秒的位置

write_com(0x0f);//光標開始閃爍

}

if(keynum == 2)

{

write_com(0xc0+6);

}

if(keynum == 3)

{

write_com(0xc0+3);//光標定位在時的位置上

}

if(keynum == 4)

{

//keynum = 0;

//write_com(0x0c);//取消光標閃爍

//TR0 = 1;

write_com(0x80+12);

}

if(keynum == 5)

{

write_com(0x80+9);

}

if(keynum == 6)

{

write_com(0x80+6);

}

if(keynum == 7)

{

write_com(0x80+3);

}

if(keynum == 8)

{

keynum = 0;

write_com(0x0c);//光標不閃爍

TR0 = 1;//啟動定時器 時間又開始走了

}

} } if(keynum!= 0)//如果k1沒有按到第四次

{

if(key2 == 0)//如果k2按鍵按下

{

delay(5);

if(key2!= 0)//松手檢測

{

while(!key2);

if(keynum == 1)

{

miao ++;//秒表進行++

if(miao == 60)//當秒加到60秒后

miao = 0;//把秒值為0

write_sfm(9,miao);//把調好的秒值寫打屏幕上

write_com(0xc0+9);//把光標還到

原來的位置

}

if(keynum == 2)

{

fen ++;

if(fen == 60)

fen = 0;

write_sfm(6,fen);//把調好的分值寫打屏幕上

write_com(0xc0+6);//把光標還到原來的位置

}

if(keynum == 3)

{

shi ++;

if(shi == 24)

shi = 0;

write_sfm(3,shi);//把調好的時值寫打屏幕上

write_com(0xc0+3);//把光標還到原來的位置

}

if(keynum == 4)

{

week ++;

if(week == 8)

week = 1;

write_week(week);

write_com(0x80+12);

}

if(keynum == 5)

{

day ++;

if(day == 32)

day = 1;

write_nyr(9,day);

write_com(0x80+9);

}

if(keynum == 6)

{

month ++;

if(month == 13)

month = 1;

write_nyr(6,month);

write_com(0x80+6);

}

if(keynum == 7)

{

nian ++;

if(nian == 100)

nian = 0;

write_nyr(3,nian);

write_com(0x80+3);

}

}

}

if(key3 == 0)

{

delay(5);

if(key3 == 0)

{

while(!key3);

if(keynum == 1)

{

miao--;

if(miao ==-1)

miao = 59;

write_sfm(9,miao);

write_com(0xc0+9);

}

if(keynum == 2)

{

fen--;

if(fen ==-1)

fen = 59;

write_sfm(6,fen);

write_com(0xc0+6);

}

if(keynum == 3)

{

shi--;

if(shi ==-1)

shi = 24;

write_sfm(3,shi);

write_com(0xc0+3);

}

if(keynum == 4)

{

week--;

if(week ==-1)

week = 7;

write_week(week);

write_com(0x80+12);

}

if(keynum == 5)//與函數遞增函數一樣只是按鍵不同還有就是功能相反了

{

day--;

if(day == 0)

day = 31;

write_nyr(9,day);

write_com(0x80+9);

}

if(keynum == 6)//與函數遞增函數一樣只是按鍵不同還有就是功能相反了

{

month--;

if(month == 0)

month = 12;

write_nyr(6,month);

write_com(0x80+6);

}

if(keynum == 7)//與函數遞增函數一樣只是按鍵不同還有就是功能相反了

{

nian--;

if(nian == 0)

nian = 100;

write_nyr(3,nian);

write_com(0x80+3);

}

}

} } }

//============================================= //函數主程序

//============================================= void main(){ init();while(1){

keyscan();} } 5.2調試過程

調試的主要過程包括硬件調試和軟件調試,其中軟件調試,也即程序編譯與仿真過程處于本次設計調試過程的核心環節。由于本設計已經制作出液晶顯示電子鐘,所以硬件調試也很重要。兩種調試過程并非孤立或者分開的,而是緊密相關。在此我們用到的開發工具是仿真器。5.3硬件調試

完成仿真器軟件仿真后,就要連接上硬件也即液晶顯示電子鐘成品板進行硬件調試。

將仿真器通過串行電纜連接計算機上,將仿真頭接到仿真器,檢查接線是否有誤,確信沒有接錯后,接上電源,打開仿真器的電源開關。再進行仿真器和通信設置。

仿真器和仿真頭設置正確,并且硬件連接沒有錯誤,出現 “硬件仿真”的對話框,并顯示仿真器、仿真頭的型號及仿真器的序列號。表明仿真器初始化正確。

硬件調試很重要也很麻煩,由于本次設計硬件非PCB制板,而是手工焊板,焊點質量、布線是否合理等對系統的影響比較大,這無疑增加硬件調試的難度。由于此前沒有很多的練習,本次設計我所制作的液晶顯示電子鐘在質量工藝上很難達到滿意程度,不過在調試中還算穩定,基本功能都能較穩定地實現。5.4軟件調試

系統仿真分析電路原理圖在ISIS里設計完成,并將系統軟件編譯成.Hex文件,再進行電子時鐘的系統虛擬仿真。(1)在ISIS的原理圖中,右鍵單擊AT89S51將其選中,然后單擊左鍵打開AT89C51的Edit Component 對話框,如下圖所示。(2)選擇相應的.Hex文件,再在Proteus ISIS 編輯窗口的File菜單中選擇Save Design 選項,保存設計,生成.DSN文件。5.5測試數據與數據分析

實現功能的具體方法:當進入調整功能時,按第二個鍵K2進行加運算按第三個鍵K3進行減運算。

按下第一個鍵K1,實現日期時間調整及定時功能,等數字閃爍后,按二三鍵進行加減,從而可以進行具體日期時間調整。按下第四個鍵K4回到原始設計時間,采用24小時制。時間顯示格式為:時-分-秒;日期顯示格式為:日-月-年。具有顯示時間和日期的功能。

三、總結:個人心得體會

微機實習讓我對計算機理論知識和自動化專業知識有了一定的了解,但真正操作起來就沒有那么容易.紙上得來終覺淺, 絕此事要躬行。經過過去3個星期的實訓,我對自己有了新的認識及前進的方向。1.繼續學習,不斷提升理論素養。

在信息時代,學習是不斷地汲取新信息,獲得事業進步的動力?,F在通過實習總感覺自己學的不夠,要用到知識時總感覺腦袋是空白的。很后悔自己當時在學校為什么不多學一點,多練習一點??傇诤蠡谝矝]有用,只能自己去努力學習。為了能更好的適應工作,我利用自己空閑時間去附近的書店去看書,希望能彌補不足。2.加強信心,堅持下去

現在大家都說,能珍惜現在的日子就好好珍惜。等工作了才真的有另外的領悟。每天起早貪黑,忙忙碌碌,做了第一天可能就想回到學校接著做學生。感覺學生時代真是最美好的時間。可是既然真的出來了,就得踏出來了就要繼續走下去,因為這一天也終究要來到。

對給自己點信心,多給自己點贊賞,多給自己鼓鼓勁。相信總會走出一條寬敞大道的。

3、友善相處

學生時代都感覺很美好,大家相互噓寒問暖,不必勾心斗角。我感覺這里才真的有純潔的友誼。其實想說,這就是一個小型的社會,我們互相的關照,互相體諒,學習上你我照應,工作上你我參與,和諧相處,這樣,我們的友誼才會深刻,所以我們應該正確的對待與人之間的關系,友善相處。

最后想說,實習訓是開端也是結束。在書本上學過很多理論,但從未付諸實踐過,也許等到真正運用時,才會體會到難度有多大。在今后的工作和生活中,自己需要更加努力的奮斗下去。

實訓的同時也讓我了解到了自己的不足,我會繼續努力,完善自我。對于學校的精心安排和指導老師的用心輔導非常感謝。

第二篇:長沙理工大學《單片機課程設計》電子鐘單片機實習報告

目錄

引言...............................................................................................................................5

硬件設計.......................................................................................................................5

軟件設計.......................................................................................................................5

調試過程及問題分析.................................................................................................6

結論.............................................................................................................................7

參考文獻.....................................................................................................................7

附件.....................................................................................................................................8

一 引言

單片機應用技術飛速發展,縱觀我們現在生活的各個領域,從導彈的導航裝置,到飛機上各種儀表的控制,從計算機的網絡通訊與數據傳輸,到工業自動化過程的實時控制和數據處理,以及我們生活中廣泛使用的各種智能IC卡、電子寵物等,單片機都起到了舉足輕重的作用。

所以單片機技術也日趨成熟。單片機是集CPU,RAM,ROM,定時,計數和多種接口于一體的微控制器。它體積小,成本低,功能強。而52系列單片機是各單片機中最為典型和最有代表性的一種。

此次單片機原理及應用實習通過利用52單片機對電子鐘的設計,從而達到學習、了解單片機相關指令在各方面的應用,以及初步了解開發軟、硬件的知識。

二 硬件設計

本次單片機原理及應用實習我們組用到的硬件為MCS51開發板和一個LCD12864液晶顯示器。

在MCS51開發板中,對于我們組做數字電子鐘而言應用到ds1302芯片,蜂鳴器,LED點陣顯示屏,STC89S52單片機,鎖存器等等硬件設備。

通過對這些硬件的使用實現我們組規定的以及我們拓展的要求。

三 軟件設計

此次基于單片機的電子鐘的實習基本要求為:

基本要求

(1)能通過鍵盤設定年月日時分秒;

(2)在LCD12864上顯示年月日時分秒及星期;(3)整點蜂鳴器響6次,每秒響一次,最后一響是整點;(4)按學校的作息時間表定時打鈴(可用一個LED燈模擬打鈴)擴展要求

自動計算和顯示陰歷

基于這些功能,我們用到了如下程序

(1)時鐘程序ds1302(2)按鍵控制程序keyscan

(3)整點報時程序fengming(4)作息時間表程序schooltime fengming(5)顯示程序LCD12864(6)自動計算陰歷程序 Chinesecalender(7)自動計算星期程序conver_week 我們最初的整體思路是將我們的實習課題分成幾個模塊,每個人負責一個部分,爭取第一周弄完個人部分.第二周主要進行不同模塊的整合,以及整個程序的調試和改進.此外準備答辯的PPT,由組長答辯。

程序設計流程圖如下:

四 調試過程及問題分析

在這一次單片機原理及應用的實習中,我學到了很多。雖然整個過程并不是一帆風順的,但是通過

我們的共同努力,最終完成了任務。充分發揮了團隊精神,我們互幫互助,共同提高。

我覺得在拿到一個課題的時候,我們首先應該思考的是干什么?然后才是怎么干?最后是如何優化。于是我開始上網搜有關電子鐘設計的相關資料,我了解到:我們本次是利用MCS51開發板和LCD12864液晶顯示器制作的,可以完成計時、計分、幾秒和校時、校分的功能。微處理器是單片機的核心,完成運算和控制的操作串行口數據存儲器與復位電路、時鐘電路、校時電路由微處理器控制完成各自的任務。最后通過液晶顯示器顯示時分秒。

在這次實習中我負責的是顯示程序LCD12864,剛開始我對于LCD顯示程序并不是太了解。在校園網上找到了些相關的初步顯示程序。通過LCD12864中的一些程序的調用,才能進行顯示,但那是以圖片的形式顯示的,與我們所期望的顯示還是有一定的差別,所以我又做進一步的修改,通過和組員的討論,我才知道有一個顯示漢字的程序是通過字模軟件實現的,之后我們的顯示這一塊就可以依據我們自己的想法進行設計了。

而在整個的程序綜合中,也遇到了一些問題。比如在陰歷顯示在屏幕上的時候,最初只顯示陰歷兩個字,不顯示具體的陰歷,后來經過檢查發現程序調用出現問題,改正后繼續進行優化。

就這樣,我們反復的修改調試,最終完成了我們的整個課程設計。

五 結論

在本次的課程設計中,我們雖然走了些小彎路,但是通過我們的共同努力,最終完成了任務。我從中我學到了很多,比如團隊協作精神,眾人拾材火焰高。任何大問題,在一步一步細化之后,解決起來就輕松得多了!我相信只要付出了就會有收獲。無論什么事情,只有當你用心去做了之后你才會發現它的真實意義所在。我覺得這一次實習是非常有意義的,不僅提高了專業素養,還培養了我們的合作精神。我要把握每一次學習的機會,認真對待,為以后的就業及更深層次的發展添磚加瓦。

六 參考文獻

一、譚浩強 C語言課程設計(第三版)清華大學出版社 2005.7

二、楊恢先 黃輝先 單片機原理及應用[M] 北京人民郵電出版社 2006.10

三、C編寫組編 常用C語言速查手冊 龍門書局 1995

附件

*********************************初始化LCD*******************************/ void Lcminit(void){ cbyte=DISPOFF;

WrL(cbyte);

WrR(cbyte);

cbyte=DISPON;

WrL(cbyte);

WrR(cbyte);

cbyte=DISPFIRST;

WrL(cbyte);

WrR(cbyte);

Lcmcls();

Locatexy(0,0);} /***********************************LCD清屏********************************/ void Lcmcls(void){ uchar i,j;

for(i=0;i<8;i++){

delay(6);

for(j=0;j

delay(6);

Wrdata(0x0,i,j);

}

} }

/************************************寫左區*********************************/ void WrL(uchar x){

P0=0xFF;//P0口送FF,準備讀

lck = 0;

P1 = 0x2a;//ELCD=1/W=1(讀),CSB=1,CSA=0

lck = 1;

while(P0 & LCDBUZY);//最高位為1,表示忙,則循環

lck = 0;

P1 = 0x00;//ELCD=0,R/W=0(讀),CSB=0,CSA=0

lck = 1;

P0 = x;

//數據送到P0口

lck = 0;

P1 = 0x22;//ELCD=1,RW = 0(寫),CSB=1,CSA=0

lck = 1;

lck = 0;

P1 = 0x00;//ELCD=0,RW = 0(寫),CSB=0,CSA=0

lck = 1;} /***********************************寫右區***********************************/ void WrR(uchar data x){

P0=0xFF;//P0口送FF,準備讀

lck = 0;

P1 = 0x29;//ELCD=1,R/W=1(讀),CSB=0,CSA=1

lck = 1;

while(P0 & LCDBUZY);//最高位為1,表示忙,則循環

lck = 0;

P1 = 0x00;//ELCD=0,R/W=0(讀),CSB=0,CSA=1

lck = 1;

P0=x;

//數據送到P0口

lck = 0;

P1 = 0x21;//ELCD=1,RW = 0(寫),CSB=0,CSA=1

lck = 1;lck = 0;P1 = 0x00;//ELCD=0,RW = 0(寫),CSB=0,CSA=0 lck = 1;

} /**********************************顯示定位***********************************/ void Locatexy(uchar row,uchar col){ uchar x, y, right;

switch(col&0xc0)

{ case 0:{

P0=0xFF;//P0口送FF,準備讀

lck = 0;

P1 = 0x29;//ELCD=1,R/W=1(讀),CSB=0,CSA=1

lck = 1;

while(P0 & LCDBUZY);//最高位為1,表示忙,則循環

lck = 0;

P1 = 0x00;

lck = 1;

right = 1;break;}//置右半屏標志

case 0x40:{

P0=0xFF;//P0口送FF,準備讀

lck = 0;

P1 = 0x2a;//ELCD=1,R/W=1(讀),CSB=1,CSA=0

lck = 1;

while(P0 & LCDBUZY);//最高位為1,表示忙,則循環

lck = 0;

P1 = 0x00;//ELCD=0,R/W=0(讀)CSB=0,CSA=0

lck = 1;

right = 0;break;}//置左半屏標志

}

x=col&0x3f|SETX;//把列數據變成行命令

y=row&0x07|SETY;//把行數據變成行命令

/****************************************************************************/

lck = 0;

if(right)

P1 = 0x29;

else

P1 = 0x2a;

lck = 1;

while(P0 & LCDBUZY);//最高位為1,表示忙,則循環

lck = 0;

P1 = 0x00;

lck = 1;/***********************************以上為判斷忙標志**************************/

P0 = y;

lck = 0;

if(right)

P1 = 0x21;

else

P1 = 0x22;

lck = 1;

lck = 0;

P1 = 0x00;

lck = 1;/************************************以上為送行命令*****************************/

P0=0xFF;

lck = 0;

if(right)

P1 = 0x29;

else

P1 = 0x2a;

lck = 1;

while(P0 & LCDBUZY);//最高位為1,表示忙,則循環

lck = 0;

P1 = 0x00;

lck = 1;/*************************************以上為判斷忙標志***************************/

P0 = x;

lck = 0;

if(right)

P1 = 0x21;

else

P1 = 0x22;

lck = 1;

lck = 0;

P1 = 0x00;

lck = 1;/*************************************以上為送列命令***************************/

if(right)

statu = 1;

else

statu = 0;//置左又半區標志

} /*************************************數據寫輸出*******************************/ void Wrdata(uchar x,uchar row,uchar col){

Locatexy(row,col);//定位顯示位置

lck = 0;

if(statu)

P1 = 0x05;//ELCD=0R/W=0(寫),D/I= 1,CSB=0,CSA=1

else

P1 = 0x06;//ELCD=0,R/W=0(寫),D/I= 1,CSB=1,CSA=0

lck = 1;

P0 = x;

lck = 0;

if(statu)

P1 = 0x25;//ELCD=1,R/W=0(寫),D/I= 1,CSB=0,CSA=1

else

P1 = 0x26;//ELCD=1,R/W=0(寫),D/I= 1,CSB=1,CSA=0

lck = 1;

lck = 0;

P1 = 0x00;

lck = 1;}

/**********************************半角數據點陣輸出******************************/ void Puthalf(uchar *strch,uchar row,uchar col){

uchar i,bakerx;

bakerx = row;

for(i=0;i<16;i++)//上半字輸出

{ cbyte=strch[i];

Wrdata(cbyte,bakerx,col);

cbyte=strch[i+1];

Wrdata(cbyte,bakerx+1,col);

col++;

i++;} } void Puthz(uchar *str,uchar row,uchar col){

uchar i,bakerx;

bakerx=row;

for(i=0;i<32;i++)

{

cbyte=str[i];

Wrdata(cbyte,row,col);

//上半字節輸出

i++;

row=bakerx+1;

cbyte=str[i];

Wrdata(cbyte,row,col);

//下半字節輸出

row=bakerx;

col=col+1;

} } /****************************字符型點陣行--》列轉換************************/ void VtoH8x16change(uchar

*hzbuf){

uchar i,j,k, cash[16];

uchar

newbyte, savebit[8];

for(k=0;k<16;k++){

newbyte = 0;

for(i=0;i<8;i++){

savebit[i]=hzbuf[i] & 0x80;}

for(j=0;j<8;j++){

savebit[j] = savebit[j] >>(7-j);

newbyte = newbyte | savebit[j];}

cash[k] = newbyte;

newbyte = 0;

for(i=8;i<16;i++){

savebit[i-8]=hzbuf[i] & 0x80;}

for(j=0;j<8;j++){

savebit[j] = savebit[j] >>(7-j);

newbyte = newbyte |savebit[j];}

cash[k+1] = newbyte;

for(j=0;j<16;j++){

hzbuf[j] = hzbuf[j] <<1;

}

k++;}

for(i=0;i<16;i++)

hzbuf[i] = cash[i];} /*******************************顯示英文和符號字符*******************************/ void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag){uchar

ucXArray[16],i;

if(flag){

// 反白顯示英文 for(i = 0;i < 16;i++)

ucXArray[i] = ~ch[i];}else{

for(i = 0;i < 16;i++)

ucXArray[i] = ch[i];}

VtoH8x16change(ucXArray);Puthalf(ucXArray,row,col);} /****************************顯示中英文字符串************************************/ void vWrite8x16String(uchar *str,uchar row, uchar col, bit flag){

/************************v_RTInputByte*************************/ void v_RTInputByte(uchar ucDa){

uchar i;ACC = ucDa;for(i=8;i>0;i--){ T_IO = ACC0;/*相當于匯編中的 RRC */ T_CLK = 1;T_CLK = 0;ACC = ACC >> 1;} } /********************** uchar uc_RTOutputByte*************************/

uchar uc_RTOutputByte(void){ uchar i;for(i=8;i>0;i--){ ACC = ACC >>1;/*相當于匯編中的 RRC */ ACC7 = T_IO;T_CLK = 1;T_CLK = 0;}

return(ACC);} /************************v_W1302 *************************************/

void v_W1302(uchar ucAddr, uchar ucDa){ lck = 0;P1 = 0x00;lck = 1;unsigned char i, j,thiscol;j = strlen(str);for(i = 0;i < j;i++){

thiscol =(i % 16)* 8 + col;//計算列地址

if(str[i] < 0xa1)//當前顯示內容為英文字符

vWrite8x16Character(&char_Table[str[i]-0x20][0],row,thiscol,flag);

}} T_CLK = 0;

lck = 0;P1 = 0x10;lck = 1;v_RTInputByte(ucAddr);/* 地址,命令 */ v_RTInputByte(ucDa);/* 寫1Byte數據*/ T_CLK = 1;lck = 0;P1 = 0x00;lck = 1;}

/**************************uc_R1302***********************************/

uchar uc_R1302(uchar ucAddr){ uchar ucDa;

lck = 0;P1 = 0x00;lck = 1;

T_CLK = 0;

lck = 0;P1 = 0x10;lck = 1;v_RTInputByte(ucAddr);/* 地址,命令 */ ucDa = uc_RTOutputByte();/* 讀1Byte數據 */ T_CLK = 1;lck = 0;P1 = 0x00;lck = 1;return(ucDa);}

/************************* v_Set1302 *********************************/

void v_Set1302(uchar *pSecDa){ uchar i;uchar ucAddr = 0x80;

v_W1302(0x8e,0x00);/* 控制命令,WP=0,寫操作?*/ for(i =7;i>0;i--){

v_W1302(ucAddr,*pSecDa);/* 秒 分 時 日 月 星期 年 */

pSecDa++;ucAddr +=2;} v_W1302(0x8e,0x80);/* 控制命令,WP=1,寫保護?*/ } /*******************************v_Get1302**************************************/

void v_Get1302(uchar ucCurtime[]){ uchar i;uchar ucAddr = 0x81;for(i=0;i<7;i++){ ucCurtime[i] = uc_R1302(ucAddr);/*格式為: 秒 分 時 日 月 星期 年 */ ucAddr += 2;delay(100);} } /**********************************屏幕顯示*********************************/ void pingmu(){ uchar disp,copymt;

uchar temp;

copymt = 0xff;

P0=0xff;

v_Get1302(&buffer);//讀取DS1302

Conver_week(0,buffer[6],buffer[4],buffer[3]);Chinesecalender(0,buffer[6],buffer[4],buffer[3]);disp = buffer[0] % 0x10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],2,100,0);//秒個位

temp =buffer[0] & 0x7f;temp = temp/16;disp = temp%10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],2,92,0);//秒十位

copymt = buffer[1];

disp = buffer[1] % 0x10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],2,68,0);//分個位

temp =buffer[1] & 0x7f;

temp = temp/16;

disp = temp%10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],2,60,0);//分十位

disp = buffer[2] % 0x10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],2,30,0);//時個位

temp =buffer[2] & 0x7f;

temp = temp/16;

disp = temp%10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],2,22,0);//時十位

disp = buffer[3] % 0x10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],0,100,0);//日個位

temp =buffer[3] & 0x7f;

temp = temp/16;

disp = temp%10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],0,92,0);//日十位

disp = buffer[4] % 0x10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],0,68,0);//月個位

temp =buffer[4] & 0x7f;

temp = temp/16;

disp = temp%10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],0,60,0);//月十位

disp = buffer[6] % 0x10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],0,30,0);//年個位

temp =buffer[6] & 0x7f;

temp = temp/16;

disp = temp%10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],0,22,0);//年十位

disp = buffer[7] % 0x10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],0,14,0);//年百位

temp =buffer[7] & 0x7f;

temp = temp/16;

disp = temp%10 + '0';

vWrite8x16Character(&char_Table[disp-0x20][0],0,6,0);//年千位

}

第三篇:單片機電子鐘設計任務書.

目 錄

一、課程設計的主要內容和要求 ……………………………………………… 1

二、實現原理等知識的介紹 …………………………………………………… 2 2.1電子時鐘的設計

2.2單片機識的相關知識

三、系統的總體方案設計說明;3.1總體設計方案 3.2總設計原理框圖

四、具體實現步驟的設計說明;

五、單片機系統程序的編制;

六、測量過程的操作說明,原始測量數據的記錄;

七、結論及存在問題;

八、心得體會總結;

九、參考文獻。

一、主要內容和要求 主要內容:設計一個數字式電子鐘,它具有時,分,秒的計時功能,可以 通過鍵盤進行時間設定, 并且將時間顯示在 LED 數碼管上。用按鍵設定時鐘的時、分、秒,用掃描方式動態顯示。時鐘用定時中斷方式工作,單片機晶體震蕩器頻 率 11.0592Mhz.??蛇x做雙機通信實驗, 實現子母鐘功能, 即由其中一臺做時鐘, 另一臺采集時鐘值并顯示。對于基本題目要求是: 用按鍵設定時鐘的時、分、秒。要求用 4鍵方式,即選擇、加、減、確認鍵, 選擇鍵用于選擇修改起始時、分、秒值,每按一次,被修改數碼管順序移動并閃 爍。用 +,鍵修改數值,確認鍵確定后秒位清零,修改結束。

2.2單片機的相關知識 1單片機簡介

單片機全稱為單片機微型計算機(Single Chip Microsoftcomputer。從應用領 域來看,單片機主要用來控制,所以又稱為微控制器(Microcontroller Unit或 嵌入式控制器。單片機是將計算機的基本部件微型化并集成在一塊芯片上的微型 計算機。單片機的發展史 3 4位單片機

1975年,美國德克薩斯儀器公司首次推出 4位單片機 TMS-1000;此后,各 個計算機公司競相推出四位單片機。日本松下公司的 MN1400系列,美國洛 克威爾公司的 PPS/1系列等。四位單片機的主要應用領域有:PC 機的輸入裝 置,電池充電器,運動器材,帶液晶顯示的音 /視頻產品控制器,一般家用 電器的控制 8位單片機

1972年,美國 Intel 公司首先推出 8位微處理器 8008,并于 1976年 9月率 先推出 MCS-48系列單片機。在這以后, 8位單片機紛紛面市。例如,莫斯特克 和仙童公司合作生產的 3870系列, 摩托羅拉公司生產的 6801系列等。隨著集成 電路工藝水平的提高,一些高性能的 8位單片機相繼問世。例如, 1978年摩托 羅拉公司的 MC6801系列及齊洛格公司的 Z8系列, 1979年 NEC 公司的 UPD78XX 系列。這類單片機的尋址能力達 64KB ,片內 ROM 容量達 4--8KB ,片內除帶有并 行 IO口外,還有串行

IO口,甚至還有 AD轉化器功能。8位單片機由于功能 強,被廣泛用于自動化裝置、智能儀器儀表、智能接口、過程控制、通信、家用 電器等各個領域。16位單片機

1983年以后,集成電路的集成度可達幾十萬只管 /片,各系列 16位單片機 紛紛面市。這一階段的代表產品有 1983年 Intel 公司推出的 MCS-96系列, 1987年 Intel 推出了 80C96,美國國家半導體公司推出的 HPC16040, NEC 公司推出的 783XX 系列等。16位單片機主要用于工業控制, 智能儀器儀表, 便攜式設備等場 合。32位單片機

隨著高新技術只智能機器人, 光盤驅動器,激光打印機,圖像與數據實時處 理,復雜實時控制,網絡服務器等領域的應用與發展, 20世紀 80年代末推出了 32位單片機,如 Motorlora 公司的 MC683XX 系列, Intel 的 80960系列,以及近年來流行的 ARM 系列單片機。32位單片機是單片機的發展趨勢,隨著技術的發 展及開發成本和產品價格的下降,將會與 8位單片機并駕齊驅。64位單片機

近年來, 64位單片機在引擎控制,智能機器人,磁盤控制,語音圖像通信, 算法密集的實時控制場合已有應用, 如英國 Inmos 公司的 Transputer T800是高性

能的 64位單片機。2.2.3單片機的特點

1單片機的存儲器 ROM 和 RAM 時嚴格區分的。ROM 稱為程序存儲器,只存 放程序,固定常數,及數據表格。RAM 則為數據存儲器,用作工作區及存放用 戶數據。采用面向控制的指令系統。為滿足控制需要,單片機有更強的邏輯控制能 力,特別是單片機具有很強的位處理能力。

3單片機的 I/O口通常時多功能的。由于單片機芯片上引腳數目有限,為了 解決實際引腳數和需要的信號線的矛盾, 采用了引腳功能復用的方法, 引腳處于 何種功能,可由指令來設置或由機器狀態來區分。單片機的外部擴展能力很強。在內部的各種功能部件不能滿足應用的需 求時,均可在外部進行擴展, 與許多通用的微機接口芯片兼容, 給應用系統設計 帶來了很大的方便。

2.2.4數碼管顯示工作原理

LED 數碼管分共陽極與共陰極兩種,其工作特點是,當筆段電極接低電平,公共陽極 接高電平時,相應筆段可以發光。共陰極 LED 數碼管則與之相反,它是將發光二極管的陰 極(負極 短接后作為反映出半導體材料的特性。常見管芯材料有磷化鎵(GaP、砷化鎵(GaAs、磷砷化鎵(GaAsP、氮化鎵(GaN等,其中氮化鎵可發藍光。發光顏色不僅與管芯材料有關, 還與所摻雜質有關,因此用同一種管芯材料可以制成發出紅、橙、黃、綠等不同顏色的數碼 管。其他顏色 LED 數碼管的光譜曲線形狀與之相似,僅入,值不同。LED 數碼管的產品中, 以發紅光、綠光的居多、這兩種顏色也比較醒目。

LED 數碼管等效于多只具有發光性能的 PN 結。當 PN 結導通時,依靠少數載流子的注 人及隨后的復合而輻射發光, 其伏安特性與普通二極管相似。在正向導通之前, 正向電流近似于零,筆段不發光。當電壓超過開啟電壓時,電流就急劇上升,筆段發光。因此, LED 數碼管屬于電流控制型器件,其發光亮度 L(單位是 cd /m2 與正向電流 IF 有關,用公式表 示:L=KIF即亮度與正向電流成正比。LED 的正向電壓 U ,則與正向電流以及管芯材料有 關。使用 LED 數碼管時,工作電流一般選 10mA 左右/段,既保證亮度適中,又不會損壞 器件。

三、系統的總體方案設計說明 3.1總體設計方案

本次設計時鐘電路,使用了 ATC89C52單片機芯片控制電路,單片機控制電 路簡單且省去了很多復雜的線路, 使得電路簡明易懂, 使用鍵盤鍵上的按鍵來調 整時鐘的時、分、秒,用一揚聲器來進行定時提醒,同時使用匯編程序來控制整 個時鐘顯示,使得編程變得更容易,這樣通過四個模塊:按鍵、芯片、揚聲器、LED 數碼管即可滿足設計要求。

3.2總設計原理框圖如下圖所示:

四、具體實現步驟的設計說明 4.1 電路設計原理說明

本設計電路,硬件部分共由五個模塊組成:按鍵模塊、復位電路模塊、晶振 電路模塊、發聲模塊、時間顯示模塊。晶振電路模塊負責給單片機提供時鐘周期。復位單路模塊負責上電后自動復位,或按鍵后強制復位。上電后, 由單片機內部 定時器計時,同時通過動態顯示函數自動將時分秒顯示到數碼管上。與此同時, 按鍵掃描函數,一直掃描按鍵引腳狀態, 一旦掃描到按鍵被按下, 即進入相應的

功能函數。4.2各部分電路說明 1按鍵模塊

按鍵模塊如圖所示。

在該模塊中, 采用四個按鍵作為電子時鐘的控制輸入, 通過按鍵來實現時鐘 的時間設置功能。電路中將四個按鍵的一端接公共地,而單片機的 P2口默認為 高電平, 一旦按鍵被按下, 則該按鍵對應的額管腳被拉低, 通過軟件掃描按鍵即 可知道用戶所要實現的功能,調用相應的按鍵子程序來完成該操作。

2單片機的復位電路

單片機的復位電路 , 如圖所示。

圖單片機的復位電路

當 MCS-5l 系列單片機的復位引腳 RST(全稱 RESET 出現 2個機器周期以上的 高電平時,單片機就執行復位操作。如果 RST 持續為高電平,單片機就處于循環 復位狀態。根據應用的要求, 復位操作通常有兩種基本形式:上電復位和上電或 開關復位。上電復位要求接通電源后,自動實現復位操作。上電后,保持 RST 一 段高電平時間。

3單片機的晶振電路

單片機的晶振電路,如圖所示。

圖 單片機的晶振電路

石英晶體也連接在晶振引腳的輸入和輸出之間,等效為一個并聯諧振回路, 振蕩頻率應該是石英晶體的并聯諧振頻率。晶體旁邊的兩個電容接地, 實際上就 是電容三點式電路的分壓電容 , 接地點就是分壓點。以接地點即分壓點為參考點, 振蕩引腳的輸入和輸出是反相的,但從并聯諧振回路即石英晶體兩端來看 , 形成 一個正反饋以保證電路持續振蕩。

4發聲模塊

發聲模塊,如圖所示。

圖 發聲指示模塊

發聲模塊由蜂鳴器、電源、8550三極管、限流電阻組成。蜂鳴器由 PNP 三 極管驅動,當 BZ 管腳為高時,三極管 be 級沒電壓差,三極管截止;反之,三極 管導通,有電流流經蜂鳴器,蜂鳴器發聲。

5時間顯示模塊

時間顯示模塊如圖所示。

圖 時間顯示模塊

時間顯示部分的電路也很簡單, 由五個一位的共陰 8段數碼管、五盞發光二

極管組成。在顯示過程中, 單片機將要顯示的數字傳遞給 89C52芯片, 同時通過 位選選通要顯示的數碼管。

五、單片機系統程序的編制 5.1程序設計 ORG 0000H LJMP START;轉初始化 ORG 000BH LJMP PGT0;T0中斷入口 ORG 0033H START: DIS1 EQU 30H DIS2 EQU 31H DIS3 EQU 32H DIS4 EQU 33H DIS5 EQU 34H DIS6 EQU 35H DISXS EQU 36H DISFZ EQU 37H DISMZ EQU 38H

MS500 EQU 39H K1 BIT P3.2 K2 BIT P3.3 K3 BIT P3.4 K4 BIT P3.5 BDP BIT 01H bd BIT 02H MOV SP,#50H;初始化程序 MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV P3,#0FFH MOV TMOD,#01H;定時器 T0工作于方式 1 MOV TH0,#4CH;定時器初值 MOV TL0,#05H MOV IE,#82H MOV R3,#10 SETB TR0 MOV DIS1,#00H;清顯示緩沖區

MOV DIS2,#00H MOV DIS3,#00H MOV DIS4,#00H MOV DIS5,#00H MOV DISXS,#12;初始化時間為 12:30:00 MOV DISFZ,#30 MOV DISMZ,#0 MOV MS500,#0 MAIN:;主程序 jnb k2,d1 jnb k3,d2 jnb k4,d3 jnb k1,d4 d1: ljmp send d2: ljmp send d3: ljmp send d4: jnb k1,qu1 qu1:lcall sound ajmp god1 k1dd: jb k2,k2dd lcall ys10ms 11

5.2 程序流程圖

六、測量過程的操作說明,原始測量數據的記錄。6.1 操作說明操作功能說明 功能說明表 按鍵 K1 K2 K3 K4 發光二極管 功能 當按一下 K1,進入調整小時狀態,再按一下,進入到調整分 鐘狀態,如此循環 用來對 小時 和 分鐘 進行加時間(每次加 1)用來對 小時 和 分鐘 進行減時間(每次減 1)確認鍵,退出選中小時或分鐘 對秒數的十位數進行記錄,亮一盞燈代表十秒,亮兩盞燈代表 二十秒,如此累推 6.2 原始測量數據的記錄 數據記錄表 初始值 按一次 K1 按一次 K2 按一次 K3 第二次按 K1 按一次 K2 按一次 K3 按 K4 12.30.0 12.##.# 13.##.# 12.##.# ##.30.# ##.31.# ##.30.# 12.30.0 16

七、結論及存在問題 通過用匯編對 K1、K2、K3、K4 的編譯,可以初步實現調整時鐘時間的功能。但在編譯過程中也遇到不少問題,第一,編譯時有跳出轉移范圍的問題,這是由 于判斷語句 JB、JNB 的轉移范圍是-128~+127 字節,出現這樣的問題是由于超出 轉移范圍。第二,要實現選中小時或者分鐘位上的閃爍,要用到延時和對數碼管 的顯示效果,但達不到指定目的,數碼管閃爍的效果不明顯,這是由于延時的時 間不夠長,使得人眼難以看得清。

八、心得體會總結 本文介紹的是利用 AT89C51 單片機設計的有調時功能的電子時鐘。并詳細說 明了軟件和硬件設計方法。在設計過程中可以看出,匯編語言有著其獨特的魅力,它簡單易學,語法錯誤容易糾正;用單片機實現電子時鐘的設計是比較方便和易 于實現。通過電子時鐘的設計和制作,加深了對單片機的理解,能夠更熟練地應用單 片機實現預期的功能,對今后的學習有很大的幫助。電子時鐘各項功能的實現,為自動控制的實現打下了理論基礎,獲得了實現方法。當然,該電子鐘還有很多不足之處,比如不能定時,不能報時。斷電后不能 只能調時。在今后的學習中還要對此加以研究,九、參考文獻及網站 《單片機原理及其接口技術》胡漢才 編著 北京 清華大學出版社 《51 系列單片機及 C51 程序設計》王建校等 科學出版社 其它有關資料 幾個有關單片機和芯片資料的網站: http://www.tmdps.cn http://www.tmdps.cn http://www.tmdps.cn http://www.tmdps.cn http://www.tmdps.cn 等及其相關鏈接 17 http://www.tmdps.cn http://www.tmdps.cn http://www.tmdps.cn/ ………….

第四篇:單片機課程設計電子鐘

課程設計任務書

(指導教師填寫)

課程設計名稱電子技術課程設計學生姓名專業班級設計題目數字鐘

一、課程設計的任務和目的任務:設計一臺能顯示“時”、“分”、“秒”的數字鐘,周期為24小時;具有校時、正點報時功能。

目的:培養學生綜合運用所學知識的能力,綜合設計能力,培養動手能力及分析問題、解決問題的能力。

二、設計內容、技術條件和要求

1.數字鐘可顯示“時”、“分”、“秒”,且“時”、“分”、“秒”分別用兩個數碼管顯示,計滿23小時60分鐘60秒,則全部清零。

2.具有校時功能,時、分校時用1HZ的信號進行,而秒較時用2HZ時鐘信號進行。

3.整點能自動報時。要求報時聲響為四低一高,最后一響為整點,前四聲用500HZ信號讓喇叭發聲,最后一聲用1000HZ信號。

4.根據上述要求,畫出電路總框圖,簡述各部分工作原理。

5.進行各部分電路的設計,要求有分析過程、原理圖表示。

6.對原理圖進行仿真。

7.在實驗箱上組裝、調試。

8.撰寫設計總結報告。

三、時間進度安排

第一周:理論設計。

周一上午布置設計任務,講解設計要求,安排答疑、實驗時間;

周三、周四下午課程設計答疑,其他時間學生查資料,做初步理論設計;

周五交設計初稿,由指導教師審查;

第二周:仿真和安裝調試、撰寫設計總結報告

周一、二學生進實驗室做仿真實驗,并根據實驗情況修正設計圖;

周三至周五做插接線實驗,最后根據實驗情況總結、撰寫設計說明書。

四、主要參考文獻

1.各種版本的數字電子技術基礎教材

2.各種版本的電子技術課程設計指導書

3.集成電路手冊

指導教師簽字:年月日

第五篇:單片機課程設計電子鐘設計

單片機課程設計電子鐘設計

目錄

一、摘要

二、設計任務

三、基本原理

數碼管顯示可以用靜態顯示或動態顯示方法。靜態顯示需要數據鎖存器等硬件,接口復雜,時鐘顯示用四個數碼管。動態顯示相對簡單,但需動態掃描,掃描頻率要大于人視覺暫留頻率,信息看起來才穩定。譯碼方式可分為軟件譯碼和硬件譯碼,軟件譯碼通過譯碼程序查的顯示信息的字段碼;硬件譯碼通過硬件譯碼器得到顯示信息的字段碼,實際中通常采用軟件譯碼。

在具體處理時,定時器計數器采用中斷方式工作,對時鐘的形成在中斷服務程序中實現。在主程序中只需對定時器計數器初始化、調用顯示子程序和控制子程序。另外,為了使用便,設計了簡單的按鍵,可以通過按鍵實現時、分的調整,這樣在主程序中就加入了按鍵設置子程序。

四、編程算法思路

五、程序流程圖

六、硬件單元設計

七、軟件單元設計

八、調試結果分析

九、設計總結及心得體會

十、參考文獻

一設計任務

1、基本任務:利用定時器/計數器中斷和靜態顯示或動態顯示,實現電子時鐘的時分秒精確走時和校準

。時間顯示用四個數碼管分別顯示時、分、秒用點表示,在時和分的中間閃動,時間顯示格式(18:49)

時間校準用2個鍵實現:一個鍵K1作移位選擇(選中要修改的位,選中的位用閃爍指示),一個鍵K2做加1(對選中的位進行加1修改)。

2、功能增強型任務:在基本任務的基礎上加上日歷功能、準時報時功能和跑表功能

(1)日歷功能:能實現時、分、秒和年、月、日計時,增加1個按鍵控制分3屏例如顯開始的第1屏默認顯示“時、分、秒”四位+秒點,按下K3鍵顯示“月和日”四位,再按下課K3鍵顯示“年份”四位,再按下K3鍵顯示“時、分、秒”,依次類推。程序要能處理閏年、閏月功能。

(2)準點報時功能:可以在增加一個按鍵K4設計具有鬧鐘功能,實現定點報時。具體操作是:按下

K4鍵,進入鬧鐘設置功能,再通過K1、K2鍵來完成定點報警時間的設置。

(3)跑表功能:再增加一個按鍵K5設計跑表功能,實現啟動毫秒計數,相當與田徑運動比賽的跑

表工作。

三基本原理

軟件時鐘時利用單片機內部的定時器/計數器來實現的,它的過程如下:首先定單片機內部的一個定時器/計數器工作于定時方式,對機器周期形成基準時間,然后用另一個定時器/計數器或軟件計數的方法對基準時間計數形成秒,秒計60次形成分,分計60次形成小時,小時計24次則計滿一天。然后通過數碼管把它們的內容在相應位置顯示出來即可。

四編程算法思路

1、主程序的設計:串行口工作方式0,定時器/計數器1工作在方式1進行初始化,然后通過循環(調用顯示子程序)等待定時中斷的到來。

2、按鍵的控制:KEY1控制時的調節,kEY2控制分的調節,KEY3控制時、分定型

3、中斷服務程序的設計:中斷服務程序主要功能是實現時、分、秒的計時處理。

4、時、分、秒計時的實現:秒計時時采用中斷方式進行溢出次數的累計得到的。從秒到分,從分到時可通過軟件的累加和比較到位方法來實現。要求每滿1秒,則“秒”單元中的內容加1;“秒”單元每滿60,則“秒”單元清0,同時“分”單元中的內容加1;“分”單元每滿60,則“分”單元清0,同時“時”單元加1。“時”單元每滿24,則將“時”單元清0。

5、顯示子程序:采用數碼管靜態顯示來顯示時鐘的走動

6,延時子程序:用來實現按鍵操控延時和實現整點12時報時

五程序流程圖

六硬件單元設計

1、電路總設計圖

2、AT89C51芯片

七軟件單元設計

1、資源分配:定時器T1,P1.6為調整時鐘,P1.5為調整分鐘,P1.4為控制調整

30H秒顯示單元,31H分顯示單元,32H時顯示單元,08H放分調整標

志,09H放時調整標志,0AH放閃爍標志

2、程序清單(加注釋)

八調試結果分析

在實驗操作過程中,將所寫好的程序打入計算機內,通過編譯檢查其是否有錯誤,如有錯誤將其改正,直至無誤后下載仿真器,實現運行。觀察實驗箱上的數碼管顯示,判斷其是否為所需結果,如果與所要求的有差別,需繼續調試,重新修改程序,檢查硬件設施不斷地調試,不斷地檢查直至得到所要的結果。在調試過程中,開始運行時能夠實現時鐘的顯示,但是無法實現其閃爍功能,后經不斷調試修改及同學的幫助最終實現該功能,能夠達到時鐘顯示調節的基本要求,還可以實現整點報時。但在增加其功能顯示年月時又出現一定的問題,未能實現該功能,程序存在一定的不足性,需繼續完善,實現更多的功能

九設計總結及心得體會

經過兩天的單片機課程設計,終于完成了我的電子時鐘的設計,雖然沒有完全達到設計要求,但從心底里說,還是高興的,畢竟這次設計把一些基本功能都做了出來,只是一些增強型功能未能實現。

在本次設計的過程中,我發現很多的問題,雖然以前還做過一些實驗但這次設計真的讓我長進了很多單片機課程設計重點就在于軟件算法的設計,需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個程序并不是一件簡單的事,要有通篇的全局思想考慮問題。在操作的過程中,出現許多錯誤,都是在連接處不能夠上下連貫正確運行,還需繼續努力。有好多的東西,只有我們去試著做了,才能真正的掌握,只學習理論有些東西是很難理解的,更談不上掌握。

從這次的課程設計中,我真真正正的意識到,在以后的學習中,要理論聯系實際,把我們所學的理論知識用到實際當中,學習單機片機更是如此,程序只有在經常的寫與讀的過程中才能提高,這就是我在課程設計中的最大收獲,同時,要把所學只是靈活應用才能真正領悟其中的意義,加深對它的理解與掌握。還有,通過此次的操作也使我的實踐操作能力得到了進一步的提高。

十參考文獻

【1】張毅剛,彭喜元,董繼成。單片機原理及應用。北京:高等教育出版社,2003

【2】周航慈。單片機應用程序設計技術(修訂版)。北京:北京航空航天大學出版社,2002

【3】萬光毅等。單片機實驗與實踐教程。北京:北京航空航天大學出版社,2003

【4】何立民,I2C總線應用系統設計。北京:北京航空航天大學出版社,2002

【5】周航慈,朱兆優,李躍忠。智能儀器原理與設計。北京:北航大學出版社,2005

下載單片機電子鐘實習報告word格式文檔
下載單片機電子鐘實習報告.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    單片機課程設計-電子鐘-完整

    單片機課程設計 題目 專業 通信工程 班級 11級1班 學號 姓名 電 子 鐘 設 計 單片機原理與應用課程設計 電子鐘設計 功能要求: 1、設計一個電子時鐘,要求可以顯示時、分......

    單片機實驗二電子鐘設計

    單片機實驗二:電子鐘設計 1、基礎部分:電子鐘能夠直觀、人性化顯示:時間、日期、星期,能夠按鍵校時, 用獨立的LED燈做流水燈裝飾。 2、提升部分:①帶有鬧鐘功能,能夠根據需要定時,②......

    多功能電子鐘設計 單片機課程設計報告東華理工

    單片機原理及應用設計課程設計報告 課題名稱:多功能電子鐘設計 姓 名: 學 號: 班 級: 指導老師:2017年6月13日 目錄 一、設計任務..................................................

    單片機課程論文設計-電子鐘課程設計

    單片機課程論文設計 ——電子鐘 一 課程設計的主要內容 1 設計思想 1.1硬件設計思想 1.1.1電路設計思想 電路原理圖見圖1,由動態數碼顯示組成時、分、秒的顯示。把“單片機......

    單片機課程設計電子鐘源程序[最終定稿]

    ORG0000H LJMPMAIN ORG001BH LJMPLOOP ORG0100H MAIN:MOV21H,#17H MOV22H,#3AH MOV23H,#00H;設定時間初值 MOV36H,#10 MOV39H,#10 MOVR7,#14H;循環20次50*20=1000msMOVDPTR,......

    單片機實習報告

    1602液晶顯示設計 一、實驗簡介: 通過學習本門課程,能夠掌握利用51單片機完成簡單項目的應用系統設計和調試,掌握單片機應用程序的編寫和調試過程。本次實習,我的題目是用51單片......

    單片機實習報告

    單片機實習報告 單片機>實習報告(一)這次實習我們使用控制電路的單片機是AT89S51型號的。通過它實現對八盞雙色燈發光二極管的控制P0和《單片機實習報告總結》正文開始》 這次......

    單片機實習報告

    重慶城市管理職業學院 信息工程學院單片機實習報告專業班級電子A0801 學號0401080112 姓名呂爽 組號第一組 實 驗 室 單片機實訓室成績評定 老師簽名2009年 12月 25日 實訓......

主站蜘蛛池模板: 精品国际久久久久999波多野| 欧美成人免费视频一区二区| 99精品久久精品一区二区| 海角国精产品一区一区三区糖心| 久久zyz资源站无码中文动漫| 久久青草资料网站| 中国丰满人妻videoshd| 上司人妻互换中文字幕| 亚洲人成人无码网www国产| 日本丰满的人妻hd高清在线| 伊人久久综在合线亚洲2019| 人人曰人人做人人| 国产乡下妇女做爰| 亚洲女教师丝祙在线播放| 亚洲午夜福利av一区二区无码| 日韩欧美tⅴ一中文字暮| 精品亚洲成a人片在线观看| 中文字幕av日韩精品一区二区| 久久露脸国产精品| 日韩乱码人妻无码中文字幕久久| 久久亚洲国产精品123区| 国产精品一区二区熟女不卡| 欧美牲交a欧美牲交aⅴ免费真| 亚洲欧美综合一区二区三区| 少妇人妻丰满做爰xxx| 中文字幕无线码| 国产小呦泬泬99精品| 国产亚洲人成网站在线观看琪琪秋| 免费看撕开奶罩揉吮奶头视频| 国产精品无码一区二区在线观一| 久久伊人五月丁香狠狠色| 久久人爽人人爽人人片av| 强开小嫩苞A片黑人| 国产午夜毛片v一区二区三区| 无码人妻啪啪一区二区| 2021最新在线精品国自产拍视频| 免费无码久久成人网站入口| 久久综合久久美利坚合众国| 亚洲精品蜜桃久久久久久| 亚洲精品久久久久久婷婷| 欧美牲交a欧牲交aⅴ久久|