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

基于51單片機電子時鐘設計

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

第一篇:基于51單片機電子時鐘設計

基于51單片機的電子時鐘設計

摘要

本電子時鐘以STC89C52單片機作為主控芯片,采用DS12C887時鐘芯片,使用1602液晶作為顯示輸出。該時鐘走時精確,具有鬧鐘設置,以及可同時顯示時間、日期等多種功能。本文將詳細介紹該電子時鐘涉及到的一些基本原理,從硬件和軟件兩方面進行分析。

【關鍵詞】

STC89C52單片機

DS12C887時鐘芯片

1602液晶

蜂鳴器

目錄

一、緒論…………………………………………………………4

1.1 電子時鐘功能…………………………………………1.2設計方案………………………………………………4

二、硬件設計……………………………………………………4

2.151

2.2 單片機部分設計………………………………4

USB供電電路設計………………………………5

2.3 串行通信電路設計………………………………6

2.4DS12C887時鐘芯片電路的設計…………………6

2.51602LCD液晶屏顯示電路設計………………7

2.6

蜂鳴器電路設計………………………………8

2.7

按鍵調整電路設計…………………………8

三、軟件設計…………………………………………9

3.1 系統程序流程圖設計…………………………9

3.2程序設計……………………………………11

四、心得體會………………………………………………22 參考文獻……………………………………………………23

一、緒

1.1電子時鐘功能

(1)在1602液晶上顯示年、月、日、星期、時、分、秒,并且按秒實時更新顯示。(2)具有鬧鈴設定即到時報警功能,報警響起時按任意鍵可取消報警。

(3)能夠使用實驗板上的按鍵隨時調節各個參數,四個有效鍵分別為功能選擇鍵、數值增大鍵、數值減小鍵和鬧鐘查看鍵。

(4)每次有鍵按下時,蜂鳴器都以短“滴”聲報警。

(5)利用DS12C887自身掉電可繼續走時的特性,該時鐘可實現斷電時間不停、再次上電時時間仍準確顯示在液晶上的功能。

1.2設計方案

DS12C887時鐘芯片+1602LCD液晶屏

DS12C887時鐘芯片功能豐富、價格適中,能夠自動產生世紀、年、月、日、時、分、秒等時間信息,其內部含有世紀寄存器,從而利用硬件電路解決“千年”問題。DS12C887中自帶鋰電池,外部掉電時,其內部時間信息還能保持10年之久。1602LCD液晶屏可以輸出2行,每行顯示16個字符。1602LCD液晶屏顯示清晰且不會閃爍,由于液晶屏是數字式的,因此和單片機系統的接口簡單,操作方便。

以STC89C52為主控芯片,DS12C887為時鐘芯片,1602LCD液晶屏作為顯示器。程序控制DS12C887時鐘芯片實現小時、分、秒和年、月、日的計時,并在1602LCD液晶屏上顯示出來。當時間走到程序所設定的時間時,蜂鳴器響起,起到鬧鐘功能。

二、硬

2.1 51單片機部分設計

單片機部分如圖2—1所示:

以STC89C52單片機為核心,選用12MHZ的晶振,由于晶振的頻率越高,單片機的運行速度就越快,考慮到單片機的運行速度快會導致對存儲器的要求就會變高,因此12MHZ為最佳選擇。外接電容的值雖然沒有嚴格的要求,但是外接電容的大小會影響振蕩器的頻率高低、振蕩器的穩定性和起振的快速性,因此選用30pF的電容作為起振電容。復位電路為按鍵高電平復位,當按鍵按下,RES端為高電平,當高電平持續4us的時間單片機即復位。

2.2 USB供電電路設計

USB供電電路如下圖2—2所示:

該電子時鐘采用USB端口的方式為單片機供電,LPOW1為電源顯示燈,當按鍵S5按下,電源顯示燈LPOW1亮,表示給單片機供+5V電。

2.3 串行通信電路設計

串行通信電路如下圖2—3所示:

圖中通過MAX232進行RS—232電平與單片機TTL電平之間的轉換,從而為單片機和上位機之間通信提供通道。通信電路的目的就是讓通信雙方的電平匹配,單片機用的是TTL電平,上位機的串口用的是RS—232電平。TTL電平邏輯1的電壓范圍是+3.3V到+5V,邏輯0的電壓范圍是0到+3.3V;RS—232電平的邏輯1的電壓范圍是—15V到—5V,邏輯0的電壓范圍是+5V到+15V。MAX232可以把輸入的+5V電源電壓變換成為RS—232輸出電平所需的+10V電壓。所以采用此芯片接口的串行通信系統只需單一的+5V電源就可以了。對于沒有+12V電源的場合,其適應性更強,2.4 DS12C887時鐘芯片電路的設計

時鐘芯片電路如下圖2—4所示:

DS12C887時鐘芯片共需要13條信號線,分別是并行數據地址復用線AD0~AD7,CS,AS,R/W,DS和IRQ。

MOT—總線操作時序選擇端。它有兩種工作模式,當MOT接

VCC時,選用Motorola模式;當MOT接GND或懸空時,選用Intel模式。NC—空引腳。

AD0~AD7—復用地址數據總線。在總線周期的前半部分,出現在AD0~AD7上的是地址信息,可用以選通DS12C887內的RAM,總線周期的后半部分出現在AD0~AD7上的是數據信息。GND,VCC—系統電源接入端。當

VCC輸入為+5V時,用戶可以訪問DS12C887內RAM的輸入小于+4.25V時,禁止用戶對內部RAM中的數據,并可對其進行讀/寫操作;當

VCC進行讀/寫操作,此時用戶不能正確芯片內的時間信息;當

VCC的輸入小于+3V時,DS12C887會自動的將電源切換到內部自帶的鋰電池上,以保證內部的電路能正常工作。

CS—芯片片選端。

AS—地址選通輸入端。在進行讀/寫操作時,AS的上升沿將AD0~AD7上出現的地址信息鎖存到DS12C887上,而下一個下降沿清除AD0~AD7上的地址信息,不論CS是否有效,DS12C887都將執行該操作。

R/W—讀/寫輸入端。該引接腳有兩種工作模式,當MOT接

VCC時,R/W工作在Motorola模式。此時該引腳的作用是區分讀操作還是寫操作,R/W高電平時為讀操作,R/W為低電平時為寫操作;當MOT接GND時,該引腳工作在Intel模式,此時該引腳為寫允許輸入,此信號的上升沿鎖存數據。

DS—數據選擇或讀輸入腳。該引腳有兩種工作模式,當MOT接

VCC時,選用Motorola模式,此時,每個總線周期后一部分的DS為高電平,稱為數據選通。在讀操作中,DS的上升沿使DS12C887將內部數據送往總線AD0~AD7上,以供外部讀取。在寫操作中,DS的下降沿將使總線AD0~AD7上的數據鎖存在DS12C887中。當MOT接GND時,選用Intel模式,此時該引腳是讀允許輸入引腳。

RESET—芯片復位引腳。

IRQ—中斷請求輸出。用作處理器的中斷申請輸入。只要引起中斷的狀態位置位,并且相應中斷使能位也置位,IRQ將一直保持低電平,處理器程序通常讀取C存儲器來清除IRQ引腳輸出,RESET引腳也會清除未處理的中斷。沒有中斷發生時,IRQ為高阻狀態,可將多個中斷器件接到一條IRQ總線上,只要它們均為漏極開路輸出即可。IRQ引腳為漏極開路輸出,需要使用一個外接上拉電阻與SQW—方波輸出引腳。當供電電壓

VCC相連。

VCC大于4.25V時,SQW引腳可輸出方波。

2.5 1602LCD液晶屏顯示電路設計

1602LCD液晶屏顯示電路如下圖2—5所示:

1602液晶為5V電壓驅動,帶背光,可顯示2行,每行16個字符,不能顯示漢字,內置含128個字符的ASCII字符集字庫,只有并行接口,無串行接口。接口說明如下:(1)液晶1,2端為電源;15,16為背光電源;為防止直接加5V電壓燒壞背光燈,在15腳串接一個1K?電阻用于限流。

