基于51单片机的多功能电子钟设计毕业设计论文.docx
- 文档编号:6812834
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:36
- 大小:109.39KB
基于51单片机的多功能电子钟设计毕业设计论文.docx
《基于51单片机的多功能电子钟设计毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于51单片机的多功能电子钟设计毕业设计论文.docx(36页珍藏版)》请在冰豆网上搜索。
基于51单片机的多功能电子钟设计毕业设计论文
一、实验目的
1、巩固、加深51系列单片机应用方面的知识,提高综合运用知识的能力。
2、学会查阅相关资料和书籍,并熟悉编程、画流程图、原理图及PCB。
3、对课程方案分析、选择、比较、熟悉用51单片机做系统开发、研制的过程,软硬件设计方法、内容和步骤。
二、相关器件介绍
1、STC89C52单片机简介
STC89C52是一种高性能、低功耗8位CMOS微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52可以为众多嵌入式控制应用系统提供高度灵活、有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Mhz,6T/12T可选。
2、LCD1602液晶屏理简介
工业字符型液晶,能够同时显示16x02即32个字符。
3、DS1302
美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟电路。
它可以对年、月、日、周、日、时、分、秒进行计时,且具有闰年补偿等多种功能。
4、DS18B20温度传感器
美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持"一线总线"接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
DS18B20测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
三、流程图
四、功能介绍
(1)、电子钟有三个按键S0,S1,S2。
(2)、S0:
背光按键。
按下该键,LCD液晶屏背光点亮15秒。
(3)、S1:
设置按键。
按下该键即可对年月日星期时分秒进行调整,调整时对应的位闪烁。
当对应调整闹铃分钟时若再按下该键则电子钟回到正常的走时状态。
若调整了时间则走时停止,且回到走时状态时以先前设置的时间为当前时间继续走时,做没有调整时间,则系统在设置过程中一直进行走时。
(4)、S2:
调整键,若系统进入调整状态则每按一次调整键,对应的位加一。
若没有进入调整状态则没按下该键会显示闹铃的时间以及是闹铃开关的状态。
(5)、无论在何时同时按下S1和S2键将切换闹铃功能的开关,同时系统输出一声短的DI声。
(6)、若设置了闹铃,闹铃功能开启,则系统到达闹铃时间后会发出DI-DI-DI-DI的声音,直到闹铃被关闭或响铃时间达到一分钟。
关闭闹铃的方法是按下除背光按键以外的任意键。
五、元器件清单
元件参数
数量
元件类型
STC89C52
1
单片机
DS1302
1
时间基准芯片
DS18B20
1
温度传感器
LCD1602
1
液晶显示器
微动开关
3
微动开关
9012
2
PNP三极管
9013
1
NPN三极管
20K
1
可变电阻
32768
1
晶振
12MHz
1
晶振
电容
若干
电解电容、独石电容
电阻
若干
电阻
六、原理图
七、程序代码
;-------------文件信息-----------------------------------------------
;文件名:
main.asm
;创建人:
CK
;最后修改时间:
2011.11.15
;描述:
基于DS1302,DS18B20,51单片机的带温度,闹铃的万年历电子钟
;--------------------------------------------------------------------
RSBITP0.5;LCD数据/指令选择
RWBITP0.6;LCD读取/写入
ENBITP0.7;LCD使能
DQBITP3.4;DS18B20输入输出
T_CENBITP3.1;DS1302使能
T_CLKBITP3.3;DS1302时钟
T_IOBITP3.2;DS1302数据
SPEAKERBITP3.0
ALM_ONBIT20H.0
CLK_ONBIT20H.1
TIME_STOPBIT20H.2
TEMP_RWBIT20H.3
RT_TESTBIT20H.4
TEMP_ANSBIT20H.5
BEEP_ONBIT20H.6
LCDDATAP2;LCD连接的IO口
YEARDATA30H;实际的时间
WEEKDATA31H
MONTHDATA32H
DAYDATA33H
HOURDATA34H
MINUTEDATA35H
SECONDDATA36H
ALM_HDATA37H;设定的闹铃
ALM_MDATA38H
YEAR_HDATA39H
YEAR_LDATA3AH
MONTH_HDATA3BH
MONTH_LDATA3CH
DAY_HDATA3DH
DAY_LDATA3EH
HOUR_HDATA3FH
HOUR_LDATA40H
MIN_HDATA41H
MIN_LDATA42H
SEC_HDATA43H
SEC_LDATA44H
ALM_H_HDATA45H
ALM_H_LDATA46H
ALM_M_HDATA47H
ALM_M_LDATA48H
TEMP_PMSDATA49H
TEMP_HDATA4AH
TEMP_LDATA4BH
SET_MODEDATA4CH
TIME_UDDATA4DH
TEMP_UDDATA4EH
DAY_FEBDATA4FH
WEEK_1DATA50H
WEEK_2DATA51H
WEEK_3DATA52H
TEMPDATA53H
;********************************************************************
;主函数
;********************************************************************
ORG0H
LJMPMAIN
ORG0BH
LJMPTIME0
ORG1BH
LJMPTIME1
MAIN:
MOVSP,#55H
MOVTMOD,#21H
MOVIE,#10001010B;打开总,T0,T1,T2中断
MOVTH0,#HIGH(-50000)
MOVTL0,#LOW(-50000)
MOVTH1,#100
MOVTL1,#100
;初始化各标志位
CLRALM_ON
CLRBEEP_ON
SETBCLK_ON
CLRTIME_STOP
CLRTEMP_RW
CLRRT_TEST
MOVYEAR,#11H
MOVWEEK,#07H
MOVMONTH,#11H
MOVDAY,#27H
MOVHOUR,#00H
MOVMINUTE,#32H
MOVSECOND,#57H
MOVALM_H,#00H
MOVALM_M,#33H
MOVSET_MODE,#0
MOVTIME_UD,#7
MOVTEMP_UD,#5
;----可加入关闭涓流充电---
LCALLW_1302
LCALLAR_1302
;初始化LCD
LCALLINS_LCD
LCALLW_CGRAM
;设置温度精度
LCALLRT_18B20;复位DS18B20
MOVA,#0CCH
LCALLW_18B20;跳过ROM
MOVA,#4EH
LCALLW_18B20
MOVA,#7DH
LCALLW_18B20
MOVA,#0C9H
LCALLW_18B20
MOVA,#1FH;设置精度为9位
LCALLW_18B20
;读温度
LCALLRT_18B20;复位DS18B20
MOVA,#0CCH
LCALLW_18B20;跳过ROM
MOVA,#44H
LCALLW_18B20;启动温度转换
LCALLDL_100MS;延时等待转换结束
LCALLRT_18B20;复位DS18B20
MOVA,#0CCH
LCALLW_18B20;跳过ROM
MOVA,#0BEH
LCALLW_18B20;读内部RAM
LCALLR_18B20;读取第一个字节
MOVTEMP_L,A;存温度低位到TEMP_L
LCALLR_18B20;读取第二个字节
MOVTEMP_H,A;存温度高位到TEMP_H
LCALLAR_18B20;调用温度数据处理子程序
SETBTR0
MOVP1,#0FFH
;更新LCD
LCALLDISP
LOOP:
JBALM_ON,BEEP;判断是否开启闹铃
MOVA,P1
CPLA
JZLOOP;A取反后不为零说明有按键按下
LCALLSCAN_KEY
LJMPLOOP
;-------以下为闹铃部分-----------------------------------------------
BEEP:
MOVR0,#55
BEEP_1:
MOVR1,#4
BEEP_2:
MOVA,P1;判断是否有按键按下
CPLA
JNZBEEP_C
SETBBEEP_ON
LCALLDL_65MS
CLRBEEP_ON
SETBSPEAKER
LCALLDL_65MS
DJNZR1,BEEP_2;响4声
MOVR1,#5
BEEP_3:
MOVA,P1;判断是否有按键按下
CPLA
JNZBEEP_C
LCALLDL_100MS
DJNZR1,BEEP_3;静音0.5S
DJNZR0,BEEP_1;最多响60S
BEEP_C:
CLRALM_ON
CLRBEEP_ON
BEEP_E:
LCALLDL_20MS
MOVA,P1;判断是否有按键按下
CPLA
JNZBEEP_E
LJMPLOOP
;********************************************************************
;函数名:
SCAN_KEY
;功能描述:
键盘扫描子程序
;********************************************************************
SCAN_KEY:
MOVA,P1
LCALLDL_100MS
MOVTEMP,P1
CJNEA,TEMP,SCAN_RET;延时去抖动
OP_KEY:
CJNEA,#0CFH,OP_KEY1;判断是否按下多键
LCALLKEY_1_2
LJMPSCAN_END
OP_KEY1:
CJNEA,#0DFH,OP_KEY2;判断是否按下键1
LCALLKEY_1
LJMPSCAN_END
OP_KEY2:
LCALLKEY_2
SCAN_END:
LCALLDL_20MS
MOVA,P1
CPLA
JNZSCAN_END
SCAN_RET:
RET
;********************************************************************
;函数名:
KEY_1_2
;功能描述:
键1键2处理子程序
;********************************************************************
KEY_1_2:
CPLCLK_ON
LCALLDISP_CLK
MOVR7,#250
DIDI1:
MOVR6,#250
DIDI2:
CPLSPEAKER
DJNZR6,DIDI2
DJNZR7,DIDI1
SETBSPEAKER
RET
;********************************************************************
;函数名:
KEY_1
;功能描述:
键1处理子程序
;********************************************************************
KEY_1:
MOVA,SET_MODE
CJNEA,#9,KEY1_2;判断设置状态是否为10,若是则保存时间
MOVSET_MODE,#0
JNBTIME_STOP,KEY1_1
LCALLW_1302
KEY1_1:
LCALLAR_1302
CLRTIME_STOP
LCALLDISP
LJMPKEY1_RET
KEY1_2:
INCSET_MODE
LCALLDISP
KEY1_RET:
RET
;********************************************************************
;函数名:
KEY_2
;功能描述:
键2处理子程序
;********************************************************************
KEY_2:
MOVA,SET_MODE
JNZSET_T;若设置状态为0则显示闹铃,否则关
LCALLDISP_CLK;闭走时并调整数据
LJMPKEY2_RET
SET_T:
SETBTIME_STOP
CJNEA,#1,KEY2_0;判断是否调整年
MOVA,YEAR
INCA
DAA
MOVYEAR,A;无需判断年是否超出
LJMPK2_END
KEY2_0:
CJNEA,#2,KEY2_2;判断是否调整月
MOVA,MONTH
INCA
DAA
CJNEA,#13H,KEY2_1;判断月数是否超过12月
MOVA,#01H
KEY2_1:
MOVMONTH,A
LJMPK2_END
KEY2_2:
CJNEA,#3,KEY2_4;判断是否调整日
MOVA,MONTH
MOVDPTR,#MON_TAB;查表确定每月的天数
MOVCA,@A+DPTR
MOVDAY_FEB,A
KEY2_E:
MOVA,DAY
INCA
DAA
CJNEA,DAY_FEB,KEY2_3
MOVA,#01H
KEY2_3:
MOVDAY,A
LJMPK2_END
KEY2_4:
CJNEA,#4,KEY2_6;判断是否调整星期
MOVA,WEEK
INCA
DAA
CJNEA,#8H,KEY2_5
MOVA,#1
KEY2_5:
MOVWEEK,A
LJMPK2_END
KEY2_6:
CJNEA,#5,KEY2_8;判断是否调整时
MOVA,HOUR
INCA
DAA
CJNEA,#24H,KEY2_7;判断时数是否超过24时
MOVA,#0
KEY2_7:
MOVHOUR,A
LJMPK2_END
KEY2_8:
CJNEA,#6,KEY2_10;判断是否调整分
MOVA,MINUTE
INCA
DAA
CJNEA,#60H,KEY2_9;判断是否超过60分
MOVA,#0
KEY2_9:
MOVMINUTE,A
LJMPK2_END
KEY2_10:
CJNEA,#7,KEY2_12;判断是否调整秒
MOVA,SECOND
INCA
DAA
CJNEA,#60H,KEY2_11;判断是否超过60秒
MOVA,#0
KEY2_11:
MOVSECOND,A
LJMPK2_END
KEY2_12:
CJNEA,#8,KEY2_14;判断是否调整闹钟时
MOVA,ALM_H
INCA
DAA
CJNEA,#24H,KEY2_13;判断闹钟时间是否超过24时
MOVA,#0
KEY2_13:
MOVALM_H,A
LJMPK2_END
KEY2_14:
MOVA,ALM_M;调整闹钟分
INCA
DAA
CJNEA,#60H,KEY2_15
MOVA,#0
KEY2_15:
MOVALM_M,A
K2_END:
LCALLAR_1302
LCALLDISP
KEY2_RET:
RET
;********************************************************************
;函数名:
TIME0
;功能描述:
TIME0中断子程序
;********************************************************************
TIME0:
CLRTR0
PUSHPSW
PUSHACC
PUSHB
PUSHDPH
PUSHDPL
SETBRS1;切换到寄存器组2
JBTIME_STOP,T0_END;判断是否走时
DJNZTIME_UD,T0_END;判断是否需要更新时间
MOVTIME_UD,#7
MOVA,P1
CPLA
JNZT0_END;判断是否有按键按下
LCALLR_1302;从DS1302读取数据
LCALLAR_1302
JBALM_ON,T0_END;若正在响铃则不更新显示时间
JNBCLK_ON,CLK_END;若闹铃功能未开则跳过检测闹铃时间
MOVA,ALM_H;判断闹铃时间是否到了
CJNEA,HOUR,CLK_END
MOVA,ALM_M
CJNEA,MINUTE,CLK_END
MOVA,#0;只与设置闹铃的零秒做比较
CJNEA,SECOND,CLK_END
SETBALM_ON;置位响铃标志,并开启闹铃
SETBTR1
CLK_END:
DJNZTEMP_UD,T0_DISP;判断是否需要转换或读取温度
MOVTEMP_UD,#5
JBTEMP_RW,RDTEMP;判断是转换还是读取
SETBRT_TEST
LCALLRT_18B20;复位DS18B20
JBRT_TEST,T0_DISP
MOVA,#0CCH
LCALLW_18B20;跳过ROM
MOVA,#44H
LCALLW_18B20;启动温度转换
CPLTEMP_RW;切换到下次为读取
LJMPT0_DISP
RDTEMP:
SETBRT_TEST
LCALLRT_18B20;复位DS18B20
JBRT_TEST,T0_DISP
MOVA,#0CCH
LCALLW_18B20;跳过ROM
MOVA,#0BEH
LCALLW_18B20;读内部RAM
LCALLR_18B20;读取第一个字节
MOVTEMP_L,A;存温度低位到TEMP_L
LCALLR_18B20;读取第二个字节
MOVTEMP_H,A;存温度高位到TEMP_H
LCALLAR_18B20;调用温度数据处理子程序
CPLTEMP_RW;切换到下次为读取
T0_DISP:
LCALLDISP
T0_END:
MOVTH0,#HIGH(65536-50000)
MOVTL0,#LOW(65536-50000)
POPDPL
POPDPH
POPB
POPACC
POPPSW
SETBTR0
RETI
;********************************************************************
;函数名:
TIME1
;功能描述:
TIME1中断子程序
;********************************************************************
TIME1:
CLRTR1
JBALM_ON,T1_CON
SETBSPEAKER
LJMPT1_RET
T1_CON:
JNBBEEP_ON,T1_END
CPLSPEAKER
T1_END:
SETBTR1
T1_RET:
RETI
;********************************************************************
;函数名:
INS_LCD
;功能描述:
LCD初始化程序
;********************************************************************
INS_L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 多功能 电子钟 设计 毕业设计 论文