可調(diào)試數(shù)字電子時鐘電路的設(shè)計(吳丹)_第1頁
可調(diào)試數(shù)字電子時鐘電路的設(shè)計(吳丹)_第2頁
可調(diào)試數(shù)字電子時鐘電路的設(shè)計(吳丹)_第3頁
可調(diào)試數(shù)字電子時鐘電路的設(shè)計(吳丹)_第4頁
可調(diào)試數(shù)字電子時鐘電路的設(shè)計(吳丹)_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、杭州職業(yè)技術(shù)學(xué)院 畢業(yè)設(shè)計(作品) (2010屆)作品名稱 可調(diào)試數(shù)字電子時鐘電路的設(shè)計系 別 信 息 電 子 系 專 業(yè) 應(yīng)用電子技術(shù) 班 級 應(yīng)電0842 學(xué) 號 0803402038姓 名 吳 丹 指導(dǎo)教師 張雪娟 2010年5 月8 日一、作品原理圖 數(shù)字顯示時鐘的主要功能是用24進(jìn)制顯示一天的時間,在單片機(jī)的輔助下能通過對時間進(jìn)行調(diào)試,在斷電的情況下能準(zhǔn)確的計時。電路如圖1所示。在實際電路中主要運(yùn)用的是ds1320涓流充電時鐘芯片(u2)對時間進(jìn)行24進(jìn)制的計時,在通過atmega8l-8pi可編程8位控制器(u1)對在四位數(shù)碼顯示管上顯示出真確的時間,s1 ,s2 ,s3 是分別控

2、制時鐘調(diào)整時間的,在電路中還加入了一個蜂鳴器,當(dāng)s1,s2 ,s3中的任何一個按下的時候就會發(fā)出聲音,這是對以后能更好檢查是哪個按鈕失靈的好方法。u1單片機(jī)的10-14的管腳分別于四位數(shù)碼顯示管上的abcdefg、dp相連,2345的管腳分別和四位數(shù)碼顯示管上的1234,這樣的連接就可以在四位數(shù)碼顯示管上真確的顯示數(shù)字0-9十個數(shù)字了,在u2集成塊上我們多加了一個電源vcc,在實際的電路中我們運(yùn)用了一個3v的紐扣電池,在這種情況下即使單片機(jī)沒有通電,集成塊也能精確的記錄沒電時的時間,在下次通電的時候還是和現(xiàn)在的時間是一致的。圖1 電路原理圖二、程序設(shè)計在程序方面我們運(yùn)用的是c語言的編程,在這個

3、編程里,我們分別實現(xiàn)了對24進(jìn)制時間的調(diào)整,在正確顯示時鐘的同時還防止了時鐘錯誤顯示的功能。/ Define FPU and device defaults#include "config.h"#include <avr/io.h>#include <avrinterrupt.h>#include <util/delay.h>#include <avr/pgmspace.h>#include "LED47.h"#include "utils.h"#include "keys.h

4、"#include "DS1302.h"#include "buzzer.h"#define UPDATE_INTERVAL 60#define BLINKING_CRYCLE 3#define KEY_REPEAT_LIMIT_SET 1#define KEY_REPEAT_LIMIT_SHIFT 1#define KEY_REPEAT_LIMIT_UP 1#define ALARM_SECONDS 60#define ALARM_STOP 0#define ALARM_IN_ACTION 1int main (void)/byte Init

5、Val7=dec2bcd(00),dec2bcd(00),dec2bcd(17),dec2bcd(8),dec2bcd(3),dec2bcd(6),dec2bcd(9); /初始數(shù) 秒,分,時,日, 月,星期,年 byte ReadVal7=0x00,0x00,0x00,0x00,0x00,0x00,0x00;byte SaveSec, DispDot;word DispNum = 0;byte key;/ 0: initialized status/ 1: pressed in normal mode/ 2: released to enter setting mode/ 3: presse

6、d in setting modebyte SetStatus = 0;boolean AlarmSettingMode = false;byte ShiftStatus = 0, UpStatus = 0;byte TempDEC;byte SetCursor = 3;byte Blinking = 0;byte AlarmHour = 12, AlarmMin = 0;boolean AlarmFlag = false;byte AlarmStatus = ALARM_STOP;init_devices();/v_Set1302(InitVal);InitTube();InitKeys()

7、;/Disp4Digit( 8888, 1000, 3, 0);DispCircle( 2, 60, 1 );DispCircle( 2, 60, 0 );while( true ) / Sound on if alarm reached and alarm is activeif( AlarmFlag )if( (bcd2dec(ReadVal2) = AlarmHour) && (bcd2dec(ReadVal1)=AlarmMin) )/ Stop in odd secondif(bcd2dec(ReadVal0) % 2 )SoundOff();AlarmStatus

