答辩用计时器河北工程大学.docx

上传人:b****2 文档编号:17098948 上传时间:2023-07-22 格式:DOCX 页数:22 大小:190.94KB
下载 相关 举报
答辩用计时器河北工程大学.docx_第1页
第1页 / 共22页
答辩用计时器河北工程大学.docx_第2页
第2页 / 共22页
答辩用计时器河北工程大学.docx_第3页
第3页 / 共22页
答辩用计时器河北工程大学.docx_第4页
第4页 / 共22页
答辩用计时器河北工程大学.docx_第5页
第5页 / 共22页
答辩用计时器河北工程大学.docx_第6页
第6页 / 共22页
答辩用计时器河北工程大学.docx_第7页
第7页 / 共22页
答辩用计时器河北工程大学.docx_第8页
第8页 / 共22页
答辩用计时器河北工程大学.docx_第9页
第9页 / 共22页
答辩用计时器河北工程大学.docx_第10页
第10页 / 共22页
答辩用计时器河北工程大学.docx_第11页
第11页 / 共22页
答辩用计时器河北工程大学.docx_第12页
第12页 / 共22页
答辩用计时器河北工程大学.docx_第13页
第13页 / 共22页
答辩用计时器河北工程大学.docx_第14页
第14页 / 共22页
答辩用计时器河北工程大学.docx_第15页
第15页 / 共22页
答辩用计时器河北工程大学.docx_第16页
第16页 / 共22页
答辩用计时器河北工程大学.docx_第17页
第17页 / 共22页
答辩用计时器河北工程大学.docx_第18页
第18页 / 共22页
答辩用计时器河北工程大学.docx_第19页
第19页 / 共22页
答辩用计时器河北工程大学.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

答辩用计时器河北工程大学.docx

《答辩用计时器河北工程大学.docx》由会员分享,可在线阅读,更多相关《答辩用计时器河北工程大学.docx(22页珍藏版)》请在冰点文库上搜索。

答辩用计时器河北工程大学.docx

答辩用计时器河北工程大学

信息与电气工程学院

课程设计说明书

(2013/2014学年第2学期)

 

课程名称:

单片机课程设计

题目:

答辩用计时器设计

专业:

电气工程及其自动化

班级:

电气1104

姓名:

学号:

指导教师:

设计周数:

2周

设计成绩:

2014年6月20日

目录

一、课程设计任务简介3

1.1目的:

3

1.2主要任务3

1.3技术要求4

二、设计方案4

2.1硬件设计4

2.2软件方案5

三、系统硬件设计5

3.1最小系统电路5

3.2显示电路6

3.3声光电路6

3.4按键电路7

四、系统软件设计8

4.1、主程序8

4.2、显示程序8

4.3、按键扫描程序8

4.4、按键处理程序8

4.5、定时中断服务程序8

五、系统调试8

5.1静态调试8

5.2动态调试9

5.3软件调试9

5.4调试结果10

附录一、原理图12

附录二、PCB图13

附录三、程序清单14

一、课程设计任务简介

1.1目的:

(1)了解倒计时计时器的原理,从而学会制作答辩用计时器。

(2)通过答辩用计时器的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及使用方法。

(3)学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。

1.2主要任务

(1)4位数码管用于显示分十位、分个位;秒十位、秒个位;

(2)调节键、加一键、减一键、开始键;

(3)蜂鸣器及红色发光二极管。

要求:

上电时,显示为10:

00,一旦运行开始,蜂鸣器不响,发光二极管不亮。

经过一秒刷新数据,仅有“开始”键有效。

根据“调节”键按下的次数,分别用于调整分十位、分个位、秒十位。

按下“加一”或“减一”键是针对具体调节对象进行数据修改。

奇数次按下“开始”键,从当前显示数据开始倒计时,偶数次按下“开始”键,暂停计时,且保持显示数据不变。

当定时结束时,以一定频率驱动蜂鸣器,并使发光二极管发光。

1.3技术要求

(1)熟练应用protel绘制原理图和pcb图。

(2)掌握数码管显示相关电路和程序。

(3)单片机中断程序设计。

 

二、设计方案

2.1硬件设计

根据设计的要求可知,系统的硬件原理框图如图所示。

图2.1系统的硬件原理框图

