基于单片机的家用定时器设计.docx

上传人:b****4 文档编号:24488693 上传时间:2023-05-28 格式:DOCX 页数:21 大小:315.02KB
下载 相关 举报
基于单片机的家用定时器设计.docx_第1页
第1页 / 共21页
基于单片机的家用定时器设计.docx_第2页
第2页 / 共21页
基于单片机的家用定时器设计.docx_第3页
第3页 / 共21页
基于单片机的家用定时器设计.docx_第4页
第4页 / 共21页
基于单片机的家用定时器设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于单片机的家用定时器设计.docx

《基于单片机的家用定时器设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的家用定时器设计.docx(21页珍藏版)》请在冰豆网上搜索。

基于单片机的家用定时器设计.docx

基于单片机的家用定时器设计

黄冈师院物电院

《单片机技术》课程设计报告

 

项目名称:

家用多功能定时器设计与制作

专业年级:

电子信息工程2010级

学号:

201022240202

学生姓名:

指导教师:

冯杰

 

报告完成日期2013年1月1日

评阅结果评阅教师

第一章绪论1

1.1系统背景1

1.1.1单片机的电子技术1

1.1.2定时器介绍1

1.2设计要求2

第二章系统电路设计2

2.1设计框架介绍2

2.2系统硬件单元电路设计2

2.2.1复位电路设计2

2.2.2时钟电路设计3

2.2.3按键电路设计4

2.3系统硬件总电路4

第三章系统软件设计5

3.1系统软件流程图5

3.2系统程序设计5

3.2.1主程序5

3.2.2中断程序12

第四章实验结果和分析13

4.1实验使用的仪器设备13

4.2测试结果分析13

结束语13

参考文献14

第一章绪论

1.1系统背景

1.1.1单片机的电子技术

单片机是将CPU、RAM\ROM\定时器/计数器以及输入输出(I/O)接口等计算机的主要部件集成在一块的集成电路芯片,作为微机系统它还可以实现模/数转换、脉宽调制、计数器捕获/比较逻辑、高速I/O口和WDT各种控制功能。

通过在MCS-51系列的单片机中增设了全双工串行口I/O、片内数据存储器采用寻址范围为256kb的8位地址、均有四种工作方式的2个16位的定时/计数器、增加了中断系统、增设了颇具特色的布尔处理机、让单片机具有较强的指令寻址和运算功能这些技术,使单片机拥有了完善的外部并行总线(AB、DB、CB)具有多机识别功能的串行通信接口,规范了功能单元的特殊功能寄存器控制模式及适应控制器特点的布尔处理系统和指令系统,位发展具有良好兼容性的新一代单片机奠定了良好的基础。

单片机被广泛地应用在各种领域。

例如用来作家用电器中如洗衣机、电冰箱、微波炉、电饭煲、电视机、录像机以及其他视频音像设备的控制器;在办公室中用作大量通信、信息的承载体,比如磁盘驱动、打印机、复印机、电话等;它还可以来构成电子秤、收款机、仓储安全检测系统、空气调节系统等冷冻保鲜系统等的专用系统;在工业中,像工业过程控制、过程监制以及机电一体化控制等系统都是以单片机为核心火多网络系统;它还可以构成一些智能仪表与集成智能传感器传统的控制电路,实现一些像存储、数据处理、查找、判断、联网和语音功能等智能化功能,还可以构成一些电子系统中的集中显示系统、动力检测控制系统、自动驾驶系统、通信系统以及运行监视器等的冗余网络系统。

1.1.2定时器介绍

人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。

  1876年,英国外科医生索加取得一项定时装置的专利,用来控制煤气街灯的开关。

它利用机械钟带动开关来控制煤气阀门。

定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多,家用电器都安装了定时器来控制开关或工作时间。

1.2设计要求

主要内容和任务:

完成单片机最小系统板设计与制作,在此基础上通过编程设计家用多路定时控制器。

目标:

通过编写程序,使单片机最小系统具有正常数字钟功能,包括时间校正,具有至少三路定时开关控制功能,每路定时时间可以任意设置。

第二章系统电路设计

2.1设计框架介绍

按键输入电路:

对定时器输入定时时间、时钟时间,并对其调整。

时钟电路:

给单片机一个时钟信号,让其工作。

复位电路:

