搜档网
当前位置:搜档网 › PIC16F877A数字时钟时钟程序

PIC16F877A数字时钟时钟程序

PIC16F877A数字时钟时钟程序
PIC16F877A数字时钟时钟程序

;Digit clock

;-----------------------------------------------

;DA TE :20101205

;Author:Tang HS

;M C U :PIC16F877A

;FileName : ClockPIC.ASM

;-----------------------------------------------------------

;Date: {2010/12/07.14:35}-V er01--CS-ICD:0xAFCE---ISP:0xb7ce----

;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义

;------------------------------------------------------------

;-----------------------------------------------------------

;Date: {2010/12/07.22:15}-V er01--CS-ICD:0xAFCE---ISP:0xb7ce----

;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义

; 2.RB0-SET_KEY;RB1-ADD_KEY;RB2-SUB_KEY;RB3-EXIT_KEY

;------------------------------------------------------------

;Date: {2010/12/09.18:06}-V er02--CS-ICD:0xAFCE---ISP:0xef0e----

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

;Date: {2010/12/10.00:47}-V er03--CS-ICD:0xb08d---ISP:0xfaa7----

;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义

; 2.RB0-SET_KEY;RB1-ADD_KEY;RB2-SUB_KEY;RB3-EXIT_KEY 都OK ; 3.MOVLW 纠正MOVV REG,1 引起的SUB_不良;

;--------------------------------------------------------------

;Date: {2010/12/10.13:10}-V er03.1--CS-ICD:0xb08b---ISP:0xfaa4----

; 4.时差。50ms原来计数20次改为19次;250us原来计数200次改为197次;---------------------------------------------------------------

;Date: {2010/12/10.17:30}-V er03.2--CS-ICD:0x296B---ISP:0x7387----

; 5.在Set_ini中--增加CALL SET_Flag;指定Flag,1=1;标志位-

---解决Ver03.1-第一次按SET键时不能调HourL&HourH的问题

;------------------------------------------------------------

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

;程序清单

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

__CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭

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

;-----------------------------------------------

include P16F877A.INC

;-----------------------------------------------

;-----------------ram varable------------------------------

HourH equ 20H ;

HourL equ 21H ;

MinH equ 22H ;

MinL equ 23H ;

SecH equ 24h ;

SecL equ 25h ; B'0010 0101'

;N250us equ 26h ;250us*200=50ms

;N50ms equ 27h ;50ms*20=1000ms

;Nsec equ 28h ;

data1 equ 29h ;定义一个廷时变量寄存器

data2 equ 2Ah ;定义另一个廷时变量寄存器

keyvalue EQU 2Bh ;

FlagKey EQU 2Ch ;

W_STK equ 2Dh ;----------------

STA TUS_STK equ 2Eh ;

PCLATH_STK equ 2Fh ;

FSR_STK equ 30h ;---------------

COUNT0 equ 31h ; DELAY use 0011 0000

COUNT1 equ 32h ;

COUNT2 equ 33h ;

Flag equ 34h ;---Adjust.Time---------

N250us equ 35h ;250us*200=50ms

N50ms equ 36h ;50ms*20=1000ms

Nsec equ 37h ;

;------------------Counstant------------------------------

n1 equ d'1';d'13' ;定义一个外层循环廷时常数d'13'(10ms) n2 equ 0ffh ;定义一个内层廷时常数

RBCOUNST equ 0x1f ;rb0~rb4读取后异或常数

;------------------bit1-----------------------------

c equ 0 ;定义进位标志位位地址

rp0 equ 5 ;定义状态寄存器的页选位RP0

NOT_RBPU equ 7 ;定义选择寄存器RB的上拉电阻位RBPU z equ 2 ;定义0状态位的位地址

F_release EQU 0 ;

F_pressed equ 1 ;

;--------------FlagKey---bit2----------------------------

;#define F_release FlagKey,0 ;按键释放标志位

;#define F_pressed FlagKey,1 ;按键闭合标志位

;-------------Flag ----------------------------------

;Flag,0 ; 时间调整标志位

;Flag,1 ; FSR=21H=HourL

;Flag,2 ; FSR=23H=MinL

;Flag,3 ; FSR=25H=SecL

;************************************************************** ;-------------------------------------------------------------

ORG 0000H

NOP ;放置一条ICD必需的空操作指令

GOTO MAIN

ORG 0004H

GOTO ISR_TMR0 ;

ORG 0008H

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

;NAME : CONMERT1 数码管位码查表子程序

;-------------------------------------------------

CONVERT1 ;取数码管位码

ADDWF PCL,1 ;地址偏移量加当前PC值

TABLE1

RETLW 0FDH ;第一位数码管

RETLW 0FEH ;第二位数码管

RETLW 0F7H ;第三位数码管

RETLW 0FBH ;第四位数码管

RETLW 0DFH ;第五位数码管

RETLW 0EFH ;第六位数码管

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

;NAME : CONVERT 数码管段码查表子程序

;-----------------------------------------------------

CONVERT ;取数码管段码

ADDWF PCL,1 ;地址偏移量加当前PC值TABLE

RETLW 0C0H ;0

RETLW 0F9H ;1

RETLW 0A4H ;2

RETLW 0B0H ;3

RETLW 99H ;4

RETLW 92H ;5

RETLW 82H ;6

RETLW 0F8H ;7

RETLW 80H ;8

RETLW 98H ;9

RETLW 7FH ;.

retlw 00h ;11

;************************************************************* ; ///////////--Main program --///////////////////////////////

;----------------------------------------------------------

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

; return ;

;----------------------------------------------------------

MAIN

CALL Sys_ini;

CALL Clear_RAM;

BSF INTCON,GIE ; 打开全局中断,启动定时器

CALL RAM_ini ;

LOOP_DIS

CALL Display_led;

NOP;

bcf STATUS,RP0;

BTFSC PORTB,0 ; RB0=0? 键按下否?

GOTO LOOP_DIS ; no

CALL Display_led ; Yes

CALL Display_led;

BTFSC PORTB,0 ; RB0=0? 再次确认键按下否?

GOTO LOOP_DIS ; no

CALL Set_in;

CALL keyscan;

LoopEND

GOTO LOOP_DIS;

;**************************************************** Set_in

BSF Flag,0 ; Set1闪烁显示处理放在中断进行

MOVLW 0x21 ; HourL->FSR

MOVWF FSR ;

;CALL SET_Flag;

BSF Flag,1; 1

BCF Flag,2; 0

BCF Flag,3; 0

keyscanRealase0 ; 按键释放,子程序名

CALL Display_led ;

movf PORTB,W ;读取RB口数据到W(d=0)

andlw 0x1f ;屏蔽高4位

bcf STATUS,Z ;

xorlw 0x1f ;

btfss STATUS,Z ;

goto keyscanRealase0 ;Z=0有键按下

;call delay ;Z=1无键按下

CALL Display_led;

CALL Display_led;

movf PORTB,W ;读取RB口数据到W(d=0)

andlw 0x1f ;屏蔽高4位

bcf STATUS,Z ;

xorlw 0x1f ;

btfss STATUS,Z ;

goto keyscanRealase0 ;Z=0有键按下,waitting for release

;Z=1无键按下exit

;------------

RETURN ;

;----------------------------

;----------------------------

KEY0_SUB ;SET_KEY

INCF FSR,1 ;21-23-25h

INCF FSR,1 ;

MOVF FSR,W ;

SUBLW 0x27 ;----27>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>- BTFSS STATUS,Z ; FSR=27H?

GOTO $+3 ;

MOVLW 0x21;

MOVWF FSR;

CALL SET_Flag;

RETURN;

KEY1_SUB ;ADD_KEY

INCF INDF,1;

CALL ArrangTime ;

RETURN;

KEY2_SUB ;SUB_KEY