(2)液晶3端為液晶對比度調節端,通過一個10K?電位器接地來調節液晶顯示對比度。首次使用時,在液晶上電狀態下,調節至液晶上面一行顯示出黑色小格為止。

(3)液晶4端為向液晶控制器寫數據/寫命令選擇端,接單片機的P3.5口。

(4)液晶5端為讀/寫選擇端,因為我們不從液晶讀取任何數據,只向其寫入命令和顯示數據,因此此端始終選擇為寫狀態,即低電平接地。

(5)液晶6端為使能信號,是操作時必須的信號,接單片機的P3.4口。

2.6 蜂鳴器電路設計

蜂鳴器電路如下圖2—6所示:

蜂鳴器電路接在單片機的P2.3引腳上,當該引腳一個低電平,三極管導通,蜂鳴器發出聲音作為鬧鈴。

2.7 按鍵調整電路設計

按鍵調整電路如下圖2—7所示:

四個獨立鍵盤均采用查詢方式,將按鍵的一端接地,另一端各接一根輸入線直接與STC89C52的I/O口相連。當按鍵閉合時,相當于該I/O口通過按鍵與地相連,變成低電平,單片機通過檢測I/O口的電平狀態,即可識別出按下的鍵。通過四個鍵實現參數的調節,S1為功能選擇鍵,S2為數值增大鍵,S3為數值減小鍵,S4為鬧鐘查看鍵。

三、軟

3.1 系統程序流程圖設計

流程圖1:實驗主程序流程圖

流程圖2:定時中斷程序流程圖

流程圖3:調時功能流程圖

3.2 程序設計

#include #include void delay(uint z)

//延時函數 {

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);} void di()

//蜂鳴器報警聲音 {

beep=0;

delay(100);

beep=1;} void

write_com(uchar com)

//寫液晶命令函數

{

rs=0;

lcden=0;

P0=com;

delay(3);

lcden=1;

delay(3);

lcden=0;} void write_data(uchar

data)

//寫液晶數據函數 {

rs=1;

lcden=0;

P0=data;

delay(3);

lcden=1;

delay(3);

lcden=0;} void

init()

//初始化函數 {

uchar

num;

EA=1;

//打開總中斷

EX1=1;

//開外部中斷1

IT1=1;

//設置負跳變沿觸發中斷

flag1=0;

//變量初始化

t0_num=0;

s1num=0;

week=1;

dula=0;

//關閉數碼管顯示

wela=0;

lcden=0;

rd=0;/*以下幾行在首次設置DS12C887時使用,以后不必再寫入

write_ds(0x0A,0x20);

//打開振蕩器

write_ds(0x0B,0x26);

//設置24小時模式,數據二進制格式,開啟鬧鈴中斷

set_time();

//設置上電默認時間

---------------*/

write_com(0x38);

//1602液晶初始化

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(num=0;num<15;num++)

//寫入液晶固定部分顯示

{

write_data(table[num]);

delay(1);}

write_com(0x80+0x40);

for(num=0;num<11;num++)

{

write_data(table1[num]);

delay(1);

} } void write_sfm(uchar add,char data)

{ //1602液晶刷新時分秒函數,4為時,7為分,10為秒

char

shi,ge;

shi=data/10;

ge=data%10;

write_com(0x80+0x40+add);

write_data(0x30+shi);

write_data(0x30+ge);} void

write_nyr(uchar add,char

data)

{

//1602液晶刷新年月日函數,3為年,6為月,9為日

char

shi,ge;

shi=data/10;

ge=data%10;

write_com(0x80+add);

write_data(0x30+shi);

write_data(0x30+ge);void

write_week(char we)

//寫液晶星期顯示函數 {

write_com(0x80+12);

switch(we)

{

case 1:

write_data('M');delay(5);

write_data('O');delay(5);

write_data('N');

break;

case 2:

write_data('T');delay(5);

write_data('U');delay(5);

write_data('E');

break;

case 3:

write_data('W');delay(5);

write_data('E');delay(5);

write_data('D');

break;

case 4:

write_data('T');delay(5);

write_data('H');delay(5);

write_data('U');

break;

case 5:

write_data('F');delay(5);

write_data('R');delay(5);

write_data('I');

break;

case 6:

write_data('S');delay(5);

write_data('A');delay(5);

write_data('T');

break;

case 7:

write_data('S');delay(5);

write_data('U');delay(5);

write_data('N');

break;

} } void keyscan(){ if(flag_ri==1){

//這里用來取消鬧鐘報警,按任意鍵取消報警

if((s1==0)||(s2==0)||(s3==0)||(s4==0))

{

delay(5);

if((s1==0)||(s2==0)||(s3==0)||(s4==0))

{

while(!(s1&&s2&&s3&s&s4));di();

flag_ri=0;

//清除報警標志

}

}

}

if(s1==0)

//檢測s1

{

delay(5);

if(s1==0)

{

s1num++;

//記錄按下次數

if(flag1==1)

if(s1num==4)

s1num=1;

flag=1;

while(!s1);di();

switch(s1num)

{

//光標閃爍點定位

case 1: write_com(0x80+0x40+10);

write_com(0x0f);

break;

case 2: write_com(0x80+0x40+7);

break;

case 3: write_com(0x80+0x40+4);

break;

case 4: write_com(0x80+12);

break;

case 5: write_com(0x80+9);

break;

case 6: write_com(0x80+6);

break;

case 7: write_com(0x80+3);

break;

case 8: s1num=0;

write_com(0x0c);

flag=0;

write_ds(0,miao);

write_de(2,fen);

write_ds(4,shi);

write_ds(6,week);

write_ds(7,day);

write_ds(8,month);

write_ds(9,year);

break;

}

}

}

if(s1num!=0)

//只有當s1按下后,才檢測s2和s3

{

if(s2==0)

{

delay(1);

if(s2==0)

while(!s2);di();

switch(s1num)

{

//根據功能鍵次數調節相應數值

case 1: miao++;

if(miao==60)

miao=0;

write_sfm(10,miao);

write_com(0x80+0x40+10);

break;

case 2: fen++;

if(fen==60)

fen=0;

write_sfm(7,fen);

write_com(0x80+0x40+7);

break;

case 3: shi++;

case 4:

case 5:

case 6:

case 7:

}

}

}

if(s3==0)

{

delay(1);

if(shi==24)

shi=0;

write_sfm(4,shi);

write_com(0x80+0x40+4);

break;week++;

if(week==8)

week=1;

write_week(week);

write_com(0x80+12);

break;day++;

if(day==32)

day=1;

write_nyr(9,day);

write_com(0x80+9);

break;month++;

if(month==13)

month=1;

write_nyr(6,month);

write_com(0x80+6);

break;year++;

if(year==100)

year=0;

write_nyr(3,year);

write_com(0x80+3);

break;

if(s3==0)

{

while(!s3);di();

switch(s1num)

{

//根據功能鍵次數調節相應數值

case 1: miao--;

if(miao==-1)

miao=59;

write_sfm(10,miao);

write_com(0x80+0x40+10);

break;

case 2: fen--;

if(fen==-1)

fen=59;

write_sfm(7,fen);

write_com(0x80+0x40+7);

break;

case 3: shi--;

if(shi==-1)

shi=23;

write_sfm(4,shi);

write_com(0x80+0x40+4);

break;

case 4: week--;

if(week==0)

week=7;

write_week(week);

write_com(0x80+12);

break;

case 5: day--;

if(day==0)

day=31;

write_nyr(9,day);

write_com(0x80+9);

break;

case 6: month--;

if(month==0)

month=12;

write_nyr(6,month);

write_com(0x80+6);

break;

case 7: year--;

if(year==-1)

year=99;

write_nyr(3,year);

write_com(0x80+3);

break;

}

}

}

}

if(s4==0)

//檢測s4