使单片机为初始状态,并从初态开始工作。

数码管:

显示时间或者其它。

2.2系统硬件单元电路设计

2.2.1复位电路设计

复位操作有上电自动复位、按键电平复位和外部脉冲复位三钟方式,本次实验用的是按键电平复位,利用电容的充放电公式来选择所需的电容、电阻,能保证复位信号高电平持续时间大于2个机器周期。

2.2.2时钟电路设计

该时钟电路是由晶体振荡器和两个微调电容组成的。

在单片机芯片内部有一个高增益反相放大器,其输入端为引脚XTAL1,其输出端为引脚XTAL2。

只需要在片外通过XTAL1和XTAL2引脚跨接晶体振荡器或在引脚与地之间加接微调电容,形成反馈电路,振荡器即可工作。

由于该晶振使用的是12MHZ的晶体,因此它的时钟周期是0.167us,机器周期为1us。

2.2.3按键电路设计

键K1(图中下方)控制状态的切换:

K1为0时,表示出处在正常的计时工作状态;为1,处在校正数字钟的“时”;为2,处在校正数字钟的“分”;为3,处在调整定时起始时间的“时”;为4,处在调整定时起始时间的“分”;为5,处在调整定时终止时间的“时”;为6,处在调整定时终止时间的“分”。

键K2(图中上方)为加号键,控制在各状态时加1。

该系统键扫描的方式为中断扫描方式,当键位上有键压下时,产生中断请求,CPU响应中断,执行中断服务程序,判断键位上压下的键的键号,继而做相应的处理。

2.3系统硬件总电路

第三章系统软件设计

3.1系统软件流程图

主程序在执行时,通过单片机内部中断对程序不断的扫描判断、刷新显示,当有键按下时,将数字钟中的时间与定时时间相比较,然后根据比较程序显示状态,并且还要延时消除抖动,之后进行按键处理,从而显示不同的状态,如此周期循环。

3.2系统程序设计

3.2.1主程序

ORG0000H

LJMPSTART;

ORG0003H;

LJMPKEY_1;时钟、定时时间修改的切换键

ORG000BH

LJMPTO_50ms;数字钟时间定时器。

每次定时时间为50ms,20次定时为1S,产生数字钟所需要的秒

ORG0013H;

LJMPKEY_2;时钟、定时时间修改的+号键

ORG0030H

START:

MOVSP,#60H;初始化堆栈首地址

MOV5FH,#0;定时器T0溢出次数单元清零

MOV5EH,#0;“秒”计数单元清

MOV5DH,#00;数字钟“分”初始值为0分钟

MOV5CH,#12;数字钟“时”初始值设为12点

MOV5BH,#30;定时起始时间“分”初始值设为30分

MOV5AH,#11;定时起始时间“时”初始值设为11

MOV50H,#40;定时终止时间“分”初始值设40分

MOV4fH,#11;定时终止时间“时”初始值设11点

MOV51H,#00H;设置显示方式为:

显示正常时间和定时时间的初始时间

SETB20H.0

CLR20H.1;首先显示定时时间的起始时间

;中断和定时器初始化

MOVTMOD,#00000001H;设定定时器T0工作在定时方式,工作在方式1,16位计数方式

SETBIE0;外部中断INT0为边沿触发方式

SETBIE1;外部中断INT1为边沿触发方式

SETBET0;允许定时器产生中断

SETBEX0;允许外部中断INT0产生中断

SETBEX1;允许外部中断INT1产生中断

SETBEA;开启所有中断

movp1,#0ffh

clrp1.0;定时器初始化

MOVTH0,#3CH;设置定时时间常数,定时时间为50ms

MOVTL0,#0B0H;

SETBTR0;启动T0开始定时计数

LOOP1:

lcallkey_1

lcallkey_2

jb20h.1,loop_qishi

LCALLBCD;将数字钟和定时器的时间转换为显示字符码,送相应的字符码存储单元

ljmploopa

loop_qishi:

lcallbcd1

loopa:

JB20H.0,LOOP2;在小时的低位的数码管的小数点每0.5秒闪动一次

MOVA,58H

ANLA,#01111111B

MOV58H,A

LJMPLOOP4

LOOP2:

MOVA,58H

ORLA,#10000000B

MOV58H,A