8、= ALARM_STOP;/ Sound in even secondelseSoundOn();AlarmStatus = ALARM_IN_ACTION;else if( AlarmStatus = ALARM_IN_ACTION) SoundOff();key = ReadKey();switch( key )/ SET pressedcase K_SET_PIN:/ Toggle pressed state/ Normal mode, pressedif( SetStatus = 0 ) SetStatus = 1;/ Setting mode, pressedelse if( Set

9、Status = 2 )Blinking = 0;SetStatus = 3;break;/ SET pressedcase K_SHIFT_PIN:if( ShiftStatus = 0 ) ShiftStatus = 1;break;case K_UP_PIN:/ Toggle pressed stateif( UpStatus = 0 ) UpStatus = 1;break;default: /- toggle setting and normal status/ Released to enter setting modeif(SetStatus = 1)SetStatus = 2;

10、SetCursor = 3;beep(10);/ Release to enter normal modeelse if(SetStatus = 3)if( !AlarmSettingMode )/ Set second to 0ReadVal0 = 0;/ Adjust the timev_Set1302(ReadVal);beep(20);/ Enter alarm modeAlarmSettingMode = true;/ Set SetStatus to alarm setting modeSetStatus = 1;SetCursor = 1;Blinking = 0;/ Toggl

11、e clock and alarm modeelse/ Enter normal modeAlarmSettingMode = false;SetStatus = 0;SetCursor = 0;Blinking = 0;/ Shift cursorif( ShiftStatus = 1)/ If in setting modeif( SetStatus = 2 ) SetCursor = SetCursor=0 ? 3: SetCursor-1;/ Disp current alarm settingelseDisp4Digit( AlarmHour * 100 + AlarmMin, 10

12、00, 0x03, 0, AlarmFlag);beep(10);/ Set shift key in normal statusShiftStatus = 0;/ Adjust numbersif( UpStatus = 1 )/ If in setting modeif( SetStatus = 2 ) / increse the dightswitch( SetCursor )/ Digit 0case 0:TempDEC = AlarmSettingMode ? AlarmMin : bcd2dec(ReadVal1);TempDEC+;if( TempDEC >= 60 ) T

13、empDEC = 0;if( AlarmSettingMode ) AlarmMin = TempDEC;else ReadVal1 = dec2bcd(TempDEC);break;/ Digit 1case 1:TempDEC = AlarmSettingMode ? AlarmMin : bcd2dec(ReadVal1);TempDEC+=10;if( TempDEC >= 60 ) TempDEC %= 10;if( AlarmSettingMode ) AlarmMin = TempDEC;else ReadVal1 = dec2bcd(TempDEC);break; / D

14、igit 2case 2:TempDEC = AlarmSettingMode ? AlarmHour : bcd2dec(ReadVal2);TempDEC+;if( TempDEC >= 24 ) TempDEC = 0;if( AlarmSettingMode ) AlarmHour = TempDEC;else ReadVal2 = dec2bcd(TempDEC);break;/ Digit 3case 3:TempDEC = AlarmSettingMode ? AlarmHour : bcd2dec(ReadVal2);TempDEC+=10;if( TempDEC >

15、;= 24 ) TempDEC %= 10;if( AlarmSettingMode ) AlarmHour = TempDEC;else ReadVal2 = dec2bcd(TempDEC);break; if( !AlarmSettingMode )/ Set second to 0ReadVal0 = 0;/ Adjust the timev_Set1302(ReadVal);/ Not in setting modeelse/ toggle alarmAlarmFlag = !AlarmFlag;if( AlarmFlag ) beep(20);else SoundOff();/ S

16、et up key to normal statusUpStatus = 0;break;SaveSec = ReadVal0;v_Get1302(ReadVal);if( SaveSec != ReadVal0 ) DispDot = 3;else DispDot = 0;if( !AlarmSettingMode )DispNum = bcd2dec(ReadVal2) * 100 + bcd2dec(ReadVal1);elseDispNum = AlarmHour * 100 + AlarmMin;if( SetStatus = 2 )Blinking+;if( Blinking &g

17、t;= BLINKING_CRYCLE ) Blinking = 0;if( AlarmSettingMode )Disp4Digit( DispNum, UPDATE_INTERVAL, 0x03, (Blinking = BLINKING_CRYCLE-1)?(1<<SetCursor):0, AlarmFlag);else Disp4Digit( DispNum, UPDATE_INTERVAL, DispDot, (Blinking = BLINKING_CRYCLE-1)?(1<<SetCursor):0, AlarmFlag);return(1);void

18、test1()/*DispDigit( 200 );DispHex( 200 );/DispLut( 200 );*/*while( true )for( int i=3; i>=0; i- )for( int j=0; j<10; j+ )DIGIT_PORT = (1<<i) DIGIT_MASK;SEG_PORT = segmentsj;_delay_ms(100);*/*while(1) for( int i=0; i<10000; i+ )Disp4Digit( i, 200, i%4 );*/三、作品展示圖2 作品圖四、作品元器件清單序號元器件符號元器件名稱參數(shù)數(shù)量1Z14位數(shù)碼顯示管SM42056412U1可編程8位控制器ATMEGA8L-8PI13U2涓流充電時鐘芯片DS130214R1,R2,R3電阻5.

溫馨提示

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

最新文檔

評論

0/150

提交評論