{

delay(5);

if(s4==0)

{

flag1=~flag1;

while(!s4);di();

if(flag1==0)

{

//退出鬧鐘設置時保存數值

flag=0;

write_com(0x80+0x40);

write_data(' ');

write_data(' ');

write_com(0x0c);

write_ds(1,miao);

write_ds(3,fen);

write_ds(5,shi);

}

else

{

//進入鬧鐘設置

read_alarm();

//讀取原始數據

miao=amiao;

//重新賦值用以按鍵調節

fen=afen;

shi=ashi;

write_com(0x80+0x40);

write_data('R');

//顯示標志

write_data('i');

write_com(0x80+0x40+3);

write_sfm(4,ashi);

//送液晶顯示鬧鐘時間

write_sfm(7,afen);

write_sfm(10,amiao);

}

}

} } void write_ds(uchar add,uchar

data){

//寫12C887函數

dscs=0;

dsas=1;

dsds=1;

dsrw=1;

P0=add;

//先寫地址

dsas=0;

dsrw=0;

P0=data;

//再寫數據

dsrw=1;

dsas=1;

dscs=1;} uchar

read_ds(uchar add){

//讀12C887函數

uchar

ds_data;

dsas=1;

dsds=1;

dsrw=1;

dscs=0;

P0=add;

//先寫地址

dsas=0;

dsds=0;

P0=0xff;

ds_data=P0;

//再讀數據

dsds=1;

dsas=1;

dscs=1;

return ds_data;} /*---首次操作12C887時給予寄存器初始化-----void set_time(){

//首次上電初始化時間函數

write_ds(0,0);

write_ds(1,0);

write_ds(2,0);

write_ds(3,0);

write_ds(4,0);

write_ds(5,0);

write_ds(6,0);

write_ds(7,0);

write_ds(8,0);

write_ds(9,0);}----------------------*/

void

read-alarm(){

//讀取12C887鬧鐘值

amiao=read_ds(1);

afen=read_ds(3);

ashi=read_ds(5);} void main()

//主函數 {

init();

//調用初始化函數

while(1)

{

keyscan();

//按鍵掃描

if(flag_ri==1)

//當鬧鐘中斷時進入這里

{

di();

delay(100);

di();

delay(500);

}

if(flag==0&&flag1==0)

//正常工作時進入這里

{

keyscan();

//按鍵掃描

year=read_ds(9);

//讀取12C887數據

month=read_ds(8);

day=read_ds(7);

week=read_ds(6);

shi=read_ds(4);

fen=read_ds(2);

miao=read_ds(0);

write_sfm(10,miao);

//送液晶顯示

write_sfm(7,fen);

write_sfm(4,shi);

write_week(week);

write_nyr(3,year);

write_nyr(6,month);

write_nyr(9,day);

}

} } void

exter()interrupt 2

//外部中斷1服務程序 {

uchar

c;

//進入中斷表示鬧鐘時間到

flag_ri=1;

//設置標志位,用于大程序中報警提示

c=read_ds(0x0c);

//讀取12C887的C寄存器表示響應了中斷 }

_______________________________________________________________________________ 以下為define.h源代碼:

_______________________________________________________________________________ #define uchar unsigned char #define uint unsigned int sbit dula=P2^6;sbit wela=P2^7;sbit rs=P3^5;sbit lcden=P3^4;sbit s1=P3^0;

//功能鍵 sbit s2=P3^1;

//增大鍵 sbit s3=P3^2;

//減小鍵 sbit s4=P3^6;

//鬧鐘查看鍵 sbit rd=P3^7;sbit beep=P2^3;

//蜂鳴器 sbit dscs=P1^4;sbit dsas=P1^5;sbit dsrw=P1^6;sbit dsds=P1^7;sbit dsirq=P3^3;bit flag1,flag_ri;

//定義兩個位變量

uchar count,s1num,flag,t0_num;

//其他變量定義 char miao,shi,fen,year,month,day,week,amiao,afen,ashi;uchar code

table[]=“201-

”;

//液晶固定顯示內容 uchar code

table1[]=“

:

:

”;

void write_ds(uchar,uchar);

//函數申明 void set_alarm(uchar,uchar,uchar);void read_alarm();uchar read_ds(uchar);void set_time();

四、心

在本次電子時鐘設計中對單片機的內部結構有了一定的了解,熟悉了各個引腳的功能,同時熟知了1602LCD液晶、DS12C887時鐘芯片的使用,以及各種電路的功能。

通過此次課程設計,無論是從軟件方面還是硬件方面,都進一步學習和鞏固了程序的總體設計和單片機的應用。在軟件方面,進一步熟悉了各條指令的功能及用法,定時、中斷的用法,更深一步學習了用C語言編寫實現電子時鐘的功能。在硬件方面,進一步熟悉并使用了keil軟件,在keil中編程,調試,運行;對電路的一些基本結構和設計有了更深一步的了解。在整個設計過程中,雖然出現了很多問題,有時確實叫人很心煩,但在發現問題后努力去解決,并獲得成功,這時會感到無比的快樂和具有成就感。只有自己動手去做,去應用,才能將學到的知識變成自己的。

程序不要光看不寫,一定要自己寫一次。最開始的時候,可能自己啥都不懂,這時可以抄人家的程序過來。但在抄的時候一定要看看每一句是干什么用的,來達到什么目的,運行后有什么后果,看明白了之后,就要自己寫一次。此時會發現,原來看明白別人的程序很容易,但到自己寫的時候卻一句也寫不出來,這就是差距。

單片機提高重在實踐,想要學好單片機,軟件編程必不可少。但是熟悉硬件對于學好單片機也是非常重要的。如何學習好硬件,動手實踐是必不可少的。我們可以通過自己動手做一個自己的電子制作,通過完成它,以提高對一些芯片的了解和熟練運用。這樣我們就可以多了解一些芯片的結構。

我學習的目標是希望在若干年以后能夠獨立設計一個復雜的系統,包括硬件電路和軟件部分。總之,通過這次電子技術設計我學到了許多,似乎離自己的目標又近了一步。

[1]郭天祥.51單片機C語言教程.電子工業出版社.2009 [2]譚浩強.C程序設計.清華大學出版社.1991 [3]孫育才 王榮興

孫華芳.ATMEL新型AT89S52系列單片機及其應用.清華大學出版社.2006 [4]謝維成.單片機原理及應用與51程序設計.清華大學出版社.2006

[5]鮑宏亞.MCS—51系列單片機應用系統設計及實用技術.中國宇航出版社.2005 [6]趙文博

劉文濤.單片機語言C51程序設計.人民郵電出版社.2006 [7]求是科技.8051系列單片機C程序設計.人民郵電出版社.2006

第二篇:單片機課程設計電子時鐘說明書

《電子時鐘》 課程設計說明書

專業班級:

11級自動化<3>班

名: 歐陽明長 李徐軍

陳龍

指導教師:

設計時間:

2013--12--17

物理與電氣工程學院

2013年12月17日

摘要

電子鐘在生活中應用非常廣泛,而一種簡單方便的數字電子鐘則更能受到人們的歡迎。所以設計一個簡易數字電子鐘很有必要。本電子鐘采用STC公司的AT89S52單片機為核心,使用12MHz 晶振與單片機AT89S52 相連接,通過軟件編程的方法實現以24小時為一個周期,同時8位7段LED數碼管(兩個四位一體數碼管)顯示小時、分鐘和秒的要求,并在計時過程中具有定時功能,當時間到達提前定好的時間進行蜂鳴報時。該電子鐘設有四個按鍵S12、S13、S14和S15鍵,進行相應的操作就可實現小時調整、分鐘調整和啟停功能。具有時間顯示、整點報時、校正等功能。走時準確、顯示直觀、運行穩定等優點。

關鍵詞 電子鐘;AT89S52;硬件設計;軟件設計

目錄 設計課題任務、功能要求說明及方案介紹……………………………………3 1.1 設計課題任務………………………………………………………………3 1.2 功能要求說明………………………………………………………………3 1.3 設計總體方案介紹及原理說明……………………………………………3 2 設計課題硬件系統的設計………………………………………………………3 2.1 設計課題硬件系統各模塊功能簡要介紹…………………………………4 3 設計課題軟件系統的設計………………………………………………………4 3.1 設計課題軟件系統各模塊功能簡要介紹…………………………………4 3.2 設計課題軟件系統程序流程框圖…………………………………………4 4 設計結論、仿真結果、誤差分析………………………………………………7 4.1 設計課題的設計結論及使用說明…………………………………………4 4.2 設計課題的誤差分析………………………………………………………7 4.3 設計體會……………………………………………………………………7 參考文獻 ……………………………………………………………………………7 附 錄 ……………………………………………………………………………8 1 設計課題任務、功能要求說明及方案介紹