JB20H.1,LOOP3;如果处在调整定时终止时间状态,则定时时间“小时”的低位数码管的小数点点亮,否则该小时点熄灭

MOVA,54H

ANLA,#01111111B

MOV54H,A

LJMPLOOP4

LOOP3:

MOVA,54H

ORLA,#10000000B

MOV54H,A

LOOP4:

LCALLDISPLAY;调用显示子程序,显示数字钟时间和定时时间

LJMPLOOP1

SJMP$

KEY_1:

jbp1.6,key_1k

;lcalldelay40ms

lcalldelay40ms

lcalldelay40ms

jbp1.6,key_1k

MOVA,51H

CJNEA,#06H,KEY_1A

MOV51H,#00H

SJMPKEY_1end

KEY_1A:

INC51H

key_1end:

mova,51h

cjnea,#00h,key_1cc

clr20h.1

sjmpkey_1k

key_1cc:

cjnea,#01h,key_1c

clr20h.1

sjmpkey_1k

key_1c:

cjnea,#02h,key_1d

clr20h.1

sjmpkey_1k

key_1d:

cjnea,#03h,key_1e

clr20h.1

sjmpkey_1k

key_1e:

cjnea,#04h,key_1f

clr20h.1

sjmpkey_1k

key_1f:

cjnea,#05h,key_1h

setb20h.1

sjmpkey_1k

key_1h:

cjnea,#06h,key_1k

setb20h.1

key_1k:

RET

key_2:

jbp1.7,key_2bb

;lcalldelay40ms

lcalldelay40ms

lcalldelay40ms

jbp1.7,key_2end

MOVA,51H

CJNEA,#01H,KEY_2A

MOVA,5CH

CJNEA,#23,KEY_2B

MOV5CH,#00H

LJMPKEY_2END

KEY_2B:

INC5CH

key_2bb:

LJMPKEY_2END

KEY_2A:

CJNEA,#02H,KEY_2C

MOVA,5DH

CJNEA,#59,KEY_2D

MOV5DH,#00H

LJMPKEY_2END

KEY_2D:

INC5DH

LJMPKEY_2END

KEY_2C:

CJNEA,#03H,KEY_2E

MOVA,5AH

CJNEA,#23,KEY_2F

MOV5AH,#00H

LJMPKEY_2END

KEY_2F:

INC5AH

LJMPKEY_2END

KEY_2E:

CJNEA,#04H,KEY_2G

MOVA,5BH

CJNEA,#59,KEY_2H

MOV5BH,#00H

LJMPKEY_2END

KEY_2H:

INC5BH

LJMPKEY_2END

KEY_2G:

CJNEA,#05H,KEY_2I

MOVA,4FH

CJNEA,#23,KEY_2J

MOV4FH,#00H

LJMPKEY_2END

KEY_2J:

INC4FH

LJMPKEY_2END

KEY_2I:

CJNEA,#06H,KEY_2END

MOVA,50H

CJNEA,#59,KEY_2K

MOV50H,#00H

LJMPKEY_2END

KEY_2K:

INC50H

KEY_2END:

RET

BCD:

MOVDPTR,#TAB;设置字符码首地址

MOVA,5CH;取数字钟“小时”的值

MOVB,#10

DIVAB;分离高位和地位的值,A中存放高位值,B中存放低位的值

MOVCA,@A+DPTR

MOV59H,A;通过高位的值查表,获得高位数的字符码,并存入59H单元

MOVA,B

MOVCA,@A+DPTR

MOV58H,A;通过低位的值查表,获得低位数的字符码,并存入58H单元

MOVA,5DH;取数字钟“分”的值

MOVB,#10

DIVAB;分离高位和地位的值,A中存放高位值,B中存放低位的值

MOVCA,@A+DPTR

MOV57H,A;通过高位的值查表,获得高位数的字符码,并存入57H单元

MOVA,B

MOVCA,@A+DPTR

MOV56H,A;通过低位的值查表,获得低位数的字符码,并存入56H单元

MOVA,5AH;取定时器“小时”的值

MOVB,#10

DIVAB;分离高位和地位的值,A中存放高位值,B中存放低位的值

MOVCA,@A+DPTR

MOV55H,A;通过高位的值查表,获得高位数的字符码,并存入55H单元

MOVA,B