;MOVF INDF,1;

;BTFSS STATUS,Z ; INDF=0?

;GOTO $+4 ;NO:Jump to 'DECF INDF,1;'

;MOVLW .9 ;=Yes:Re-setup REGF

;MOVF INDF,1 ;=Yes: 9->REGF

;GOTO $+2 ;=Yes:and jump to 'CALL Time_sub;'

;DECF INDF,1;

CALL Time_sub;

RETURN;

KEY3_SUB ;EXIT_KEY ;CALL Set_out

BCF Flag,0 ; Clear 0

MOVLW 0x00 ; HourL->FSR

MOVWF FSR ;

RETURN ;

;-------------------------------------

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

keyscan ;--1--按键闭合-----------------------

BTFSS Flag,0 ; 1 继续按键处理

goto keyscan_end ; 0 退出按键处理

CALL ArrangTime ;

CALL Display_led ;

MOVF PORTB,W ;读取RB口数据到W(d=0)

ANDLW 0x1f ;屏蔽高4位RBCOUNST A^1=~A

BCF STATUS,Z ;将z清0

XORLW 0x1f ;即RA与0x0f作异或运算,若两数相同,结果为0,Z置1

;若两数相异,结果非0,Z=0

BTFSC STATUS,Z ;0jump keyclose

GOTO keyscan ; Z=1无键按下退出按键扫描

;call delay ; Z=0有键按下,延时按键去抖动

CALL Display_led ;

CALL Display_led ;

;--2----------------------

MOVF PORTB,W ;读取RB口数据到W(d=0)

ANDLW 0x1f ;屏蔽高4位

MOVWF keyvalue ;保存键值到keyvalue

BCF STATUS,Z ;将z清0

XORLW 0x1f ;即RA与0x0f作异或运算,若两数相同,结果为0,Z置1;若两数相异,Z=0不相同

BTFSC STATUS,Z ;0jump keyclose

GOTO keyscan ; Z为1退出按键扫描

;incf portc,1 ;key fuction sub.

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

KEY0

BTFSC keyvalue,0 ; KEY0?

GOTO KEY1;

CALL KEY0_SUB;

goto Adjust_Time;

KEY1

BTFSC keyvalue,1 ; KEY1?

GOTO KEY2;

CALL KEY1_SUB;

goto Adjust_Time;

KEY2

BTFSC keyvalue,2 ; KEY2?

GOTO KEY3;

CALL KEY2_SUB;

goto Adjust_Time;

KEY3

BTFSC keyvalue,3 ; KEY3?

GOTO Adjust_Time ;KEY1;

CALL KEY3_SUB;

ADJ_OUT

;----------------------------------------------

Adjust_Time

;CALL ArrangTime ;

;--------------------------------------------

keyscanRealase ; 按键释放,子程序名

CALL Display_led ;

movf PORTB,W ;读取RB口数据到W(d=0)

andlw 0x1f ;屏蔽高4位

bcf STATUS,Z ;

xorlw 0x1f ;

btfss STATUS,Z ;

goto keyscanRealase ;Z=0有键按下

;call delay ;Z=1无键按下

CALL Display_led;

CALL Display_led;

movf PORTB,W ;读取RB口数据到W(d=0)

andlw 0x1f ;屏蔽高4位

bcf STATUS,Z ;

xorlw 0x1f ;

btfss STATUS,Z ;

goto keyscanRealase ;Z=0有键按下

goto keyscan ;Z=1无键按下

;---------------------------------------------

keyscan_end

RETURN;

;-------------keyscan_end------------------------------

;***********Adjust_TIME END************************

;

;===============SET_Flag SUB ======================================= SET_Flag

BCF STATUS,RP0; select bank0;

MOVF FSR,W;

SUBLW 0x21;

BTFSS STATUS,Z; FSR=21H?

GOTO SET_F2 ;

;CALL ArrangHour;---------------

BSF Flag,1; 1

BCF Flag,2; 0

BCF Flag,3; 0

;------------------------------------

SET_F2

MOVF FSR,W;

SUBLW 0x23;

BTFSS STATUS,Z; FSR=23H?

GOTO SET_F3;

;CALL ArrangMin;---------------

BCF Flag,1; 0

BSF Flag,2; 1

BCF Flag,3; 0

;------------------------------------

SET_F3

MOVF FSR,W;

SUBLW 0x25;

BTFSS STATUS,Z; FSR=25H?

GOTO SET_END ;

;CALL ArrangSec;-----

BCF Flag,1; 0

BCF Flag,2; 0

BSF Flag,3; 1

SET_END

RETURN ;

;================SET_Flag END=========================

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

;===================================================== ; NAME : Time_sub (Key2_SUB)

;=====================================

Time_sub

BTFSS Flag,1 ; FSR=21h=HourL

GOTO $+2;

CALL Hour_sub;

;-------------------

BTFSS Flag,2 ; FSR=23h=HourL

GOTO $+2;

CALL Min_sub;

;--------------------

BTFSS Flag,3 ; FSR=25h=HourL

GOTO $+2;

CALL Sec_sub;

RETURN ;

;===============Hour_sub=====================

Hour_sub

MOVF HourL,F ; F->F

BTFSS STA TUS,Z ; HourL=0?

GOTO HourL_NotZero ;No INDF--

MOVF HourH,F ;

BTFSS STA TUS,Z ;HourH=0?

GOTO HourH_NotZero ; Not Zero

MOVLW .2 ;

MOVWF HourH ;2->hourH

MOVLW .3 ;

MOVWF HourL ;3->HourL

GOTO Hour_sub_end ;

HourH_NotZero ;

DECF HourH,F ; HourH--

MOVLW .9

MOVWF HourL ;9->HourL

GOTO Hour_sub_end;

HourL_NotZero;

DECF HourL,F;

Hour_sub_end

RETURN

;===============Hour_sub END====================== Min_sub

MOVF MinH,F ;

BTFSS STA TUS,Z ; MinH=0?

GOTO MinH_NotZero ; NO

MOVF MinL,F ; F->F

BTFSS STA TUS,Z ; MinL=0?

GOTO MinL_NotZero ; No

Hour00 ;(1)-00-

MOVLW .5 ;

MOVWF MinH ; 5->MinH

MOVLW .9 ;

MOVWF MinL ; 9->MinL

GOTO Min_sub_end ;

MinH_NotZero;

MOVF MinL,F ; F->F

BTFSS STA TUS,Z ; MinL=0?

GOTO MinL_NotZero ; No

;-(2)-x0-

DECF MinH,F ; MinH--

MOVLW .9

MOVWF MinL ; 9->MinL

GOTO Min_sub_end ;

MinL_NotZero;(3)0x & xx

DECF MinL,F;

Min_sub_end

RETURN ;

;===================Min_sub END====================

Sec_sub

MOVF SecH,f ;

BTFSS STA TUS,Z ; SecH=0?

GOTO SecH_NotZero ; NO

MOVF SecL,F ; F->F

BTFSS STA TUS,Z ; SecL=0?

GOTO SecL_NotZero ; No

Sec00;(1)--00

MOVLW .5 ;

MOVWF SecH ; 5->SecH

MOVLW .9 ;

MOVWF SecL ; 9->SecL

GOTO Sec_sub_end ;

SecH_NotZero;

MOVF SecL,F ; F->F

BTFSS STA TUS,Z ; SecL=0?

GOTO SecL_NotZero ; No

;(2)--x0

DECF SecH,F ; SecH--

MOVLW .9 ;

MOVWF SecL ; 9->SecL

SecL_NotZero;

DECF SecL,F;

Sec_sub_end

RETURN ;

;===================Sec_sub END========================= ;*******************************************************

;

;----------------------------------------------------

;NAME : ArrangTime

;========================================= ArrangTime