2.2软件方案

根据设计要求,程序框图如图所示。

软件可由汇编语言完成,也可由C语言完成。

软件设计可以分为以下几个功能模块:

主程序:

初始化、数码管显示、按键扫描和按键处理。

定时中断程序:

完成对一秒的定时。

 

三、系统硬件设计

3.1最小系统电路

该板作为课程设计的核心电路板使用,板上有单片机及附属电路,RS-232通信驱动电路,高低电平测试电路等。

课程设计电路中需要的其他电路在此基础上扩展,通过插孔连接。

扩展电路在万用板上制作。

3.2显示电路

如上图所示,由四个共阳数码管来实现倒计时。

由于P0口输出电流小,需外接上拉电阻,公共端通过三极管驱动接到P1口的P1.0、P1.1、P1.2、P1.3口用单片机来控制其片选。

3.3声光电路

因为课题要求定时结束时LED蜂鸣器同时工作来声光报警,鉴于单片机P1口带负载能力有限,我们选择了PNP三极管9012作为驱动,同时又为了给LED限流,我们又串入了电阻,这样可以达到理想的结果。

3.4按键电路

按键按下后低电平读入p1口,接上拉电阻,确护芯片正常工作,控制电流的大小。

四、系统软件设计

4.1、主程序

主程序的设计包括:

初始化子程序,中断初始化子程序,有关内存单元及相关部件的初始化和一些子程序调用等等。

初始化子程序:

为显示缓冲区写入10:

00

中断初始化子程序:

为定时器赋初值,开中断。

4.2、显示程序

显示程序:

将显示缓冲区中的4位BCD码用动态扫描方式扫描显示。

4.3、按键扫描程序

按键扫描程序:

循环检测开始键和调节键是否按下并记录键值

4.4、按键处理程序

按键处理程序:

根据按键扫描得到的键值进行相关运算,再根据结果进行相应处理。

4.5、定时中断服务程序

定时中断服务程序:

进行计时操作,完成一秒的定时。

定时器0每隔50ms溢出中断一次,则循环中断20次延时时间为1秒,上述过程重复60次为1分钟,分计时60次为1小时。

五、系统调试

5.1静态调试

静态调试是在用户系统未工作时的一种硬件检测。

第一步:

目测。

检查外部的各种元件或者是电路是否有断点。

第二步:

用万用表测试。

先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。

第三步:

加电检测。

给板加电,检测所有插座或是器件的电源端是否符合要求的值

第四步:

联机检查。

因为只有用单片机开发系统才能完成对用户系统的调试。

5.2动态调试

动态调试:

是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。

动态调试的一般方法是由近及远、由分到合。

由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。

当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。

由分到合的调试既告完成。

由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。

调试时,采用去掉无关元件的方法,逐层调试下去,就定位故障元件了。

5.3软件调试

软件调试:

是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。

可以利用仿真器加以调试,对系统单个单元进行调试,当单元电路成功后,在对整个程序调试,最后在用CPU芯片调试。

5.4调试结果

 

开始运行

 

上电时刻

 

开始运行

 

 

计时结束

附录一、原理图

 

附录二、PCB图

 

附录三、程序清单

DISPBUFEQU40H;定义显示缓冲区

TIME_COUNTEQU44H;定义定时器计数单元

K1BITP2.0;开始键

K2BITP2.1;调节键

K3BITP2.2;加一键

K4BITP2.3;减一键

K1_NUMEQU45H;开始键键值

K2_NUMEQU46H;调节键键值

ORG0000H

AJMPMAIN

ORG000BH;定时中断入口地址

AJMPTIME_0;进入定时中断服务子程序

ORG0030H

MAIN:

MOVP1,#0FFH;P1口置一

CLRP2.4;开数码管中间小灯,作为时间指示灯

MOVK1_NUM,#0;开始键键值清零

MOVK2_NUM,#0;调节键键值清零

MOV47H,#200;为47H单元赋值

LCALLINIT_0;调用定时中断初始化子程序

LCALLINIT_DATA;调用数据初始化子程序

LOOP:

LCALLDISP;调用显示子程序

LCALLKEY_SCAN;调用按键扫描子程序

LCALLKEY_PROC;调用按键处理子程序