MOVCA,@A+DPTR

MOV54H,A;通过低位的值查表,获得低位数的字符码,并存入54H单元

MOVA,5BH;取定时器“分”的值

MOVB,#10

DIVAB;分离高位和地位的值,A中存放高位值,B中存放低位的值

MOVCA,@A+DPTR

MOV53H,A;通过高位的值查表,获得高位数的字符码,并存入53H单元

MOVA,B

MOVCA,@A+DPTR

MOV52H,A;通过低位的值查表,获得低位数的字符码,并存入52H单元

RET

BCD1:

MOVDPTR,#TAB;设置字符码首地址

MOVA,5CH;取数字钟“小时”的值

MOVB,#10

DIVAB;分离高位和地位的值,A中存放高位值,B中存放低位的值

MOVCA,@A+DPTR

MOV59H,A;通过高位的值查表,获得高位数的字符码,并存入59H单元

MOVA,B

MOVCA,@A+DPTR

MOV58H,A;通过低位的值查表,获得低位数的字符码,并存入58H单元

MOVA,5DH;取数字钟“分”的值

MOVB,#10

DIVAB;分离高位和地位的值,A中存放高位值,B中存放低位的值

MOVCA,@A+DPTR

MOV57H,A;通过高位的值查表,获得高位数的字符码,并存入57H单元

MOVA,B

MOVCA,@A+DPTR

MOV56H,A;通过低位的值查表,获得低位数的字符码,并存入56H单元

MOVA,4fH;取定时器“小时”的值

MOVB,#10

DIVAB;分离高位和地位的值,A中存放高位值,B中存放低位的值

MOVCA,@A+DPTR

MOV55H,A;通过高位的值查表,获得高位数的字符码,并存入55H单元

MOVA,B

MOVCA,@A+DPTR

MOV54H,A;通过低位的值查表,获得低位数的字符码,并存入54H单元

MOVA,50H;取定时器“分”的值

MOVB,#10

DIVAB;分离高位和地位的值,A中存放高位值,B中存放低位的值

MOVCA,@A+DPTR

MOV53H,A;通过高位的值查表,获得高位数的字符码,并存入53H单元

MOVA,B

MOVCA,@A+DPTR

MOV52H,A;通过低位的值查表,获得低位数的字符码,并存入52H单元

RET

DISPLAY:

MOVP2,#11111110B;将数字钟“小时”的高位的字符码送第一个数码管显示

MOVP0,59H

LCALLDELAY20MS;显示时间为20ms

MOVP2,#11111101B;将数字钟“小时”的低位的字符码送第二个数码管显示

MOVP0,58H

LCALLDELAY20MS;显示时间为20ms

MOVP2,#11111011B;将数字钟“分”的高位的字符码送第三个数码管显示

MOVP0,57H

LCALLDELAY20MS;显示时间为20ms

MOVP2,#11110111B;将数字钟“分”的低位的字符码送第四个数码管显示

MOVP0,56H

LCALLDELAY20MS;显示时间为20ms

MOVP2,#11101111B;将定时器“时”的高位的字符码送第五个数码管显示

MOVP0,55H

LCALLDELAY20MS;显示时间为20ms

MOVP2,#11011111B;将定时器“时”的低位的字符码送第六个数码管显示

MOVP0,54H

LCALLDELAY20MS;显示时间为20ms

MOVP2,#10111111B;将定时器“分”的高位的字符码送第七个数码管显示

MOVP0,53H

LCALLDELAY20MS;显示时间为20ms

MOVP2,#01111111B;将定时器“分”的低位的字符码送第八个数码管显示

MOVP0,52H

LCALLDELAY20MS;显示时间为20ms

RET;上述显示方式,一直循环,实现动态显示

3.2.2中断程序

TO_50ms:

CLRTR0;关闭T0中断

MOVA,5FH;读中断次数

CJNEA,#9,TO_50ms2;判断是否到0.5秒

CPL20h.0;到0.5秒,标志位求反,实现“时”的地位闪动效果,是对秒指示

TO_50ms2:

CJNEA,#19,TO_50ms1;未到1秒,中断次数加1,退出定时中断

MOV5FH,#00H;到1秒,中断次数单元内容清0,同时转到对“秒”的判