BTFSS Flag,1 ; FSR=21h=HourL

GOTO $+2;

CALL ArrangHour;

;-------------------

BTFSS Flag,2 ; FSR=23h=HourL

GOTO $+2;

CALL ArrangMin;

;--------------------

BTFSS Flag,3 ; FSR=25h=HourL

GOTO $+2;

CALL ArrangSec;

RETURN ;

;========================================== ArrangMin ;;if FSR= SecL goto hear-------------- MOVF MinL,W ;

SUBLW .10 ;

BTFSS STA TUS,Z ;到10M?

GOTO END_Min ;

;CALL CLR_MinL_D2a;

CLRF MinL;

INCF MinH,F;

MOVF MinH,W ;

SUBLW .6 ;

BTFSS STA TUS,Z ;到60M?

GOTO END_Min

;CALL CLR_MinH_D3a ;

CLRF MinH;

CLRF MinL;

END_Min

RETURN

;---------------------------------------------

ArrangSec ;if FSR= SecL goto hear----

MOVF SecL,w ;

SUBLW .10 ;

BTFSS STA TUS,Z ;到10S?

GOTO END_Sec ;没到10s

;CALL CLR_SecL_D0a ;

CLRF SecL ;

INCF SecH,F ; --SecH++

MOVF SecH,W ;

SUBLW .6 ;

BTFSS STA TUS,Z ;到60S?

GOTO END_Sec ;没到60S

;CALL CLR_SecH_D1a ;

CLRF SecH;

CLRF SecL ;

;INCF MinL,F;

END_Sec

RETURN

;-------------------------------

;if FSR= HourL goto hear --- OK -------------------

;

ArrangHourA ;小时做调整有2种情况:1> h=10 ; 2> h=24 ;

MOVF HourH,W ;小时不调整有2种情况:3> h<10 ; 4> 20

SUBLW .2

BTFSS STA TUS,Z ;HourH==2

GOTO HourLequ10 ; HourH≠2,做常规调整a

MOVF HourL,w ;

SUBLW .4

BTFSS STA TUS,Z ;HourL==4