MOVA,DISPBUF;判断计时是否结束

CJNEA,#0,NEXT_6

MOVA,DISPBUF+1

CJNEA,#0,NEXT_6

MOVA,DISPBUF+2

CJNEA,#0,NEXT_6

MOVA,DISPBUF+3

CJNEA,#0,NEXT_6

CLRTR0;结束,关定时0

LOOP1:

LCALLDISP_GOOD;调用显示GOOD子程序

LCALLBEEP_ONE;调用蜂鸣器子程序

SETBP2.4;关时间指示灯

CLRP2.6;点亮计时结束指示灯

DJNZ47H,LOOP1

AJMPMAIN;循环

NEXT_6:

AJMPLOOP

;以下是按键扫描子程序

KEY_SCAN:

JBK1,NEXT_7;判断开始键是否按下,没有跳转

LCALLDL_10MS;按下,消抖

JNBK1,$

INCK1_NUM;开始键键值加一

AJMPKEY_SCAN;继续扫描

NEXT_7:

JBK2,NEXT_8;判断调节是否按下,没有跳转

LCALLDL_10MS;按下,消抖

JNBK2,$

INCK2_NUM;调节键键值加一

AJMPKEY_SCAN;继续扫描

NEXT_8:

RET;返回

;以下是按键处理子程序

KEY_PROC:

MOVA,K1_NUM;判断开始键键值是奇数还是偶数

MOVB,#2

DIVAB

MOVA,B

CJNEA,#0,NEXT_9;奇数跳转,偶数顺序执行

CLRTR0;关定时器

AJMPTZ;跳转至按键调整

NEXT_9:

SETBTR0;开定时器

AJMPPROC_EXIT;退出按键处理

TZ:

MOVA,K2_NUM;根据调节键键值做出不同处理

CJNEA,#1,TZ_FENGE;调节键键值等于1,调秒的十位

TZ_MSHI:

JBK3,TZ_SUB_MSHI;是否加一,不是跳转

LCALLDL_10MS;按下,消抖

JNBK3,$

INCDISPBUF+2;秒十位加一

MOVA,DISPBUF+2;是否超过5

CJNEA,#6,TZ_MSHI;超过清零,没有继续扫描

MOVDISPBUF+2,#0

AJMPTZ_MSHI

TZ_SUB_MSHI:

JBK4,PROC_EXIT;是否减一,不是跳转

LCALLDL_10MS;按下,消抖

JNBK4,$

DECDISPBUF+2;秒十位减一

MOVA,DISPBUF+2;是否减到0

CJNEA,#0FFH,TZ_MSHI;减到0,为秒十位赋5,没有继续扫描

MOVDISPBUF+2,#5

AJMPTZ_MSHI

TZ_FENGE:

CJNEA,#2,TZ_FENGSHI

JBK3,TZ_SUB_FENGE

LCALLDL_10MS

JNBK3,$

INCDISPBUF+1

MOVR0,DISPBUF+1

CJNER0,#0AH,TZ_FENGE

MOVDISPBUF+1,#0

AJMPTZ_FENGE

TZ_SUB_FENGE:

JBK4,PROC_EXIT

LCALLDL_10MS

JNBK4,$

DECDISPBUF+1

MOVR0,DISPBUF+1

CJNER0,#0FFH,TZ_FENGE

MOVDISPBUF+1,#9

AJMPTZ_FENGE

TZ_FENGSHI:

CJNEA,#3,NEXT_10

JBK3,TZ_SUB_FENGSHI

LCALLDL_10MS

JNBK3,$

INCDISPBUF

MOVR0,DISPBUF

CJNER0,#0AH,TZ_FENGSHI

MOVDISPBUF,#0

AJMPTZ_FENGSHI

TZ_SUB_FENGSHI:

JBK4,PROC_EXIT

LCALLDL_10MS

JNBK4,$

DECDISPBUF

MOVR0,DISPBUF

CJNER0,#0FFH,TZ_FENGSHI

MOVDISPBUF,#9

AJMPTZ_FENGSHI

NEXT_10:

CJNEA,#4,PROC_EXIT;若调节键键值超过3,给键值赋一

MOVK2_NUM,#1

PROC_EXIT:

RET;返回

;以下是定时器中断服务子程序