1.1 設計課題任務

設計一個具有特定功能的電子鐘。具有啟停、時間顯示、報時等功能。并有時間設定,時間調整功能。

1.2 功能要求說明

設計一個具有特定功能的電子鐘。電子鐘上電從12時0分0秒開始運行,按下啟停鍵進入時鐘運行狀態;再按啟停鍵暫停運行,并且再次按下時能夠在原來的時間上繼續計時;運行到整點是能夠自動響鈴,通過外部按鍵可以進行實踐的調整,并且在運行時相應的LED燈等同步亮滅。

1.3 設計課題總體方案介紹及工作原理說明

本電子鐘主要由單片機、4*4獨立鍵盤、顯示接口電路和電源電路構成,設 計課題的總體方案如圖1.1所示:

圖1.1 總體設計方案圖

本電子鐘的所有的程序、參數均存放在AT89S52的內部RAM中。鍵盤采用動態掃描方式。利用單片機定時器產生定時效果通過編程形成數字鐘效果,再利用數碼管動態掃描顯示單片機內部處理的數據,同時通過端口讀入當前外部控制狀態來改變程序的不同狀態,實現不同功能。設計課題硬件系統的設計 2.1 設計課題硬件系統各模塊功能簡要介紹

本設計的硬件系統主要采用以下基本模塊來實現,單片機最小系統模塊,輸入模塊、輸出模塊、電源模塊。

(1)單片機最小系統模塊:包括8位微控制器AT89S52;電源復位電路;晶振電路。本模塊AT89S52系統控制核心,單片機系統復位由電源上電完成。

(2)輸入模塊:本模塊共用到了4個按鍵(S12、S13、S14、S15),分別完成時間的調整、啟停。1個電源開關(具有復位功能)。

(3)輸出模塊:本次設計顯示為8位,采用兩個四位一體數碼管(共陽極)8個PNP三極管驅動,并且還有蜂鳴器模塊。(4)電源模塊:USB供電及下載器。

設計課題軟件系統的設計

3.1 設計課題軟件系統個模塊功能簡要介紹

本設計的軟件系統主要采用以下基本模塊來實現,主程序、中斷服務程序、鍵盤輸入程序模塊、數碼管及其驅動模塊和延時模塊。

主程序:主要是用于對輸入信號的處理、輸出信號的控制和對各個功能程序模塊的控制。

中斷服務程序:主要是用于電子鐘的1S延時。鍵盤輸入程序模塊:主要是用于完成特定時間調整。

數碼管及其驅動模塊:主要是用于驅動數碼管及利用數碼管顯示時間。延時模塊:短延時用于數據的動態顯示,按鍵的判斷。

3.2 設計課題軟件系統程序流程框圖

系統程序采用匯編語言按模塊化方式進行設計,然后通過Keil軟件開發平臺將程序轉變成可燒寫文件。

主循環程序框圖如3.1所示;判斷進位程序如3.2所示; 計時一秒中斷程序如3.3所示; 啟停中斷框圖如3.4所示; 延時子程序框圖如3.5所示; 圖3.1 主循環程序 5

圖3.2 判斷進位子程序

圖3.3 計時一秒中斷

圖3.4 啟停中斷程序

圖3.5 延時子程序 設計結論、運行結果、誤差分析

4.1 設計課題的設計結論及使用說明

本設計為基于單片機的電子鐘的設計。剛開始,我們很多地方理不清頭緒,無從下手,只能從平時的實驗中得到一些方法,但通過認真研究設計課題,找書上網查資料,確定基本設計方案,對所用芯片功能進行查找、調試,設計中有四個按鍵,其中S12為分鐘加1調整,S13為小時加1調整,S14為外部響鈴按鍵,S15為啟停按鍵,另外當整點時間到時,蜂鳴器報警。這樣的結果與設計基本相符,基本上完成了設計任務。

4.2 設計課題的誤差分析

該電子鐘在運行中存在一定的誤差,誤差產生有三種原因,首先是采用的計時利用中斷來實現。而當電子鐘運行時間1秒時,又得去執行中斷程序,這個過程需要幾個機器周期。第二,硬件系統有一定的影響。第三,設計用到12MHz晶振,計算是滿20次為一秒鐘,實際會慢很多。

4.3 設計體會

本次課程設計,讓我們三人受益匪淺,認識到了自己的許多缺點和不足,使我深深的感受到了理論聯系實際的必要性及其重要性。

參考文獻

[1] 李全利.單片機原理與接口技術[M].高等教育出版社.2009.1.[2] 劉文秀.單片機應用系統仿真的研究[J].現代電子技術.2005, 第286 期.[3] 胡學海.單片機原理及應用系統設計[M],北京:電子工業出版社,2005.[4] 李廣第.單片機基礎[M],北京航空航天大學出版社,2006.7.附錄

程序代碼為:

ORG 0000H LJMP START ORG 0003H LJMP INTT0 ORG 0013H LJMP INTT1 ORG 000BH LJMP INTT ORG 0100H START:SETB EA SETB ET0 SETB IT0 SETB EX0 SETB IT0 SETB EX1 SETB IT1 MOV R7,#16 MOV TMOD,#01H MOV TH0,#15536/256 MOV TL0,#15536 MOD 256 MOV R0,#12 MOV R1,#0 MOV R2,#0 MOV R6,0FEH CLR TR0 L1:

LCALL PANDUAN;*****************

;記秒

MOV A,R2

MOV B,#10

DIV AB

MOV P2,#0FDH

LCALL XIANSHI

LCALL DELAY

MOV A,B

MOV P2,#0FEH

LCALL XIANSHI

LCALL DELAY;***************

;調分

JB P3.0,L40 L41:JB P3.0,L42 LJMP L41 L42:INC R1

;計分

L40: MOV A,R1

MOV B,#10

DIV AB

MOV P2,#0EFH

LCALL XIANSHI

LCALL DELAY

MOV A,B

MOV P2,#0F7H

LCALL XIANSHI

LCALL DELAY

MOV P2,#0FBH

MOV P0,#0BFH

LCALL DELAY;******************

;調時

JB P3.1,L45 L47:JB P3.1,L46 LJMP L47 L46:INC R0

;計時

L45: MOV A,R0

MOV B,#10

DIV AB

MOV P2,#07FH

LCALL XIANSHI

LCALL DELAY

MOV A,B

MOV P2,#0BFH

LCALL XIANSHI

LCALL DELAY

MOV P2,#0DFH

MOV P0,#0BFH

LCALL DELAY

;*************************;判斷5分鐘鬧鈴

CJNE R1,#5,L51

CLR P3.5

MOV P1,R6

MOV A,R6

RL A

MOV R6,A

LJMP L52 L51:CJNE R1,#6,L52

SETB P3.5 L52: LJMP L1

;***************;執行1秒鐘

INTT:DJNZ R7,L33

MOV R7,#16

INC R2

MOV P1,R6

MOV A,R6

RL A

MOV R6,A L33:RETI;*********************

;外部中斷

INTT0:CPL P3.5

MOV P1,#0

RETI;***********************

;啟停功能

INTT1:MOV P1,#0

LCALL DELAY

JB P3.3,L97

CPL TR0

L97: RETI;**********************

;顯示子程序

XIANSHI:MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

RET

;**********************

;延時子程序

DELAY:MOV R3,#20

DEL1:MOV R4,#50

DEL2:DJNZ R4,DEL2

DJNZ R3,DEL1

RET

;*******************

;判斷進位子程序

PANDUAN:

CJNE R2,#60,L31

MOV R2,#0

INC R1

L31:CJNE R1,#60,L32

MOV R1,#0

INC R0

L32:CJNE R0,#24,L35

MOV R0,#0

L35:RET

;********************

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H