GOTO END_Hour ;(4>: 20

CALL CLR_HourH_D5a ;(2>: h=24H)

goto END_Hour

HourLequ10A

MOVF HourL,W ;

SUBLW .10

BTFSS STA TUS,Z ;HourL==10

GOTO END_Hour ;(3>: h<10H)

CALL CLR_HourL_D4a ;(1>: h=10H)

END_Hour

RETURN ;

;--------------------------

CLR_HourL_D4a

CLRF HourL; else if(HourL==10) { hourL=0;Hourh++;}

INCF HourH,F;

RETURN;

CLR_HourH_D5a

CLRF HourH ; if (HourH==2&&HourL==4){ hourH=0;HourL=0;}

CLRF HourL ;

;INCF DayL,F;

RETURN;

;------------------------------------------------

;*************** ArrangTime END *************************************************

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

;NAME : Sys_ini 变量初始化清零-子程序

;-------------------------------------------------------------

Sys_ini

;-----I/O-----------------

BSF STA TUS,RP0 ;设置文件寄存器体1

MOVLW 0x07 ;

MOVWF ADCON1 ;RA0 ~ 5设为数字I/O

CLRF TRISA ;将RA设置为输出--数码管位码

CLRF TRISC ;将RC设置为输出--数码管段码

BCF OPTION_REG,NOT_RBPU ;RB1~RB4作(按键)输入必须设上拉电阻(RBPU=0)

MOVLW 0XFF;

MOVWF TRISB ;将RB设置为输入按键输入RB0~RB3

BCF STA TUS,RP0 ;恢复到文件寄存器体0

CLRF PORTC ;送计器初值00H到RC口显示

MOVLW 03fh ;b'xx11 1111'

MOVWF PORTA ;关闭数码管(位码)显示

;---TMR0---------------------------------

BANKSEL OPTION_REG

BCF OPTION_REG,T0CS ;TMR0工作于定时器方式

BSF OPTION_REG,PSA ;TMR0不用分频

BANKSEL INTCON

BCF INTCON,T0IF ;清除TMR0的中断标志

BCF INTCON,GIE ;总中断禁止

BSF INTCON,T0IE ;TMR0中断允许

BCF STATUS,RP0 ;恢复到文件寄存器体0------

MOVLW 0x07 ;256-6=250us

MOVWF TMR0 ;TMR0设初值

RETURN ;

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

;NAME : Clear_RAM 变量初始化清零-子程序

;-------------------------------------------------

;Clear RAM (20~2f)40h routine---;20(B'0010 0000')

;Bank select-IRP AND FSR,7---;2F(B'0011 0000')

;

Clear_RAM

MOVLW 0x20 ; Starting Address is 0x20

MOVWF FSR ; Use indirect addressing

NEXT

CLRF INDF ; Clear INDF address

INCF FSR,F ; Increase FSR for next address

BTFSS FSR,6 ; Register clear complete?

GOTO NEXT ;

RETURN ; CALL Sys_ini ;

;----------------------------------------------------

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

;NAME : RAM_ini 变量初始化设置

;----------------------------------------------

RAM_ini ;

CLRF FlagKey ;

CLRF keyvalue ;

CLRF Flag ;

CLRF N250us;

CLRF N50ms ;

CLRF Nsec ;

RETURN ;

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

;

;************************************************************ ;NAME : Display_led 数码管显示子程序

;--------------------------------------------------------

Display_led

MOVLW 0FDH ; 0FD 位选1

MOVWF PORTA ;0FD->W->RA

MOVF HourH,W ;HourH->W+PCL

CALL CONVERT ; Look-up table

MOVWF PORTC ;W->RC

CALL delay1ms;DELAY ;

MOVLW 0FEH ; 0FE 位选2

MOVWF PORTA ;

MOVF HourL,W ;

CALL CONVERT ; Look-up table

MOVWF PORTC ;W->RC

CALL delay1ms;DELAY

MOVLW 0F7H ; 0F7 位选3

MOVWF PORTA ;

MOVF MinH,W ;

CALL CONVERT ; Look-up table

MOVWF PORTC ;W->RC

CALL delay1ms;DELAY

MOVLW 0FBH ; 0FB 位选4

MOVWF PORTA ;

MOVF MinL,W ;

CALL CONVERT ; Look-up table

MOVWF PORTC ;W->RC

CALL delay1ms;DELAY

MOVLW 0DFH ; 0DF 位选5

MOVWF PORTA ;

MOVF SecH,W ;

CALL CONVERT ; Look-up table

MOVWF PORTC ;W->RC

CALL delay1ms;DELAY

MOVLW 0EFH ; 0EF 位选6

MOVWF PORTA ;

MOVF SecL,W ;

CALL CONVERT ; Look-up table

MOVWF PORTC ;W->RC

CALL delay1ms;DELAY

RETURN ;-------------------------------

;

;******************************************************** ;NAME : ISR_TMR0 定时中断子程序

;----------------------------------------------------------

; ORG 0x04 ;interrupt Vector

ISR_TMR0

MOVWF W_STK ;Store W register in w_stk

MOVF STATUS,W ;\ W=STATUS Register

CLRF STATUS ;> Bank0

MOVWF STATUS_STK ;/ Store STATUS to STA TUS_STK MOVF PCLATH,W ;\

MOVWF PCLATH_STK ;> Store PCLATH to PCLATH_STK CLRF PCLATH ;/

;----Interrupt Flag Test----------------------------------

;

;----Interrupt Service Routine-------------------

MOVLW 06h ;

MOVWF TMR0 ;

BCF INTCON,T0IF ;清除中断标志

INCF N250us,1 ;---N250us++

MOVF N250us,w ; 250us*200=50ms

SUBLW .197 ;197 N250us-200=0?

BTFSS STATUS,Z ; Z=1? (N250us=200?)

GOTO END_ISR ; Z=0,N250us≠200

;-------------------ISR---------------------------------

BTFSC Flag,0 ;调整时间时,设置相对应的2位LED闪烁goto LED_FLASH ;

;----------------------------ISR-----------------------

CLRF N250us ;

INCF Nsec,1 ;---Nsec++

MOVF Nsec,W ; Nsec*20=1000ms

SUBLW .19 ; Nsec-20=0?

BTFSS STATUS,Z ;

GOTO END_ISR ; N250us≠20

CLRF Nsec ;

INCF SecL,1 ;---1s++

MOVF SecL,w ;

SUBLW .10 ;

BTFSS STATUS,Z ;到10S?

GOTO END_ISR ;没到10s

CALL CLR_SecL_D0 ;

MOVF SecH,W ;

SUBLW .6 ;

BTFSS STATUS,Z ;到60S?

GOTO END_ISR ;没到60S

CALL CLR_SecH_D1 ;

MOVF MinL,W ;

SUBLW .10 ;

BTFSS STATUS,Z ;到10SM?

GOTO END_ISR

CALL CLR_MinL_D2 ;

MOVF MinH,W ;

SUBLW .6 ;

BTFSS STATUS,Z ;到60M?

GOTO END_ISR

CALL CLR_MinH_D3 ;

ArrangHour ;小时做调整有2种情况:1> h=10 ; 2> h=24 ;

MOVF HourH,W ;小时不调整有2种情况:3> h<10 ; 4> 20

SUBLW .2

BTFSS STA TUS,Z ;HourH==2

GOTO HourLequ10 ; HourH≠2,做常规调整a

MOVF HourL,w ;

SUBLW .4

BTFSS STA TUS,Z ;HourL==4

GOTO END_ISR ;(4>: 20

CALL CLR_HourH_D5 ;(2>: h=24H)

goto END_ISR

HourLequ10

MOVF HourL,W ;

SUBLW .10

BTFSS STA TUS,Z ;HourL==10

GOTO END_ISR ;(3>: h<10H)

CALL CLR_HourL_D4 ;(1>: h=10H)

GOTO END_ISR ;

;-ISR---闪烁显示处理,--ISR---------------------------------------

;if(fsr=0x21),RA0/RA1 FLASH with 0.25HZ;

;if(fsr=0x23),RA2/RA3 FLASH with 0.25hz;

;if(fsr=0x25),RA4/RA5 FLASH with 0.25hz.

LED_FLASH

;-ISR--End of ISR-----------------------------------

END_ISR

MOVF PCLATH_STK,W ; W=PCLATH_STK

MOVWF PCLATH ; PCLATH=PCLATH_STK

MOVF STATUS_STK,W ; W=STA TUS_STK

MOVWF STATUS ; STA TUS=STATUS_STK

MOVF W_STK,W ; W=W_STK

RETFIE

;--------------------------------------------------------

;-----ISR---计数溢出处理子程序----------------------------

CLR_SecL_D0

CLRF SecL ;

INCF SecH,F ; --SecH++

RETURN;

CLR_SecH_D1

CLRF SecH;

INCF MinL,F;

RETURN;

CLR_MinL_D2

CLRF MinL;

INCF MinH,F;

RETURN;

CLR_MinH_D3

CLRF MinH;

INCF HourL,1;

RETURN;

CLR_HourL_D4

CLRF HourL; else if(HourL==10) { hourL=0;Hourh++;}

INCF HourH,F;

RETURN;

CLR_HourH_D5

CLRF HourH ; if (HourH==2&&HourL==4){ hourH=0;HourL=0;} CLRF HourL ;

;INCF DayL,F;

RETURN;

;*****************ISR END**********************************

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

;NAME : delay1ms 1.0MS廷时子程序Display_led used

;---------------------------------------------------

delay1ms ;子程序名,也是子程序入口地址

movlw n1 ;将外层循环参数值送到DATA1

movwf data1 ;

lp0 movlw n2 ;将内层循环参数值送到DATA2

movwf data2 ;

lp1 decfsz data2,1 ;变量DA TA2内容递减,若为0则跳跃

goto lp1 ;跳转到LP1

decfsz data1,1 ;变量DA TA1内容递减,若为0则跳跃

goto lp0 ;跳转到LP0

return ;返回主程序

;************ Used for KEY Double ********************************** delay ;子程序名,也是子程序入口地址

movlw 0x13 ;将外层循环参数值送到DA TA1

movwf data1 ;(3*255+1+1+1+2)*13+1+1=10010us

lp0m movlw n2 ;将内层循环参数值送到DATA2

movwf data2 ;

lp1m decfsz data2,1 ;变量DATA2内容递减,若为0则跳跃

goto lp1m ;跳转到LP1

decfsz data1,1 ;变量DA TA1内容递减,若为0则跳跃

goto lp0m ;跳转到LP0

return ;返回主程序

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

;*************************************************************** END

微机原理课程设计数字时钟程序

河北科技大学 课程设计报告 学生姓名:学号: 专业班级: 电子信息科学与工程 课程名称:微型计算机原理及应用 学年学期: 2 01 1 —2012 学年第1 学期 指导教师: 20 0 1 1年 1 2月 课程设计成绩评定表

目录 一、课设题目及目的………………………………….4 二、设计任务………………………………………….4 三、总框图及设计流程 (4) 四、?源程序清单 (6) 五、?调试结果及显示 (19) 六、?个人贡献………………………………………….19 七、课程设计总结及体会 (21) 一、课设题目及目的 实习题目:数字时钟程序 实习目的:通过实习,使我们进一步弄懂所学到的课本知识,巩固和深化对8086系统的指令系统、中断系统、键盘/显示系统、程序设计、应用开发等基本理论知识的理解,提高汇编语言应用于技术的实践操作技能,掌握汇编语言应用系统设计、研制的方法,培养利用科技革新、开发和创新的基本能力,为毕业后从事与其相关的工作打下一定的基础。

二、课设任务 本课题为利用汇编语言设置时钟程序,其显示效果为:截取系统时间,能以时、分、秒(其中时为24小时制)的形式显示,并且通过合理的操作能修改时和分的内容来修改时间。再有,可以给它设定一个ALARM时间,到这个时间它就能产生信号,起到定时作用,。除此之外还能显示日期,日期分为年、月、日,其显示方式为xxxx年xx 月xx日。 ' *

DB '***********PRESS ESCBUTTON TO EXIT**************',0AH,0DH,'$' TN DB'PLEASE INPUT THE NEW TIME(HH:MM:SS):',0DH,0AH,'$' TMDB'PLEASE INPUT THE ALARM TIME (HH:MM:SS):',0DH,0AH,'$' MUSICMESS DB'PLEASE CHOOSE THE TYPE OF MUSIC:1(FAST) 2(MIDDLE) 3(SLOW)',0DH,0AH,'$' MESS2DB'TIME IS:',0AH,0DH,'$' MESS3DB 'TODAY IS:',0AH,0DH,'$' DBUFFER1DB20DUP('') T_BUFFD B 40 ;在数据段开一段时间显示缓冲区 DB ? DB 40DUP(?) HOR DB? MIN DB? SEC DB? TEMPHOR DB ? TEMPMIN DB? TEMPSEC DB? MUSIC DW 800;存放音乐的频率数DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODESEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA START: CALL CLEAR ;调用清屏子程序 DISPLAY:;时间显示部分 MOV AX,DATA MOVDS,AX MOVBX,OFFSETT_BUFF;送T_BUFF的偏移地址到BX MOV AH,2CH;调用DOS时间调用功能,功能号:2CH,小时,分钟,秒数分别保存在CH,CL,DH中 INT 21H ;判断时间是否相等SUB DH,1;秒数+1修正 CALL CHECK ;.........................................................................

数字时钟设计原理

数字时钟设计——原理图一.实验目的 设计一个多功能数字中电路,基本功能为:①准确计时,以数字形式显示分、秒的时间;②分和秒的计时要求为60进位;③校正时间。 二.设计框图和工作原理 由振荡器产生高稳定的高频脉冲信号,作为数字钟的时间基准(系统时钟),再经分频器输出标准秒脉冲信号。秒计数器计满60后向分计数器进位,分计数器计满60后重新开始计时。计数器的输出经译码器送显示器。计时出现误差时可以用校时电路进行校分。 三.设计方案

1.振荡器的设计 振荡器是数字钟的核心。振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。一般来说,振荡器的频率越高,计时精度越高。 在这里我们选用由集成电路定时器555与RC组成的多谐振荡器。这里选用555构成的多谐振荡器,输出振荡频率v0=1KHz的脉冲,电路参数如下图所示。 2.分频器的设计 选用3片中规模集成电路计数器74LS90可以完成分频功能。因为每片为1/10分频,3片级联则可获得所需要的频率信号,即第1片的Q3端输出频率为100HZ,第2片的Q3端输出为10Hz,第3片的Q3端输出为1Hz。分频电路如下图所示:

3.分秒计数器的设计 分和秒计数器都是模M=60的计数器,其计数规律为:00-01-… -58-59-00…选74LS92作十位计数器,74LS90作个位计数器。再将它们级联组成模数M=60的计数器。分秒计数电路如下: 74LS90的原理图如下: 74LS92的原理图如下: 4.校时电路的设计 当数字钟接通电源或者计时出现误差时,需要校正时间(或称校时)。校时是数字钟应具备的基本功能。一般电子手表都具有时、分、秒等校时功能。为使

简易数字钟的设计

中文摘要 数字钟已经成为人们日常生活中不可缺少的必需品,广发应用于家庭及办公室等公共场所,给人们的生活、学习、工作及娱乐带来了极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使得数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用方便,但鉴于单片机的定时器功能也可以完成数字钟的设计,因此进行数字的设计是必要的。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。 单片机具有体积小、功能强、可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和生活的各个角落,有力地推动了各行各业的技术改造和产品的更新换代,应用前景广阔。 本次做的数字钟是以单片机(AT89C51)为核心,结合相关的元器件(共阴极LED 数码显示器等),再配以相应的软件,达到制作简易数字钟的目的。硬件部分采用了单片机原理实验室的实验箱进行合理接线调试;软件部分通过keil进行了C程序的修改编译,protues软件仿真等。最终在实验箱上实现了与仿真结果相同的实际效果。 关键词单片机定时功能、AT89C51、共阴LED、Keil、Protues软件。

Abstract Microelectronics and computer technology along with the rapid development and progress, making the design of electronic systems and applications have entered a new era. The traditional manual design process is being advanced electronic design automation technology to replace. And is currently supporting modern technology has become the universal platform for electronic design, and step by step to support the development of system-level design. Only to hardware description language and logic synthesis-based top-down design methodology to meet the increasingly complex needs of digital system design. The progressive development of the taxi industry, the taxi meter is getting higher and higher requirements, the user requires not only the performance of the stability of billing, billing and accurate anti-cheat functions; and as a result of the instability in oil prices, billing system the need for regular adjustment of the meter so that users can request not to change the hardware to facilitate the billing system modifications. The system is the use of language, it can make use of digital circuits and system description, simulation and automatic design, and software as a development platform designed billing system procedures taxi and carried out a simulation program. To the achievement of pre-billing and simulation, as well as car to start, stop, pause and other functions, and dynamic scan shows the number of fares. Key Words Microcontroller\、AT89C51、7SEG-MPX6-CC-RED 、Keil、Proteus

数字时钟程序

#define uchar unsigned char #define unit unsigned int #include #include #include void 1cd_putchar(uchar 1cdchar) void 1cd_putsf(uchar code *chars) uchar code http[ ]={"current time is:"} sbit KEY1=P3^3; // sbit KEY2=p3^4; // ///////////////////////////////////////// uchar t50ms,ts,tm,th; uchar DISP_BUFFER[6]=0; void timer0(void) interrupt 1 using1 { THO=0x3c; TLO=0xbo; //50ms t50ms++; if(t50ms==20) { t50ms=0; ts++; if(ts==60) {tm=0; th++; if(th==24) {th=0; } } } } } void main (void) { p0=OXFF; P1=OXFF; P2=OXFF; P3=OXFF; TMOD=0X01;//T0 THO=0X3C; TLO=0XB0;//50ms EA=1 ETO=1; initialise();

1cd_setxy(0,0); 1cd_putsf(http); TRO=1; while(1) { DISP_BUFFER[0]=th/10; DISP_BUFFER[1]=th%/10; DISP_BUFFER[2]=tm/10; DISP_BUFFER[3]=tm%/10; DISP_BUFFER[4]=ts/10; DISP_BUFFER[5]=ts%/10; 1cd_setxy(1,0); 1cd_putchar(DISP_BUFFER[0]+0X30; 1cd_putchar(DISP_BUFFER[1]+0X30; 1cd_putchar(':'); 1cd_putchar(DISP_BUFFER[2]+0X30; 1cd_putchar(DISP_BUFFER[3]+0X30; 1cd_putchar(':'); 1cd_putchar(DISP_BUFFER[4]+0X30; 1cd_putchar(DISP_BUFFER[5]+0X30; if(!KEY1) {TM++; delay_ms(100);} } } //display one char void 1cd_putchar(uchar 1cdchar) { output(1cdchar); } //display a sting void 1cd_putsf(uchar code *chars) { uchar i=0; while(chars[i]>=0x20&chars[i]<0x7f) {if (i<0x0f) {output (chars[i]); i++; } else { 1cd_setxy(1,0); while( (chars[i]>0x20&chars[i]<0x7f) ) {output(chars[i]);

基于单片机的数字钟设计-(1)

基于单片机的数字时钟摘要 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 本课题主要研究的是基于单片机的数字钟设计,采用AT89C51单片机作为系统的主控芯片,外接LED显示电路,按键电路,晶振电路,复位电路模块构成一个简单的数字钟。通过按键电路能对时、分、秒分别进行设置和实时调整,并将结果显示在数码管上。 关键词:数字钟,单片机,数码管

Abstract Author:cheng dong Tutor:wang xin Electronic technology has been developed rapidly in the 20 century,with its modern electronic products, pushed by almost permeated every area of society has vigorously promoted social productive forces development and improvement of social informatization level, also make modern electronic product performance further improved, and the rhythm of upgrade its products is becoming more and more quickly. The most common SCM module is a digital clock, a digital clock is a kind of digital circuit technology implementation, minutes and seconds, the timing device with mechanical clock compared with higher accuracy and intuitive and no mechanical device, has more longer service life, so it has been widely used. This topic research is the digital clock design based on SCM, AT89C51 SCM as the main control chip system, external LED display circuit, key circuits, crystals circuit, reset circuit module constitute a simple digital clock. Through the key circuits can respectively the diffculties, minutes and seconds setting and real-time adjustment, and the result showed that in the digital tube. Key words:digital clock SCM ; digital

数字时钟正确代码

module clock(CLK,RST,EN,S1,S2,spk,HOURH,HOURL,MINH,MINL,SECH,SECL); input CLK,RST,EN,S1,S2; output spk; output[3:0] HOURH,HOURL,MINH,MINL,SECH,SECL; reg spk; reg[3:0] SECL,SECH,MINL,MINH,HOURL,HOURH; always @(posedge CLK or negedge RST) if(!RST) begin SECL<=0;SECH<=0;MINL<=0;MINH<=0;HOURL<=0;HOURH<=0; end //系统复位 else if(EN) //EN为低电平时时钟暂停 begin if(!S1) //调节小时 begin if(HOURL==9) begin HOURL<=0; HOURH<=HOURH+1; end

else begin if(HOURH==2&&HOURL==3) begin HOURL<=0;HOURH<=0; end else HOURL<=HOURL+1; end end else if(!S2) //调节分钟 begin if(MINL==9) begin MINL<=0; if(MINH==5) MINH<=0; else MINH<=MINH+1; end

else MINL<=MINL+1; end else if(SECL==9) //时钟正常跳动状态 begin SECL<=0; if(SECH==5) begin SECH<=0; if(MINL==9) begin MINL<=0; if(MINH==5) begin MINH<=0;

电子综合设计-基于单片机多功能数字时钟的设计(附完整程序)

课题:基于51单片机的多功能数字时钟系统设计 一、概述、设计思路 该设计方案是以MC51单片机为核心,采用LCD液晶屏幕显示系统,辅以闹钟模块,温度采集模块、日期提醒、键盘时间调整预设置等模块,所构建的数字时钟系统,能动态显示实时时钟的时、分、秒,数据显示(误差限制在30每天),对闹铃方式与温度调节模块进行了重点设计实现SB0、SB1、SB2、SB3四个键实现时钟正常显示,调时,及闹钟时间设置。本系统设计大部分功能有软件来实现,使电路简单明了,系统稳定性也得大大提高。 二、系统组成与工作原理 1、工作原理: 本设计采用STC89C51单片机作为本次课程设计的控制模块。单片机可把由DS18B20、DS1302、AT24C02中的数据利用软件来进行处理,从而把数据传输到显示模块,实现温度、日历和闹铃的显示。以LCD液晶显示器为显示模块,把单片机传来的的数据显示出来,并且显示多样化,在显示电路中,主要靠按键来实现各种显示要求的选择与切换。 2、总是设计框架图:

图二:系统总体电路图 三、单元电路的设计与分析 整个电子时钟系统电路可分为六大部分:中央处理单元(CPU)、复位电路部分、显示部分、键盘输入部分、温度采集部分。 1、MCS-51单片机 VCC: 89S51 电源正端输入,接+5V。 VSS: 电源地端。

XTAL1: 单芯片系统时钟的反相放大器输入端。 XTAL2: 系统时钟的反相放大器输出端,一般在设计上只要在XTAL1 和XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。 RESET: 89S51的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。 EA/Vpp: "EA"为英文"External Access"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。 ALE/PROG: 端口3的管脚设置: P3.0:RXD,串行通信输入。 P3.1:TXD,串行通信输出。 P3.2:INT0,外部中断0输入。

数字钟设计(带仿真和连接图)

- 数字电子技术课程设计报告 题目:数字钟的设计与制作 : 专业:电气本一班 学号:姓名: 指导教师: 时间: - —

一、设计内容 数字钟设计 … 技术指标: (1)时间以24小时为周期; (2能够显示时,分,秒; (3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间; (4)计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时; (5)为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号. ~ 二、设计时间: 第十五、十六周 三、设计要求: (1)画出设计的电路原理图; $ (2) 选择好元器件及给出参数,在原理图中反应出来; (3)并用仿真软件进行模拟电路工作情况; (4)编写课程报告。

! 摘要 数字钟实际上是一个对标准频率(1Hz)进行计数的计数电路。振荡器产生的时钟信号经过分频器形成秒脉冲信号,秒脉冲信号输入计数器进行计数,并把累计结果以“时”、“分”、“秒”的数字显示出来。秒计数器电路计满60后触发分计数器电路,分计数器电路计满60后触发时计数器电路,当计满24小时后又开始下一轮的循环计数。一般由振荡器、分频器、计数器、译码器、数码显示器等几部分组成。 振荡电路:主要用来产生时间标准信号,因为时钟的精度主要取决于时间标准信号的频率及稳定度,所以采用石英晶体振荡器。 分频器:因为振荡器产生的标准信号频率很高,要是要得到“秒”信号,需一定级数的分频器进行分频。 计数器:有了“秒”信号,则可以根据60秒为1分,24小时为1天的进制,分别设定“时”、“分”、“秒”的计数器,分别为60进制,60进制,24进制计数器,并输出一分,一小时,一天的进位信号。 译码显示:将“时”“分”“秒”显示出来。将计数器输入状态,输入到译码器,产生驱动数码显示器信号,呈现出对应的进位数字字型。 由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路可以对分和时进行校时。另外,计时过程要具有报时功能,当时间到达整点前10秒开始,蜂鸣器1秒响1秒停地响5次。 } 为了使数字钟使用方便,在设计上使用了一个变压器和一个整流桥来实现数字钟电能的输入,使得可以方便地直接插入220V的交流电就可以正常地使用了。关键词数字钟振荡计数校正报时

简易数字钟设计(已仿真)

简易数字钟设计 摘 要 本文针对简易数字钟的设计要求,提出了两种整体设计方案,在比较两个方案的优缺点后,选择了其中较优的一个方案,进行由上而下层次化的设计,先定义和规定各个模块的结构,再对模块内部进行详细设计。详细设计的时候又根据可采用的芯片,分析各芯片是否适合本次设计,选择较合适的芯片进行设计, 最后将设计好的模块组合调试,并最终在EWB 下仿真通过。 关键词 数字钟,EWB ,74LS160,总线,三态门,子电路 一、引言:所谓数字钟,是指利用电子电路构成的计时器。相对机械钟而言,数字钟能达到准确计时,并显示小时、分、秒,同时能对该钟进行调整。在此基础上,还能够实现整点报时,定时报闹等功能。 设计过程采用系统设计的方法,先分析任务,得到系统要求,然后进行总体设计,划分子系统,然后进行详细设计,决定各个功能子系统中的内部电路,最后进行测试。 二、任务分析:能按时钟功能进行小时、分钟、秒计时,并显示时间及调整时间,能整点报时,定点报时,使用4个数码管,能切换显示。 总体设计 本阶段的任务是根据任务要求进行模块划分,提出方案,并进行比较分析,最终找到较优的方案。 方案一、采用异步电路,数据选择器 将时钟信号输给秒模块,秒模块的进位输给分模块,分模块进位输入给时模块,切换的时候使用2选1数据选择器进行切换,电路框图如下: 该方案的优点是模块内部简单,基本不需要额外的电路,但缺点也很明显,该方案结构不清晰,模块间关系混乱,模块外还需使用较多门电路,不利于功能扩充,且使用了异步电路,计数在59的时候,高一级马上进位,故本次设计不采用此方案。 方案二、采用同步电路,总线结构 时钟信号分别加到各个模块,各个模块功能相对独立,框图如下: 显示 切换 秒钟 分钟 小时 控制 1Hz 脉冲信号 闹钟

数字电子时钟源程序

#include "2407c.h" //数字电子时钟按Key1启动、Key2暂停、Key3复位、Key4调时 #define disable() asm(" setc INTM") //禁止全局中断 #define enable() asm(" clrc INTM") //允许全局中断 unsigned int k=0,s=30,m=59,h=23,j=1; unsigned int d[8] = {0x0100,0x0200,0x030a,0x0400,0x0500,0x060a,0x0700,0x0800}; unsigned int w[8] = {0x0101,0x0204,0x030a,0x0400,0x0503,0x060a,0x0700,0x0804}; //系统初始化子程序 void chushihua (void) { asm (" clrc SXM"); //抑制符号位扩展 asm (" clrc OVM"); //累加器正常溢出 asm (" clrc CNF"); //B0被配置为数据存储空间 *WDCR=0x00E8; //关闭看门狗 *SCSR1=0X00FC; //CLKIN=10M,CLKOUT=CLK*4=40M *IMR=0x0002; //开INT2 *IFR=0xFFFF; //清全部中断,写1清0,参见P43 *MCRB=0xFE3C; //启用SPI功能引脚 *MCRA=0; //IOPA、IOPB配置为一般I/O功能 *MCRC=0; //IOPE、IOPF配置为一般I/O功能 *PFDATDIR=0x00FF; //IOPF设置为输入,并上拉 *SPICCR=0x0F; //SPI软复位、上升沿输出数据、16位数据长度 *SPICTL=0x0E; //禁止过冲中断、允许TALK(发送)数据、主机模式、禁止SPI中断//上升沿有延时 *SPIBRR=0x0F; //SPI波特率=SYSCLK/(SPIBRR+1)=2.5M *SPICCR=*SPICCR|0x80; //SPI恢复操作,准备发送、接收下一个字符 WSGR=0x00; //禁止所有的等待状态 } //延时子程序 void delay(unsigned int pp) { unsigned int k,i; for(k=0;k

数字时钟完整版

设计报告撰写要求 1.设计报告,报告中要包括以下几部分内容: (1)封皮:设计题目,姓名、学号,班级,授课教师姓名【格式见后面附表】 (2)写明设计任务 (3)写出设计题目的原理框图; (4)完成设计功能所选用的器件,及相应各器件的引脚排列图和功能表;(5)画出综合逻辑电路图; (6)用仿真软件进行调试的调试过程(即:在调试时遇到了哪些实际问题,你是如何解决的); (7)各人在本次设计中的体会和收获。 正文小四号宋体,1.5倍行间距。

课程设计报告 学生姓名:学号: 学院:电气工程学院 班级: 电自1116 题目: 数字时钟设计 指导教师:张光烈职称: 2013 年 7月 4 日

一.设计要求 多功能数字钟具有时间显示、闹钟设置、报时功能、校正作用。走时准确、显示直观、精度、稳定等优点。电路装置十分小巧,安装使用也方便。同时在日期中,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱。数字钟广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。 数字钟已成为我们生活中不可缺少的必须品,广泛的应用于家庭以及办公室等公共场所。给我们生活、学习、工作、娱乐带来了极大的方便。 本次设计主要是采用555定时器提供定时脉冲,74160集成块作为计时模块,8段数码显示管作为显示工具。应用电子工作平台软件来设计和仿真多功能数字钟设计,并通过硬件实验的调试来相互验证实际结果。 由振荡器输出稳定的高频脉冲信号作为时间基准,经分频振荡器输出标准的秒脉冲,秒计数器满60向分计数器进位,分计数器满60向小时进位,小时计数器按“12翻1”规律计数,计数器经译码器送到显示器;计数出现误差可用校时电路进行校时、校分、校秒。并具有可整点报时与定时闹钟的功能。 设计一种多功能数字钟,该数字钟具有基本功能和扩展功能两部分。其中,基本功能部分的有准确计时,以数字形式显示时、分、秒的时间和校时功能。扩展功能部分则具有:定时控制、、自动报整点时数和触摸报正点的功能。数字钟的电路也是由主体电路和扩展电路两部分构成,在电路中,基本功能部分由主体电路实现,而扩展功能部电路实现。这两部分都有一个共同特点就是它们都要用到振荡电路提供的1Hz脉冲信号。在计时出现误差时电路还可以进行校时和校分,为了使电路简单所设计的电路不具备校秒的功能。并且要用数码管显示时、分、秒,各位均为两位显示,扩展部分要有相应的响应电路。分则由扩展能按时钟功能进行小时、分钟、秒计时,能调时调分,能整点报时,使用3个2位数码管显示。 总体设计

电子时钟单片机【完整版】

烟台南山学院 单片机课程设计题目电子时钟 姓名: 所在学院 所学专业: 班级: 学号: 指导教师: 完成时间:

随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。 由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。 在介绍本单片机的发展情况基础上,说明了本设计实现的功能,以及实验板硬件情况,并对各功能电路进行了分析。主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。实验证明效果良好,可以投入使用。 本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS—51单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。在本学期的开始我们进行了计算机工程实践,在实践中我们以微机原理与接口技术课程中所学知识为基础,设计了电子时钟系统。本系统为多功能数字钟的系统。本设计以单片机AT89c51为控制核心,选用DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示当前时间、日期、星期。本电子时钟具有日期、时、分、秒的显示、调整功能,采用的时间制式为24小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。 关键词:单片机 AT89S52 电子时钟汇编语言

简易数字钟的设计

第三单元简易数字钟的设计 数字钟是一种用数字显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无需机械传动等优点。因而得到了广泛的应用。小到人们日常生活中的电子手表,大到车站、码头、机场等公共场所的大型数字电子钟,数字钟到处可见。 在数字电路的学习中,已经学习过用计数器芯片搭建数字钟。51单片机内部集成了定时器/计数器,这为构建数字钟带来了方便。在本单元中,学习如何用51单片机来构建一个功能数字钟。 【任务要求】 在6个数码管上显示时、分、秒,共6位数字。 通过单片机内部定时器控制走时,走时准确。 系统有四个按键,功能分别是调整时间,加,减,确定。在按下调整键时候,显示“时”的两位数码管以1 Hz 频率闪烁。如果再次按下调整键,则“分”开始闪 烁,“时”恢复正常显示,依次循环,直到按下确定键,恢复正常的显示。在数码 管闪烁的时候,按下加或者减键可以调整相应的显示内容。按键支持短按和长按, 即短按时,所修改的数字每次增加1或者减小1,长按时候以一定速率连续增加或 者减少10。 【学习知识点】 数码管的原理,驱动程序的实现。 51单片机内部定时器的原理及应用 独立按键的原理及程序的实现。 【内容安排】 第一节:数码管显示原理及应用实现 第二节:独立按键检测原理及应用实现 第三节:计时的原理及实现 第四节:基于定时器的程序改进 第五节:数字钟的构建

第一节数码管显示原理及应用实现 1.1 数码管显示原理 数字钟要把时间显示到数字显示装置上,常用的数字显示装置有数码管、液晶、LED、CRT显示器等。在单片机系统设计中,LED数码管是最基本的显示装置。在数字钟的设计中我们用数码管对中的小时、分和表来进行显示。 LED数码管能显示各种数字或符号,由于它具有显示清晰、亮度高、寿命长、价格低廉等特点,因此使用非常广泛。图1.1是几个数码管的图片:a图为单位数码管, b图为双位数码管,c图为四位数码管。 a 单位数码管 b 双位数码管 c 四位数码管 图1.1 数码管图片 那么数码管是如何的工作呢?还记得我们小时候玩过的“火柴棒游戏”吗,几根火柴组合起来,可以拼成各种各样的图形,数码管实际上就是利用这个原理做成的。 图1.2 单个数码管引脚标号,共阴和共阳的内部连接图

数字电子技术数字时钟设计书

数字电子技术数字时钟设计书一.前言 钟表作为一种定时工具被广泛的使用在生产生活的各方面。人类最初依靠太阳的角度来进行定时,所以受天气的影响比较大,为了克服依靠自然现象定时的缺点人们发明的机器钟表,电子钟表一系列的定时工具。自改革开放以来我国科技得以高速发展,尤其是电子技术的飞速发展。各种各样的电器器材凭空而出。 下面我们就以数字钟为例简单介绍一下。数字钟我们听到这几个字,第一反应就是我们所说的数字,不错数字钟就是以数字显示取代模拟表盘的钟表,数字电子钟是一种用数字电路技术实现时、分、秒计时的装置,与机式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,电子钟表具有价格便宜,质量轻,定时误差小等优点,被广泛的应用在生产,生活的各个方面。由于电子钟能提供精确又被广泛的运用在各种测量之中。 二.设计要求 1.设计一个能直接显示“分”、“秒”的数字电子钟,要求60分钟为一计 时周期。 2.电路具有校时(分)功能。 三.设计目的 此次实验设计目的在于培养学生们的操作实践能力。通过对数字时钟原理的学习,增强同学们的理论知识以及思维能力。此次实验设计不单是理论的实现,相反的,更多的在于操作能力的锻炼。通过对数字时钟的实践操作,让同学们从中收获甚多。学会元器件识别、测试和安装的方法,掌握万用表的使用方法,学

会利用软、硬件独立进行电子设备的整机装配、调试方法,并达到产品的质量要求,从而锻炼和提高学生的动手能力,巩固和加深对电子学理论知识的理解和掌握,为以后专业设计、课程设计及毕业设计准备必要的工艺知识和操作技能。培养学生综合运用理论知识解决实际问题的能力。掌握电子线路的基本原理、基本方法,掌握焊接的基本技能,达到焊点大小适中、均匀、圆润、光亮、无虚焊的要求,通过简单电器的安装制作,熟悉电子仪器的安装制作过程和电路的调试及简单故障排除的技能。 四.电路设计方案 多功能数字钟原理框架如图所示,电路包括以下几个部分:标准秒信号发生器、显示电路、分秒计数器、校时电路。

(完整版)数字电路课程设计--数字时钟

《数字时钟》技术报告 概要 数字钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24 小时,显示满刻度为23 时59 分59 秒。一个基本的数字钟电路主要由秒信号发生器、“时、分、秒、”计数器、译码器及显示器组成。由于采用纯数字硬件设计制作,与传统的机械表相比,它具有走时准,显示直观,无机械传动装置等特点。 本设计中的数字时钟采用数字电路实现对“时” 、“分”、“秒” 的显示和调整。通过采用各种集成数字芯片搭建电路来实现相应的功能。具体用到了555 震荡器,74LS90 及与非,异或等门集成芯片等。该电路具有计时和校时的功能。 在对整个模块进行分析和画出总体电路图后,对各模块进行仿真并记录仿真所观察到的结果。 实验证明该设计电路基本上能够符合设计要求! 一、系统结构。 (1)功能。此数字钟能显示“时、分、秒”的功能,它的计时周期是24 小时,最大能显示23 时59 分59 秒,并能对时间进行调整和校对,相对于机械式的手表其更为准确。 2)系统框图

系统方框图 1 (3)系统组成。 1.秒发生器:由555 芯片和RC 组成的多谐振荡器,其555 上3 的输出频率由接入的电阻与电容决定。 2.校时模块:由74LS03 中的4 个与非门和相应的开关和电阻构成。 3.计数器:由74LS90 中的与非门、JK 触发器、或门构成相应芯片串接得到二十四、六十进制的计数器,再由74LS90 与74LS08 相连接而得到秒、分、时的进分别进位。 4.译码器:选用BCD 锁存译码器4511,接受74LS90 来的信号,转换为7 段的二进制数。

5.显示模块:由7 段数码管来起到显示作用,通过接受CD4511 的信号。本次选用的是共阴型的CD4511 。 二、各部分电路原理。 1.秒发生器:555 电路内部(图2-1)由运放和RS 触发器共同组成,其工作原理由8处接VCC ,C1 处当 Uco=2/3Vcc>u11 时运放输出为1,同理C2 也一样。最终如图3 接口就输出矩形波,而形成的秒脉冲。 图 2-2 555 功能表 2.校时模块:校时模块主要由74LS03中的4个与非门构成(图2-3),由其功能图看得出只要有一个输入端由H 到L 或者从L 到H 都会使输出端发生高低变化。因此通过开关的拨动产生高低信号从而对时、分处的计数器起到调数作用。

简易数字钟的设计

电 子 技 术 课 程 设 计 专业:电气工程及其自动化 学号: 姓名: 指导老师:

简易数字钟的设计 【摘要】本次在对简易数字钟进行设计中,提出了两种整体设计方案,设 计过程中对两种方案不断进行尝试,不断比较,在比较两个方案的优缺点后, 选择了其中较优的一个方案,进行由上而下层次化的设计,先定义和规定各 个模块的结构,再对模块内部进行详细设计。在之后详细设计的时候又根据 可采用的芯片,分析各芯片是否适合本次设计,选择较合适的芯片进行设计, 最后将设计好的模块组合并调试。 【关键词】 电路,数字钟,74LS160,子电路 一、引言 随着社会的进步,科技发展的速度越来越快,科技产品更新的频率加大,而且当今很多领域大都用到数字钟,我们身边也遍布与数字钟有关的生活用品。。 所谓数字钟,是指利用电子电路构成的计时器。相对机械钟而言,数字钟能达到准确计时,并显示小时、分、秒,同时能对该钟进行调整。在此基础上,还能够实现整点报时,定时报闹等功能。在做本简易数字钟设计之前,通过老师及查阅资料,我知道有对此多种设计方案 数字电路是我们计算机科学与技术学科的基础,数字电路实验是学习数字电路的一个重要环节,它不仅能巩固理论知识的学习,而其能提高实验动手能力,增强设计和调试电路的能力.设计过程采用系统设计的方法,先分析任务,得到系统要求,然后进行总体设计,划分子系统,然后进行详细设计,决定各个功能子系统中的内部电路,最后进行测试。 二、设计要求 能按时钟功能进行小时、分钟、秒计时,并显示时间及调整时间,能整点报时,定点报时,使用4个数码管,能切换显示。小时的计时要求为“12翻1”,分和秒的计时要求为60进位。 分和秒计数器都是模M=60的计数器,其计数规律为00—01—…—58—59—00…

数字时钟设计原理

创作编号: GB8878185555334563BT9125XW 创作者:凤呜大王* 数字时钟设计——原理图 一.实验目的 设计一个多功能数字中电路,基本功能为:①准确计时,以数字形式显示分、秒的时间;②分和秒的计时要求为60进位;③校正时间。 由振荡器产生高稳定的高频脉冲信号,作为数字钟的时间基准(系统时钟),再经分频器输出标准秒脉冲信号。秒计数器计满60后向分计数器进位,分计数器计满60后重新开始计时。计数器的输出经译码器送显示器。计时出现误差时可以用校时电路进行校分。

三.设计方案 1.振荡器的设计 振荡器是数字钟的核心。振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。一般来说,振荡器的频率越高,计时精度越高。 在这里我们选用由集成电路定时器555与RC组成的多谐振荡器。这里选用555构成的多谐振荡器,输出振荡频率v0=1KHz的脉冲,电路参数如下图所示。 2.分频器的设计 选用3片中规模集成电路计数器74LS90可以完成分频功能。因为每片为1/10分频,3片级联则可获得所需要的频率信号,即第1片的Q3端输出频率为100HZ,第2片的Q3端输出为10Hz,第3片的Q3端输出为1Hz。分频电路如下图所示: 创作编号: GB8878185555334563BT9125XW 创作者:凤呜大王*

3.分秒计数器的设计 分和秒计数器都是模M=60的计数器,其计数规律为:00-01-… -58-59-00…选74LS92作十位计数器,74LS90作个位计数器。再将它们级联组成模数M=60的计数器。分秒计数电路如下: 74LS90的原理图如下: 74LS92的原理图如下: 4.校时电路的设计 当数字钟接通电源或者计时出现误差时,需要校正时间(或称校时)。校时是数字钟应具备的基本功能。一般电子手表都具有时、分、秒等校时功能。为使电路简单,这里只进行分钟的校时,当按键按下后与非门U4D 的4号引脚输入低电平,与非门U4A的8号引脚输出一个下降沿脉冲,触发分计数器计数,从而实现校分功能。下图为校分电路:

相关主题