TIME_0:

PUSHACC;保存数据

PUSHPSW

MOVTH0,#4BH;重新赋初值

MOVTL0,#6AH

DJNZTIME_COUNT,TIME_EXIT;一秒到了吗

MOVA,DISPBUF+3;秒个位减一

CJNEA,#0,NEXT;判断秒个位是否为0

MOVDISPBUF+3,#9;为0,给秒个位赋9

MOVA,DISPBUF+2

CJNEA,#0,NEXT_1;判断秒十位是否为0

MOVDISPBUF+2,#5;为0,给秒十位赋5

MOVA,DISPBUF+1

CJNEA,#0,NEXT_4;判断分个位是否为0

MOVDISPBUF+1,#9;为0,给分个位赋9

MOVA,DISPBUF

CJNEA,#0,NEXT_5;判断分十位是否为0

AJMPEXIT_1;为0,跳转

NEXT:

DECDISPBUF+3;不为0,秒个位减一

AJMPEXIT_1

NEXT_1:

DECDISPBUF+2;不为0,秒十位减一

AJMPEXIT_1

NEXT_4:

DECDISPBUF+1;不为0,分个位减一

AJMPEXIT_1

NEXT_5:

DECDISPBUF;不为0,分十位减一

AJMPEXIT_1

EXIT_1:

MOVTIME_COUNT,#20;重新为定时器计数单元赋值

TIME_EXIT:

POPPSW

POPACC

RETI

;以下是显示子程序

DISP:

MOVDPTR,#TAB;数据首地址给DPTR

MOVA,DISPBUF;取显示分十位数

MOVCA,@A+DPTR

MOVP0,A;发给P0

CLRP1.0;开分十位

LCALLDL_2MS;延时

SETBP1.0;关分十位

MOVA,DISPBUF+1;取显示分个位数

MOVCA,@A+DPTR

MOVP0,A

CLRP1.1

LCALLDL_2MS

SETBP1.1

MOVA,DISPBUF+2;取显示秒十位数

MOVCA,@A+DPTR

MOVP0,A

CLRP1.2

LCALLDL_2MS

SETBP1.2

MOVA,DISPBUF+3;取显示秒个位数

MOVCA,@A+DPTR

MOVP0,A

CLRP1.3

LCALLDL_2MS

SETBP1.3

RET

;以下是显示GOOD子程序

DISP_GOOD:

MOVDPTR,#TAB

MOVA,#9

MOVCA,@A+DPTR

MOVP0,A

CLRP1.0

LCALLDL_2MS

SETBP1.0

MOVA,#0

MOVCA,@A+DPTR

MOVP0,A

CLRP1.1

LCALLDL_2MS

SETBP1.1

MOVA,#0

MOVCA,@A+DPTR

MOVP0,A

CLRP1.2

LCALLDL_2MS

SETBP1.2

MOVA,#10

MOVCA,@A+DPTR

MOVP0,A

CLRP1.3

LCALLDL_2MS

SETBP1.3

RET

;以下是数据初始化子程序

INIT_DATA:

MOVDISPBUF,#01H;上电显示10:

00

MOVDISPBUF+1,#00H

MOVDISPBUF+2,#00H

MOVDISPBUF+3,#00H

RET

;以下是定时器初始化子程序

INIT_0:

MOVTIME_COUNT,#20;为定时计数值赋20

MOVTMOD,#01H;定时器T0,方式1

MOVTH0,#4BH;定时50MS赋初值

MOVTL0,#6AH

SETBEA;开中断

SETBET0;开定时器T0中断

RET

;以下是蜂鸣器响一声子程序

BEEP_ONE:

CLRP2.7;开蜂鸣器

ACALLDL_2MS;延时2ms

SETBP2.7;关蜂鸣器

ACALLDL_2MS;延时2ms

RET

;以下是2ms延时子程序

DL_2MS:

MOVR5,#050H

DL2MS0:

MOVR6,#0BH

DJNZR6,$

DJNZR5,DL2MS0

RET

;以下是2ms延时子程序

DL_10MS:

MOVR5,#065H

DL10MS0:

MOVR6,#030H

DJNZR6,$

DJNZR5,DL10MS0

RET

;共阳数码管显示表

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0A1HEND

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2