DB 92H,82H,0F8H,80H,90H

END

第三篇:單片機課程設計報告,單片機電子時鐘

題 目:單片機課程設計報告

目 錄

一、設計目的二、程設計具體要求

三、單片機發展簡史

四、8051單片機系統簡介

五、8051單片機內部定時器/計數器簡介

六、程序電路

七、程序流程

八、程序代碼

九 實驗總結-要求寫出完整的論文以及心得體會

十 參考資料及小結

原 文 :一.目的1. 進一步熟悉和掌握8051單片機的結構及工作原理。

2. 掌握單片機的接口技術及相關外圍芯片的外特性,控制方法。

3. 通過課程設計,掌握以單片機核心的電路設計的基本方法和技術,了解表關電路參數的計算方法。

4. 通過實際程序設計和調試,逐步掌握模塊化程序設計方法和調試技術。

5. 通過完成一個包括電路設計和程序開發的完整過程,使學生了解開發一單片機應用系統的全過程,為今后從事相應打下基礎。

二.課程設計的體要求

a)原理圖設計。

1. 原理圖設計要符合項目的工作原理,連線要正確,端了要不得有標號。

2. 圖中所使用的元器件要合理選用,電阻,電容等器件的參數要正確標明。

3. 原理圖要完整,CPU,外圍器件,擴器接口,輸入/輸出裝置要一應俱全。

b)程序調計

1. 根據要求,將總體項能分解成若干個子功能模塊,每個功能模塊完成一個特定的功能。

2. 根據總體要求及分解的功能模塊,確定各功能模塊之間的關系,設直出完整的程序流程圖。c)程序調試將設計完的程序輸入,匯編,排除語法錯誤,生成*OBJ文件。

1. 按所設計的原理圖,在實驗平臺上連線,檢查無誤。

2. 將匯編后生成的*OBJ文件傳送到實驗裝置的,執行該程序,檢查該程序、是否達到設計要求,若未達

到,修改程序,直到達到要求為止,d)說明書

1. 原理圖設計說明

簡要說明設計目的,原理圖中所使用的元器件功能及在圖中的作用,各器件的工作過程及順序。

2. 程序設計說明

對程序設計總體功能及結構進行說明,對各子模塊的功能以及各子模塊之間的關系作較詳細的描述。

3. 畫出工作原理圖,程序流程圖并給出程序清單。

目前,單片機已廣泛應用到圖民經濟建設和日常生活的許多領域,成為測控技術現代化必不可少的重要工具。

單片機電子時鐘

作者:佚名來源:本站原創點擊數:

491更新時間:2007年06月27日

DS1302是Dallas公司生產的一種實時時鐘芯片。它通過串行方式與單片機進 行數據傳送,能夠向單片機提供包括秒、分、時、日、月、年等在內的實時時間

信息,并可對月末日期、閏年天數自動進行調整;它還擁有用于主電源和備份電源的雙電源引腳,在主電源關閉的情況下,也能保持時鐘的連續運行。另外,它還能提供31字節的用于高速數據暫存的RAM。鑒于上述特點,DS1302已在許多單片機系統中得到應用,為系統提供所需的實時時鐘信息。

一、DS1302的主要特性

1.引腳排列

500)this.width=500 border=0>

圖1DS1302引腳排列圖

DS1302的引腳排列如圖1所示,各引腳的功能如下:

X1,X2——32768Hz晶振引腳端;

RST——復位端;

I/O——數據輸入/輸出端;

SCLK——串行時鐘端;

GND——地;

VCC2,VCC1——主電源與后備電源引腳端。

2.主要功能

DS1302時鐘芯片內主要包括移位寄存器、控制邏輯電路、振蕩器、實時時鐘電路以及用于高速暫存的31字節RAM。DS1302與單片機系統的數據傳送依靠RST,I/O,SCLK三根端線即可完成。其工作過程可概括為:首先系統RST引腳驅動至高電平,然后在作用于SCLK時鐘脈沖的作用下,通過I/O引腳向DS1302輸入地址/命令字節,隨后再在SCLK

時鐘脈沖的配合下,從I/O引腳寫入或讀出相應的數據字節。因此,其與單片機之間的數據傳送是十分容易實現的。

二、時鐘的產生及存在的問題

(1)在實際使用中,我們發現DS1302的工作情況不夠穩定,主要表現在實時時間的傳送有時會出現誤差,有時甚至整個芯片停止工作。我們對DS1302的工作電路進行了分析,其與單片機系統的連接如圖2所示。從圖中可以看出,DS1302的外部電路十分簡單,惟一外接的元件是32768Hz的晶振。通過實驗我們發現:當外接晶振電路振蕩時,DS1302計時正確;當外接晶振電路停振時,DS1302計時停止。因此,我們認為32768Hz晶振是造成 DS1302工作不穩定的主要原因。

500)this.width=500 border=0>

圖2DS1302與單片機系統的連接圖

(2)DS1302時鐘的產生基于外接的晶體振蕩器,振蕩器的頻率為32768Hz。該晶振通過引腳X1、X2直接連接至DS1302,即DS1302是依靠外部晶振與其內部的電容配合來產生時鐘脈沖的。由于DS1302在芯片本身已經集成了6pF的電容,所以,為了獲得穩定可靠的時鐘,必須選用具有6pF負載電容的晶振。

然而,許多人在選用晶振時僅僅注意了晶振的額定頻率值,而忽視了晶振的負載電容大小,甚至連許多經銷商也不能提供所售晶振的負載電容。所以即使在使用中選用了符合32768Hz的晶振,但如果該晶振的負載電容與DS1302提供的6pF不一致時,就會影響晶振的起振或導致振蕩頻率的偏移,出現上述在應用中的問題。

三、利用輔助電容實現負載匹配

(1)當所選的晶振負載電容不是6pF時,可以采用增加輔助電容的方法提高或降低DS1302振蕩器的電容性負載,使之與晶體所需的電容值匹配。如果已知晶體的負載電容為CI,若CI<6pF,則可以增加一個并聯電容CS以產生所需的總負載電容CI,即CI=6pF+CS;若CI>6pF,則可以在晶體的一端增加一個串聯電容CS,以產生所需的負載電容CI,即1/CI=1/6pF+1/CS,通過計算即可得出應增加的輔助電容大小。輔助電容的接法如圖3所示。

圖3CS連接電路圖

(2)在使用前對晶體的負載電容并不知道的情況下,通過測定晶體振蕩頻率的方法可以確定該晶體的負載電容。

對于晶體振蕩器來說,其振蕩頻率與負載電容之間的關系是確定的。以本文討論的DS1302使用的32768Hz晶振為例:當它工作于所要求的負載電容時,能較準確地產生 32768Hz的頻率;當它的負載電容小于6pF時,其振蕩頻率會正向偏移;當它的負載電容大于6pF時,其振蕩頻率就會負向偏移。因此,對于未知負載電容的晶體應首先采用實驗的方法,在其兩端加入輔助電容使晶體起振,然后用頻率計測出振蕩頻率。若測得頻率大于32768Hz,說明負載電容偏小;若測得頻率小于32768Hz,說明負載電容偏大。對輔助電容逐步調整,最終使振蕩頻率盡可能接近32768Hz,則此時晶體端所接負載電容的總和就是適合該晶體的負載電容。

結論

以上方法經我們在實際工作中多次使用,證明確實有效。它放寬了DS1302在使用中對晶振的條件要求,增強了DS1302在工作中的穩定性,對DS1302更廣泛地應用具有積極的意義。

華東交大理工學院_2007-2008 _學年第_ 一 學期

課程設計安排計劃

班級:_05應電__課程:_單片機原理及接口技術_

一、課程設計題目:數碼管時鐘電路的設計

二、設計內容及要求:

LED數碼管時鐘電路24小時計時方式,時、分、秒用6位數碼管顯示。選用AT89C2051單片機,12MHZ晶振,6位共陽數碼管,要求有調時功能,其他功能學生可自由發揮。

三、設計方法與步驟:

1.設計硬件原理電路,選擇元器件、確定其參數。

2.設計印刷電路板電路(用面包板做)、焊接硬件電路。