CPL20h.0;到0.5秒,标志位求反,实现“时”的地位闪动效果,是对秒指示

SJMPMIAO

TO_50ms1:

INC5FH

LJMPT0_END

MIAO:

MOVA,5EH;读秒单元内容

CJNEA,#59,MIAO1;判断是否到60秒,没有到60秒,则秒单元加1

MOV5EH,#00H;否则秒单元清0,同时转到”分”单元的判断

LJMPFEN

MIAO1:

INC5EH

LJMPT0_END

FEN:

MOVA,5DH;读分单元内容

CJNEA,#59,FEN1;判断是否到60分,没有到60分,则分单元加1

MOV5DH,#00H;否则分单元清0,同时转到对“时“单元的判断

LJMPSHI

FEN1:

INC5DH

LJMPT0_END

SHI:

MOVA,5CH;读“时”单元内容

CJNEA,#23,SHI1;判断是否到24小时,没有到24小时,则时单元加1

MOV5CH,#00H;否则时单元清0,

LJMPT0_END

SHI1:

INC5CH

T0_END:

SETBTR0;启动T0中断

MOVTH0,#3CH;设置定时时间常数,定时时间为50ms

MOVTL0,#0B0H;

RETI

DELAY20MS:

MOVR7,#10

DELAY1:

MOVR6,#200

DELAY2:

DJNZR6,DELAY2

DJNZR7,DELAY1

RET

DELAY40MS:

MOVR7,#100

DELAY3:

MOVR6,#200

DELAY4:

DJNZR6,DELAY4

DJNZR7,DELAY3

RET

TAB:

DB40H,79H,24H,30H,19H,12H,02H;0123456的字符码

DB78H,00H,10H,08H,03H,46H,21H,06H,0EH;789ABCDEF的字符码

TAB1:

DB8CH;P.的字符码

TAB2:

DB7FH;空,不显示的字符

END

第四章实验结果和分析

4.1实验使用的仪器设备

电脑,PTOTEUS软件,KEIL软件,电烙铁,吸锡器,钳子,直流电源,电阻,电容等基本元器件。

4.2测试结果分析

程序烧录到单片机中后,将其接到+5V左右的直流电源中,并开始按键实现时间控制或调整,设置多路定时时间,每路定时时间有起始时间和终止时间。

当设定好每路时间段后,按键恢复时钟状态并开始计时。

当到了指定的时间后,LED灯便会开始亮直至定时时间结束。

具体的显示情况如下:

第一次按下K1进入计时的小时调节;第二次按下K1进入计时的分钟调节;第三次按下K1进入定时器的小时调节;第四次按下K1进入定时器的分钟调节;第五次按下K1进入调整定时终止时间的时;第六次按下K1进入调整定时终止时间的分;第七次按下K1进入正常工作计时状态

结束语

通过本次实验学会了用keil编程,实现计时、多路定时功能,然后通过数码管显示时间还有LED灯的亮来提示定时。

当恢复到原来的初始状态时,再按按键可以看到原来的所定的三路时间的终止时间。

在制作PCB板的过程中和编程过程中,理解和加强了对单片机的了解。

这次设计课题中,在给定的源程序上修改并增加了多路定时程序,实现实验要求。

在焊接电路板过程中也没有出现过什么问题,只是在Protues仿真实验中有出现数码管显示数字成零不断跳动,而且LED灯自动跳变,相当于是中断不停执行、判断键值,特别不稳定。

虽然这次实验没有创新,但是也是自己动手查资料,修改程序,达到实验要求。

之前做过直流稳压电源,两级放大电路和数显温度计,但是都是照葫芦画瓢,没有融合自己的思想在所做的板子当中。

虽然达到实验要求,但是总是觉得只是为了完成老实交代的任务而已,并没有思考很多。

有时,只有经过自己亲手试验,才能更深层次的懂得实验原理和每部分电路的功能。

参考文献

Ø张俊谟.单片机中级教程——原理与应用(第二版).北京:

北京航空航天大学出版社,2006.10.

Ø谭浩强.C程序设计.北京:

清华大学出版社,2009.

Ø沈卫红.单片机应用系统实例与分析.北京:

北京航空航天大学出版社,2002

Ø苏文平.新型电子电路应用实例精选[M].北京:

北京航空航天大学出版社.2000.5.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1