3.設計匯編語言程序,調試硬件電路和程序。

4.編寫課程設計報告。

四、設計時間安排:

1.第十九周:周一、二,設計硬件原理電路,選擇元器件、確定其參數。

周三、四、五,設計印刷電路板電路(用面包板做)、焊接硬件電路。

2.第二十周:周一、二,設計匯編語言程序。

周三、四,燒錄程序,調試硬件電路和程序。

周五,編寫課程設計報告。

指導老師: 楊威

時間: 2007、1

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

青島理工大學琴島學院 課題名稱:單片機原理及應用課程設計學院:

專業班級:

學號:

學生:

指導教師:

設 計 報 告

第五篇:基于單片機的時鐘控制器設計

時鐘控制器設計任務書

1.設計目的與要求

設計出一個用于數字時鐘的控制器,準確地理解有關要求,獨立完成系統設計,要求所設計的電路具有以下功能:

(1)顯示: 可以顯示時、分和秒

(2)調時功能:時(0-24)、分和秒(0-60)可以連續可調(3)時間日誤差< 2秒(4)增加整點報時功能(5)增加鬧鐘任意設定功能 2.設計內容

(1)畫出電路原理圖,正確使用邏輯關系;(2)確定元器件及元件參數;(3)進行電路模擬仿真;(4)SCH文件生成與打印輸出;(5)PCB文件生成與打印輸出; 3.編寫設計報告

寫出設計的全過程,附上有關資料和圖紙,有心得體會。4.答辯

在規定時間內,完成敘述并回答問題。

目錄

1.引言…………………………………………………………………………-1-2 總體設計方案………………………………………………………………-1-2.1 設計思路…………………………………………………………………-1-2.2 方案確立…………………………………………………………………-1-2.3 設計方框圖………………………………………………………………-2-3 設計原理分析………………………………………………………………-2-3.1 系統硬件電路設計 ……………………………………………………-2-3.2 主控器件AT89S51 ………………………………………………………-2-3.3 譯碼器74HC245 …………………………………………………………-3-3.4 顯示電路 …………………………………………………………………3-3.5 按鍵電路…………………………………………………………………-4-3.6 復位電路…………………………………………………………………-4-3.7 蜂鳴電路…………………………………………………………………-5-3.8 時鐘電路…………………………………………………………………-5-3.9 總體原理圖………………………………………………………………-5-3.10程序框圖…………………………………………………………………-5-4 結束語………………………………………………………………………-7-參考文獻………………………………………………………………………-8-附錄 1 電路總原理圖 ………………………………………………………-9-附錄 2 總程序………………………………………………………………-10-

基于單片機控制的時鐘控制器

摘要:本設計以Atmel公司的AT89S51單片機為控制系統的核心,模型采用單片機作為主控制器,以匯編語言為程序設計的基礎,設計的一個用兩個四位一體數碼管串口顯示的時鐘控制電路,包含了時鐘控制電路的基本功能:數碼顯示,時間調整,鬧鐘設定,秒表顯示等,按照二十四小時循環,具有調節方便,簡單實用,可靠性強的優點,有很高的利用價值。關鍵詞:單片機 AT89C51 74LS245 數碼管 引言

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

2.1 設計思路

本設計采用AT89S51單片機為控制核心,產生精確的時鐘震蕩,來控制數碼管顯示電路來進行數碼顯示,外圍電路主要有復位電路,震蕩電路,按鍵電路,顯示電路,蜂鳴電路組成;復位電路可及時的對單片機進行復位,恢復到初始的狀態,震蕩電路主要用于計數,定時,產生合適的波特率,按鍵電路主要是給人們提供一個合適的人機對話的界面,方便人們進行實時的調節,顯示電路主要用于數碼的顯示,蜂鳴電路用于鬧鈴設定等輔助功能。2.2 方案確立

本設計主要有包含了時鐘電路,按鍵掃描,顯示電路等幾個部分。由單片機實現時鐘功能單片機內部具有定時器,可方便實現定時功能。按鍵電路:鍵盤分為矩陣式鍵盤掃描電路和獨立式按鍵電路。。矩陣式鍵盤電路,此類鍵盤是采用行列掃描方式,優點是當按鍵較多時可以降低占用單片機的I/O口數目,缺點是電路復雜且會加大編程難度。獨立按鍵電路,每個鍵單獨占有一根I/O接口線,每個I/O口的工作狀態互不影響,此類鍵盤采用端口直接掃描方式。缺點是當按鍵較多時占用單片機的I/O數目較多,優點是電路設計簡單,且編程極其容易。由于該系統采用了常規鐘表式的校對方式,用鍵較少,系統資源足夠用,故采用了獨立按鍵電路。顯示電路分為:靜態顯示法與動態顯示法,由于靜態顯示法需要數據鎖存器等硬件,接口復雜一些,又考慮到時鐘顯示只有6位,且系統沒有其它復雜的處理任務,所以決定采用動態顯示法。2.3 硬件設計方框圖

電路的設計以AT89S51單片機為核心,包含了按鍵電路,復位電路,震蕩電路,數 碼顯示電路,整點報時電路等一系列獨立環節,下面介紹一下電路設計過程中的總體框圖,如圖1所示。

圖1 時鐘電路總體框圖 設計原理分析

用AT89S51單片機控制的數字時鐘電路,外接震蕩電路,按鍵電路,顯示電路,蜂鳴電路等:用單片機電路P0口來輸出7段碼數據,P2.0~P2.5口作列掃描輸出;按鍵用P1口控制,分別用于調節時,分,以及秒表和鬧鐘的設定;P1.7口接5V的小蜂鳴器,用于按鍵發音以及定時提醒,整點報時提醒等;采用74HC245作為數碼管的段碼驅動,為了提供共陽LED數碼管的列掃描驅動電壓,用三極管8550做電源的驅動輸出;采用12MHZ晶振,可提高秒計時的精確性;在軟件設計方面,應完成時鐘控制電路的各項要求。

3.1 系統硬件電路設計

系統硬件電路主要組成:主控制器AT89S52、譯碼器74HC245、顯示電路、蜂鳴器電路,復位電路時鐘電路。3.2 主控器件AT89C51 AT89S51是一款低功耗,高性能CMOS 8位單片機,片內含4k Bytes ISP(In-system programmable)的可反復擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術制造,兼容標準MCS-51指令系統及80C51引腳結構,芯片內集成了通用8位中央處理器和ISP Flash存儲單元,AT89S51在眾多嵌入式控制應用系統中得到廣泛應用。管腳如圖2所示。

圖2 DIP-40封裝89C51引腳圖

3.3譯碼器74LS245 74LS245是我們常用的芯片,用來驅動led或者其他的設備,它是8路同相三態雙向總線收發器,可雙向傳輸數據。74LS245還具有雙向三態功能,既可以輸出,也可以輸入數據。當89S51單片機的P0口總線負載達到或超過P0最大負載能力時,必須接入74LS245等總線驅動器。當片選端/CE低電平有效時,DIR=“0”,信號由 B 向 A 傳輸;(接收)DIR=“1”,信號由 A 向 B 傳輸;(發送)當CE為高電平時,A、B均為高阻態。P0口與74LS245輸入端相連,E端接地,保證數據線暢通。管腳如圖3所示。

圖3 74LS245管腳圖

3.4 顯示電路

LED顯示塊是由發光二極管顯示字段的顯示器件。這種顯示塊有共陰與共陽兩種結構。共陰極LED顯示塊的發光二極管陰極共地,當某個發光二極管的陽極為高電平時,發光二極管點亮。共陽極LED顯示塊的放光二極管陽極并接。顯示塊與單片機接口非常容易,只要將一個8位并行輸出口語顯示塊的發光二極管引腳相連即可(AT89S51需要加上拉電阻)。此次電路采用2個4位共陽LED數碼管,從P0口輸出段碼,列掃描用P2.0~P2.7來實現。如圖4所示。

圖4 74LS245驅動段碼顯示電路圖

3.5 按鍵電路

按鍵調節電路有四個獨立的按鍵接到P1口的P1.0—P1.3端口,控制著電路的調時,調分以及秒表功能和鬧鐘的設定。具體電路如下圖5所示。

圖5 按鍵電路圖

3.6 復位電路

AT89S51單片機的復位電路,如圖5所示中左邊電路。在RESET輸入端出現高電平時實現復位和初始化。在震蕩器運行的情況下,要實現復位操作,必須使RST引腳至少 保持兩個機器周期的高電平。在CPU在第二個機器周期內執行內部復位操作,以后每一個機器周期重復一次,直至RST端電平變低復位期間不產生ALE信號。當RST引腳返回低電平以后,CPU從0地址開始執行程序。3.7 蜂鳴電路

蜂鳴器是廣泛應用于各種電子產品的一種元器件,它用于提示、報警、音樂等許多應用場合。三極管8550作蜂鳴器的驅動,增加了蜂鳴器的驅動電流。蜂鳴器的正極性的一端接到三極管的集電極,另一端連接到地,三極管的基極由單片機的P1.7管腳控制,底電平時蜂鳴器響,高電平時不響。另外,蜂鳴器的聲音大小及音調可以通過調整P1.7管腳的置低時間及輸出的波形進行控制。蜂鳴器的連接電路的原理圖如圖5所示。3.8 時鐘電路

AT89S51內部片內有一個由反相放大器構成的振蕩電路,XTAL1和XTAL2分別為震蕩電路的輸入端和輸出端。時鐘可以由內部方式產生或外部方式產生。在XTAL1和XTAL2引腳上外接定時元件,內部震蕩電路就產生自己震蕩。定時元件通常采用石英晶體和電容組成的并聯諧振回路。外部方式的時鐘電路,XTAL1接地,XTAL2接外部振蕩器。一般要求輸入方波信號的頻率低于33Mhz。本文設計的系統采用的是內部方式的時鐘電路。如圖6所示。

圖6 時鐘電路原理圖

3.9 總體原理圖

見附錄1 3.10程序框圖

主程序如圖7所示首先是初始化部分,主要是計時單元清零,中斷初始化,啟動定時器工作,然后是調用顯示子程序,接著是判斷有無按鍵。無按鍵則回到調用顯示子程序處;有按鍵,則執行按鍵處理子程序,執行完后回到調用顯示子程序處,重復循環。定時器T0中斷如圖8所示

圖7 主程序流程圖

圖8 中斷程序流程圖 結束語

三周實習很快就過去了,通過自行設計、焊接和調試一個單片機系統,我熟悉了單片機基本的開發流程和單片機的深入學習。在完成這個設計的同時,我復習了書本上的許多相關內容,受益匪淺。因此我在獲得理論知識的同時,實踐中也獲得了許多書本上沒有的東西。提高了調試以及查找并解決問題的能力,我深入了解了焊普通元件與電路元件的技巧、數字時鐘的工作原理及其它各電路元件的作用等。這些知識不僅在課堂上有效,對以后的學習工作有很大的指導意義,在日常生活中更是有著現實意義;也對自己的動手能力是個很大的鍛煉。實踐出真知,縱觀古今,所有發明創造無一不是在實踐中得到檢驗的。沒有足夠的動手能力,就奢談在未來的科研尤其是實驗研究中有所成就。最后,感謝老師對我們這次實習的辛勤指導和幫助。

參考文獻

[1] 李光飛,樓然苗,胡佳文編著.單片機課程設計實例指導.北京:北京航空航天大學出版社.2004 [2] 黃仁欣主編.單片機原理及應用技術.北京: 清華大學出版社.2005.[3] 高吉祥主編.電子技術基礎實驗與課程設計.北京:電子工業出版社.2002 [4] 肖玲妮.印刷電路板設計教程.[M].北京:清華大學出版社,2003.[5] 康華光.電子技術基礎.[M].北京;高等教育出版社,2006.[6] 余小平等.電子系統設計.[M].北京:北京航空航天大學出版社,2007.附錄1: 11 電路總原理圖

附錄2: 總程序

ORG 0000H LJMP START ORG 000BH LJMP INIT0 START: MOV 70H,#0 MOV 71H,#0 MOV 72H,#0 MOV 73H,#0 MOV 74H,#0 MOV 75H,#0 MOV 76H,#0 MOV 77H,#0 MOV 78H,#0 MOV 79H,#0 MOV 7AH,#0 MOV 7BH,#0 MOV 7CH,#0 MOV 7DH,#0 MOV 7EH,#0 MOV 72H,#0AH;對連字符進行裝值

MOV 75H,#0AH MOV 60H,#0 MOV 61H,#0 MOV 63H,#0 MOV 64H,#0 CLR P1.7 MOV TMOD,#01H;選擇定時器/計數器T0的方式1 MOV TL0,#0B0H;對低位賦初值 MOV TH0,#03CH;高位賦初值 SETB EA SETB ET0 SETB TR0 START1: LCALL SCAN LCALL KEYSCAN SJMP START1 DL1MS: MOV R6,#14H;延時1子程序 DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET DELAY: MOV R6,#10 D1: MOV R7,#30 DJNZ R7,$ DJNZ R6,D1 RET

DL20MS: ACALL SCAN;延時20ms子程序 ACALL SCAN ACALL SCAN RET

;整點報時將秒和分的單元與零比較 SCAN: MOV A,7EH;7F單元的內容為0

CJNE A,79H,NEXT MOV A,7DH

CJNE A,7AH,NEXT SETB P1.7 AJMP NEXT1 NEXT: CLR P1.7 NEXT1:

MOV A,79H

CJNE A,#0,NEXT2 MOV A,78H

CJNE A,#0,NEXT2 SETB P1.7 LJMP NEXT3 NEXT2:CLR P1.7

;數碼管總顯示程序開始分兩部分

;校正時間和數碼管正常工作的顯示程序 NEXT3: MOV A,78H MOV B,#0AH

DIV AB;時間秒的十位送給A,時間秒的個位送B

MOV 71H,A;時間秒要顯示的十位

MOV 70H,B;時間秒要顯示的個位

MOV A,79H MOV B,#0AH

DIV AB;時間分的十位送給A,時間分的個位送B

MOV 74H,A;時間分要顯示的十位送地址

MOV 73H,B;時間分要顯示的個位送地址

MOV A,7AH MOV B,#0AH DIV AB;時間時的十位送給A,時間時的個位送B MOV 77H,A;時間時顯示的十位送地址

MOV 76H,B;時間時要顯示的個位送地址

MOV R1,#70H LCALL DL1MS JB P1.2,LAST HERE3:JNB P1.2,HERE3 INC 7EH MOV A,7EH

CJNE A,#3CH,LOOP3 MOV 7EH,#00H;調制鬧鈴的時間顯示 LOOP3: MOV DPTR,#TAB MOV R5,#0FEH MOV A,7DH MOV R3,#09H

MOV B,#10 SCAN1: MOV A,R5;數碼管正常工作的顯 DIV AB 示程序

MOV 64H,A MOV P2,A MOV 63H,B MOV A,@R1 MOV A,7EH MOV DPTR,#TAB

MOV B,#10 MOVC A,@A+DPTR;對字段表取值 DIV AB 顯示

MOV 61H,A MOV P0,A MOV 60H,B MOV A,R5 MOV P2,#0F7H LCALL DL1MS MOV A,60H INC R1 MOVC A,@A+DPTR MOV A,R5 MOV P0,A RL A LCALL DELAY MOV R5,A MOV P2,#0EFH DJNZ R3,SCAN1 MOV A,61H MOV P2,#00H MOVC A,@A+DPTR MOV P0,#00H MOV P0,A JB P1.3,QQ LCALL DELAY LCALL DL1MS MOV P2,#0DFH JB P1.3,QQ MOV P0,#40H HERE: JNB P1.3,HERE LCALL DELAY SJMP LOOP1 MOV P2,#0BFH

MOV A,63H QQ: LJMP LAST MOVC A,@A+DPTR LOOP1:JB P1.1,LOOP2 MOV P0,A LCALL DL1MS LCALL DELAY JB P1.1,LOOP2 MOV P2,#07FH HERE1:JNB P1.1,HERE1 MOV A,64H INC 7DH MOVC A,@A+DPTR MOV A,7DH

MOV P0,A CJNE A,#18H,LOOP2 LCALL DELAY MOV 7DH,#00H JB P1.3,LOOP4 LOOP2:JB P1.2,LOOP3 LCALL DL1MS 14 JB P1.3,LOOP4 HERE4:JNB P1.3,HERE4 LJMP LAST LOOP4:LJMP LOOP1 LAST: RET;“0~9”和“-”的字段表 TAB:

DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H

;定時/計數器T0中斷程序 INIT0: PUSH ACC PUSH PSW CLR ET0 CLR TR0 MOV TL0,#0B0H MOV TH0,#03CH SETB TR0 INC 7BH MOV A,7BH CJNE A,#14H,OUTT0;50ms是否到20次,沒有到就繼續執行50ms的延時

MOV 7BH,#00 INC 78H MOV A,78H CJNE A,#3CH,OUTT0;一秒的延時是否計到60次,沒有就繼續執行

MOV 78H,#00 INC 79H MOV A,79H CJNE A,#3CH,OUTT0 MOV 79H,#00 INC 7AH MOV A,7AH CJNE A,#18H,OUTT0;60分鐘的延時是否計到24次,沒有就繼續執行程序 MOV 7AH,#00 OUTT0: SETB ET0;啟動定時器T0 POP PSW POP ACC RETI;按鍵處理程序 KEYSCAN:CLR EA

JNB P1.0,KEYSCAN0;P1.0有按鍵按下則跳轉到子程序

JNB P1.1,KEYSCAN1;P1.1有按鍵按下則跳轉到子程序

JNB P1.2,KEYSCAN2;P1.2有按鍵按下則跳轉到子程序

KEYOUT: SETB EA RET

KEYSCAN0:LCALL DL20MS;20ms的延時消抖

JB P1.0,KEYOUT WAIT0: JNB P1.0,WAIT0;判斷按鍵是否松手,松手就往下執行程序 INC 7CH MOV A,7CH CLR ET0 CLR TR0

CJNE A,#04H,KEYOUT;按下第一次和第二次對時、分選定

MOV 7CH,#00;按下第三次時就啟動計時

SETB ET0 SETB TR0 LJMP KEYOUT

KEYSCAN1:LCALL DL20MS;按鍵加一的程序

JB P1.1,KEYOUT WAIT1: JNB P1.1,WAIT1 MOV A,7CH

CJNE A,#03H,KSCAN11;如果功能鍵按下則對時加一調整 INC 78H MOV A,78H

CJNE A,#60,KEYOUT MOV 78H,#00 LJMP KEYOUT

KSCAN11: CJNE A,#02H,KSCAN12 INC 79H MOV A,79H

CJNE A,#60,KEYOUT;如果加到60則清零

MOV 79H,#00 LJMP KEYOUT KSCAN12:CJNE A,#01H,KEYOUT INC 7AH;如果功能鍵是按下第二次則對分進行加一調整

MOV A,7AH CJNE A,#18H,KEYOUT MOV 7AH,#00 LJMP KEYOUT KEYSCAN2:LCALL DL20MS;延時消抖程序 JB P1.2,KEYOUT WAIT2: JNB P1.2,WAIT2;判斷是否放開按鍵

MOV A,7CH;如果功能鍵是按下第一次對時進行減一 CJNE A,#03H,KSCAN22 DEC 78H MOV A,78H CJNE A,#00H,KEYOUT MOV 78H,#3BH LJMP KEYOUT KSCAN22:CJNE A,#02H,KSCAN23 DEC 79H MOV A,79H CJNE A,#00H,KEYOUT1 MOV 79H,#3BH LJMP KEYOUT KSCAN23:CJNE A,#01H,KEYOUT1 DEC 7AH MOV A,7AH;如果功能鍵是按下第二次則對分進行減一 CJNE A,#00H,KEYOUT1 MOV 7AH,#17H LJMP KEYOUT1 KEYOUT1: SETB EA RET END

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

文檔為doc格式


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

相關范文推薦

    AVR單片機的時鐘設計(范文)

    基于AVR單片機Mega16的時鐘設計報告1摘 要近年來隨著計算機在社會領域的滲透和大規模集成電路的發展,單片機的應用正在不斷地走向深入,由于它具有功能強,體積小,功耗低,價格便宜,......

    數字電子時鐘設計

    (電子技術課程) 設計說明書 數字電子時鐘 起止日期: 2016 年11月23日 至2016年 11月 27 日 學生姓名 班級 學號 成績 指導教師(簽字) 交通工程學院(部) 2016年11月29日 數字......

    單片機課程設計 (51單片機實現電子時鐘)(精選五篇)

    湖北文理學院 單片機課程設計 題目:用51單片機實現電子時鐘 院 部 物理與電子信息工程學院 專 業 名 稱 電子信息科學與技術 班 級 1111 姓 名 楊慶月 學 號 2011111136 指......

    電子時鐘 單片機實習報告(寫寫幫推薦)

    桂林理工大學博文管理學院 實習名稱:專業班級:學生姓名:指導老師:實習時間: 實習報告 單片機應用實踐 學號: 2015年12月14日至 2016年1月4日 題目名稱:基于MSP430G2231實現的簡......

    基于單片機的時鐘控制器設計論文

    單片機原理與應用技術課程設計報告 基于單片機控制的時鐘控制器 專業班級: _電氣XX班_ __ 姓名:__ ___XXX__ ___ 時 間:2013/11/25~12/15 指導教師: XXXX XXX 2013年12月11日......

    數字電路電子時鐘課件設計

    數字電路電子時鐘課程設計 數字電路電子時鐘課程設計 整個數字鐘由時間計數電路、晶體振蕩電路、校正電路、整點報時電路組成。 其中以校正電路代替時間計數電路中的時、分......

    電子時鐘電子CAD設計報告

    電子電路CAD課程設計 流水燈 內 容 摘 要 《電子線路CAD Protel》是一門實踐性要求很高的課程,學生需要通過上機實習和設計環節鞏固所學知識,進而綜合運用所學知識針對不同的......

    89C51單片機時鐘程序

    SECOND EQU 40H ;給內存RAM空間中40H單元起名SECOND MINUTE EQU 41H ;給內存RAM空間中41H單元起名MINUTE HOUR EQU 42H ;給內存RAM空間中42H單元起名HOUR SECONDGEWEI EQ......

主站蜘蛛池模板: 大屁股熟女一区二区三区| 中文字幕精品一区二区2021年| 国产剧情av麻豆香蕉精品| 久久婷婷五月综合色高清| 少妇爆乳无码av无码专区| 日本韩国男男作爱gaywww| 爽爽精品dvd蜜桃成熟时电影院| av永久免费网站在线观看| 日本中文字幕一区二区高清在线| 国产欧美日韩精品专区| 国产精品久久久久久tv| 欧洲日本一线二线三线区本庄铃| 国产精品99久久99久久久动漫| 精品国产av一区二区果冻传媒| 人妻熟女av一区二区三区| 不卡一卡二卡三乱码免费网站| 久久久久人妻一区二区三区vr| 香蕉在线 亚洲 欧美 专区| 美女视频黄频大全免费| 亚洲一区av无码专区在线观看| 国产永久免费高清在线观看| 国产做a爱片久久毛片a片高清| 亚洲另类无码专区丝袜| 久久人妻国产精品| 一本色道久久综合无码人妻| 手机成亚洲人成电影网站| 丰满熟女人妻一区二区三| 国产成人精品亚洲日本777| 国产精品午夜在线观看体验区| 国产成人免费高清直播| 国产成人一区二区无码不卡在线| 国产精品久久久久av福利动漫| 色欲av亚洲一区无码少妇| 337p粉嫩日本欧洲亚洲大胆| 欧美日韩亚洲国内综合网38c38| 午夜性色一区二区三区不卡视频| 国产成人无码区免费内射一片色欲| 成人久久免费网站| 最新69成人精品视频免费| 乱熟女高潮一区二区在线| 亚洲中文字幕无码爆乳|