单片机电子表设计.docx

上传人:b****4 文档编号:3517870 上传时间:2022-11-23 格式:DOCX 页数:18 大小:142.33KB
下载 相关 举报
单片机电子表设计.docx_第1页
第1页 / 共18页
单片机电子表设计.docx_第2页
第2页 / 共18页
单片机电子表设计.docx_第3页
第3页 / 共18页
单片机电子表设计.docx_第4页
第4页 / 共18页
单片机电子表设计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机电子表设计.docx

《单片机电子表设计.docx》由会员分享,可在线阅读,更多相关《单片机电子表设计.docx(18页珍藏版)》请在冰豆网上搜索。

单片机电子表设计.docx

单片机电子表设计

目录

第1章设计内容与要求1

1.1系统结构框图与工作原理设计内容1

1.2设计要求1

第2章系统总体方案选择说明2

2.1总体思路2

2.2系统方案选择2

2.3系统总体方案说明2

第3章系统结构框图与工作原理3

3.1系统结构框图3

3.2系统工作原理3

第4章模块电路设计4

4.1调节时钟部分电路4

4.2显示部分电路4

4.3单片机部分电路5

第5章软件设计说明6

5.1主程序流程图6

5.2显示程序流程图7

5.3定时计数器T0中断服务流程图8

第6章电路的调试9

第7章设计总结10

附录1参考文献11

附录2总体设计图12

附录3程序清单13

第1章设计内容与要求

1.1系统结构框图与工作原理设计内容

(1)设计时钟包括:

时钟、跑表;

(2)使用6位LED进行显示。

(3)能通过键盘对时钟进行调整;

(4)做时钟时在6位LED显示器上显示时、分、秒,

(5)做跑表时具有跑表启动和跑表清零和暂停功能键。

1.2设计要求

(1)确定系统设计方案;

(2)进行系统的硬件设计;

(3)完成必要的参数计算与元器件的选择;

(4)完成应用程序设计;

(5)进行软硬件调试;

 

第2章系统总体方案选择说明

2.1总体思路

利用8051的P2口作为控制单片机跑表开始,暂停,清零,返回的输入端。

P3作为控制LED的显示时钟的调节时间控制信号输入端。

P0,P1控制LED动态显示选择控制端控制六个LED的显示时间和显示顺序。

定时器T0定时50ms。

T1定时10ms,37H-39H保存时钟的变化量。

41H-43H保存秒表的变化量。

其中为了方便显示,每个变量对应两个单元,以便将变量拆开成两个十进制的数方便显示。

2.2系统方案选择

本系统采用AT89C51单片机、6位数码管显示(不带译码器)和7个键盘键盘操作(分别为功能键,加一键,减一键,返回键,开始键,暂停键,清零键)作为调节时间的按钮构成一个单片机多功能时钟的硬件。

此外包括一些必须的晶振电路和复位电路。

2.3系统总体方案说明

本系统是一个多功能时钟,具有时间显示功能和跑表功能,数码管显示时间,通过三个按钮对时间进行调整,按键1为时分秒控制按钮,2、3为加减调节按钮。

(1)计数单元由单片机内部定时器/计数器T0来实现。

(2)时间显示功能通过LED数码管动态扫描来实现,其中P0口控制数码管的断选信号,P1口的低六位控制数码管的六个片选信号。

(3)时间调整通过接入键盘来实现。

第3章系统结构框图与工作原理

3.1系统结构框图

3.2系统工作原理

对定时器T0一个50ms的定时时间,软件计数功能的单元地址R2为20,当R2减到0是秒加一。

当秒、分值为60时改位清零,且高位加一。

当时的值达到24时,显示全部为0,然后进入新的一天。

该系统是通过P2控制时分秒位的选择,通过P0口实现时分秒的显示。

时分秒的调节由外接键盘的上三个按钮控制,按一下调秒、两下调分、三下调时、按四下返回。

对于定时器T1设定一个10ms的定时时间,当进入一次中断时,秒表最后一位的数字加一。

在秒表的子程序中加入按键检测程序,保证在跑表运行的过程中能随时的响应外部按键的信号进行相关的操作。

跑表变量储存在41H-43H的单元中,变化后,经过数据处理,经显示程序显示。

 

第4章模块电路设计

4.1调节时钟部分电路

图1调节时钟部分电路

4.2显示部分电路

图2显示部分电路(时钟电路)

图3显示部分电路(跑表电路)

4.3单片机部分电路

图4单片机部分电路

第5章软件设计说明

使用单片机中的定时器中断,定时50ms,设定一计数单元R0为20,当R2减为0时(50×20=1000)时秒值加一,当秒值为60时,分值加一秒值清零。

分值为60时时值加一分值清零时值为24时时分秒全部清零。

秒表时,采用和时钟基本一致的设计方法,只不过奖定时器T1的时间设定为10ms,然后进位的问题和时钟基本一致,不过秒表的进位应该是100个0.01S进一位。

由于存在两个不同的工作状态,因此,每一个状态的后面都要加一段检测按键的程序,方便在有外部按键信号的时候及时的响应,防止进入死循环。

5.1主程序流程图

图5主程序流程图

5.2显示程序流程图

图6显示程序流程

5.3定时计数器T0中断服务流程图

图7定时器/计数器中断流程图

 

第6章电路的调试

把编好的程序输入到新建的WAVE6000中,保存编译得到一个*hex的文件,导入单片机中运行,时钟开始显示时间。

等到秒钟为59时下一秒分钟加一,秒钟清零,等分秒都为59时下一秒时钟加一分秒清零,当时为23分秒为59时下一秒时分秒全部清零。

显示部分电路调时通过。

按下键盘1键进入调秒状态每按下2键秒钟加一,每按下3键秒钟减一;按两下键盘1键进入调分状态,每按下2键分钟加一,每按下3键分钟减一;按三下键盘1键进入调时状态,每按下2键时钟加一,每按下3键时钟减一;按四下键盘1键返回计数状态。

控制部分调时通过。

再调试秒表的过程中,由于精确到0.01S的过程,因此必须慎重考虑DELAY程序的应用以及循环次数的确定,否侧回造成显示出问题,过快或过慢都会对试验结果造成不良的影响。

为此,在秒表的调试过程中,必须谨慎。

在调时电路过程中要认真观测合记录,一发下问题就及时调节,当实际结果合理论预想一致时我们就是幸运的了,当不一致是我们就尽量想办法让他们一致,调试时一个验证成果的过程,对整个设计过程来说是相当重要的。

 

第7章设计总结

课程设计是对课程的实践与总结,只要做了就会有收获。

在这次设计中我加深了程序的阅读能力、程序的灵活调用、单片机的设计制作调试方法。

为了能顺利的完成这次的课程设计我找了很多资料也因此知道了不少课本上没深入介绍的东西,提高了我的思维空间,拓宽了我的知识面,加深了对单片机课程的兴趣。

最主要的是加强了动手的能力,当遇到难懂的问题是老师和同学们的耐心讲解更是让我在这阴雨连绵的季节多了几分暖意。

遇到问题是先思考,解决不了再查资料,实在弄不出来就问老师和同学们,毕竟不耻下问是中华名族的优良美德。

只有如此才能不断进步。

通过这次课程设计我了解到学好一门汇编语言,最根本的应该是了解所能接触到的程序中最关键的是哪些,实际的应用编写更是非常重要,所以我们一定要自己动手试一下,尝试编写程序。

因为做一个旁观者事不能够学到东西的。

此外在此次设计中我对此次设计的内容有一下感触,第一,由于此次设计的过程中设计秒表和时钟的显示,即在一个数码管上显示两种变量,必须确定以下几点:

1、时钟在切换的过程中不能停,秒表在切换的过程中可以停,为了简化设计,我设计的是在切换的过程中秒表停止。

2、必须仔细的核对每一个变量的名字,我曾经在核对变量的名字上面花了很大的力气,由于变量的名字错了,软件编译时很少能检查出,因此仿真时往往不容易发现。

3、要每个子程序的调试,这样才能确认某一个部分是正确的,这样才有继续往下做的信心和勇气。

十分感谢学校安排这次课程设计,他使我们对前面的知识进行了积累,也十分感谢周老师以及同学们在设计过程中对我的帮助。

附录1参考文献

1、《单片机C语言轻松入门》周坚编北京航空航天大学出版社

2、单片机人机接口实例公茂法编著,北京航空航天大学出版社

 

附录2总体设计图

 

附录3程序清单

MIAOLEQU30H;存放时间的变量分别为秒钟秒钟个位,十位

MIAOHEQU31H

FENLEQU32H

FENHEQU33H

SHILEQU34H

SHIHEQU35H

SHIEQU39H;存放10进制的时钟信息

FENEQU38H

MIAOEQU37H

FUCEQU36H;功能键按键计数器,记录功能键按下的次数

FANHUI1BITP2.0

STARTBITP2.1;跑表计时开始

STOPBITP2.2;跑表计时停止

CLEARBITP2.3;跑表清零

SECOND1EQU41H;保存跑表变量

SECOND2EQU42H

FENGEQU43H

SECOND1LEQU44H

FENGLEQU48H

SECOND2LEQU46H

SECOND1HEQU45H

FENGHEQU49H

SECOND2HEQU47H

ORG0000H

SJMPMAIN

ORG000BH

LJMPTIME0

ORG001BH

LJMPTIME1

ORG0030H

INIT:

MOVTMOD,#11H;选定时器0方式1

MOVTH0,#3CH;置初值

MOVTL0,#0B0H;

MOVTH1,#0D8H;置初值(10MS)0.01S

MOVTL1,#0F0H;

MOVR2,#20;1秒时间50msX20

SETBET0;开定时器0中断

SETBET1

SETBEA;开中中断

SETBTR0;启动定时器0

MOVP3,#0ffh;读键值,初始化

MOVP2,#0ffh

RET

MAIN:

ACALLINIT;调用初始化函数

A1:

MOVDPTR,#TAB;查表初值

ACALLKEYSCAN

MOVA,P2

JNBFANHUI1,FANHUI

JNBSTART,SEC_WATCH;判断是否是跑表计时开始

JNBSTOP,STOP_WATCH

JNBCLEAR,CLEAR_WATCH

SJMPA1;判断设置时钟时

LJMPA1

FANHUI:

ACALLKEYSCAN

ACALLDISP

ACALLCHULI

CLRTR1

JNBSTART,SEC_WATCH;判断是否是跑表计时开始

JNBSTOP,STOP_WATCH

JNBCLEAR,CLEAR_WATCH

SJMPFANHUI

SEC_WATCH:

MOVDPTR,#TAB

ACALLDELAY

ACALLDISP1

ACALLCHULI1

SETBTR1

MOVSECOND1,#00

MOVSECOND2,#00

A3:

LCALLDISP1

LCALLCHULI1

JNBCLEAR,CLEAR_WATCH

JNBSTOP,STOP_WATCH

JNBFANHUI1,FANHUI

JNBSTART,SEC_WATCH

AJMPA3

CLEAR_WATCH:

MOVSECOND1,#00

MOVSECOND2,#00

LCALLCHULI1

ACALLDISP1

LCALLDELAY

AJMPA3

STOP_WATCH:

CLRTR1

LCALLCHULI1

ACALLDISP1

SJMPA3

KEYSCAN:

MOVA,P3;读取按键

ANLA,#07H;

CJNEA,#07H,K0;判断是否按键

RET

K0:

ACALLDELAY;有按键延时去抖动

MOVA,P3

ANLA,#07H

CJNEA,#07H,K1;

RET;是抖动返回

K1:

MOVR3,A;不是抖动,存按键

K2:

MOVA,P3;

ANLA,#07H;

CJNEA,#07H,K2;等待松开按键

MOVA,R3;

CJNEA,#06H,K3;键值读取看是否是P3.1被按下,加1按键

SJMPKEY1;

K3:

CJNEA,#05H,KEY3;看是否是P3.2被按下,减1按键

SJMPKEY2;

KEY3:

INCFUC;不是加1也不是减1就是功能键P3.0,被按下,功能键按下次数加1

CLRTR0;按下功能见后进入调整时间模式,关闭定时器

MOVA,FUC;读取功能键按下次数

CJNEA,#4,RETT;如果按下四次了,就恢复时间模式

SETBTR0;打开定时器

MOVTH0,#3CH;

MOVTL0,#0B0H;

MOVFUC,#0;计数器清0

SJMPRETT;

KEY1:

ACALLADD1;如果是加1按键,调用加1函数

SJMPRETT;

KEY2:

ACALLSUB1;如果是减1按键,调用减1函数

RETT:

RET

CHULI1:

MOVR1,#44H;将十进制的时间个十位分开

MOVR0,#41H;

MOVR3,#3;

K4:

MOVA,@R0;取时间

MOVB,#10;分离个十为

DIVAB;

MOV@R1,B;个位保存在以L(SHILFENLMIAOL)结尾的时间变量中

INCR1;

MOV@R1,A;

INCR1;

INCR0;

DJNZR3,K4;

MOVA,FENG;时信息更新,保证不大于23

CJNEA,#60,RET5;

MOVFENG,#0;

RET5:

RET;

CHULI:

MOVR1,#30H;

MOVR0,#37H;

MOVR3,#3;

K5:

MOVA,@R0;

MOVB,#10;

DIVAB;

MOV@R1,B;

INCR1;

MOV@R1,A;

INCR1;

INCR0;

DJNZR3,K4;

MOVA,SHI;

CJNEA,#24,RET4;

MOVSHI,#0;

RET4:

RET

ADD1:

MOVA,FUC;

CJNEA,#3,AD0;

MOVR0,#39H;时存放的地址

MOVA,@R0;取时,看是否满23

CJNEA,#23,AD1;

MOV@R0,#0;如果满了23,就清0

SJMPRET0

AD0:

MOVA,#36H;不是给时加1

ADDA,FUC;

MOVR0,A;取出要加数的地址

MOVA,@R0;

CJNEA,#59,AD1;是否加到59了

MOV@R0,#0;加到了59就清0

SJMPRET0

AD1:

INC@R0;时没有加到23,其他的没有加到59时,加1

RET0:

RET

SUB1:

MOVA,FUC

CJNEA,#3,SU0

MOVR0,#39H

MOVA,@R0

CJNEA,#0,SU1

MOV@R0,#23

SJMPRET1

SU0:

MOVA,#36H

ADDA,FUC

MOVR0,A

MOVA,@R0

CJNEA,#0,SU1

MOV@R0,#59

SJMPRET1

SU1:

DEC@R0

RET1:

RET

DISP:

MOVR3,#20

DI0:

MOVR0,#35H

MOVR4,#6

MOVR5,#01H

DI1:

MOVA,@R0

MOVCA,@A+DPTR

MOVP0,A

MOVA,R5

MOVP1,A

RLA

MOVR5,A

DECR0

ACALLDELAY

MOVP1,#00H

DJNZR4,DI1

DJNZR3,DI0

RET

DISP1:

MOVR3,#5

DI01:

MOVR0,#49H

MOVR4,#6

MOVR5,#01H

DI11:

MOVA,@R0

MOVCA,@A+DPTR

MOVP0,A

MOVA,R5

MOVP1,A

RLA

MOVR5,A

DECR0

ACALLDELAY

MOVP1,#00H

DJNZR4,DI11

DJNZR3,DI01

RET

TIME1:

MOVTH1,#0D8H;置初值(10MS)0.01S

MOVTL1,#0F0H

INCSECOND1;

MOVA,SECOND1;

CJNEA,#100,RET2;看是否满100个10ms

MOVSECOND1,#0;满100个秒,秒清0

INCSECOND2;秒加1

MOVA,SECOND2;是否满60秒

CJNEA,#60,RET2;

MOVSECOND2,#0

INCFENG

MOVA,FENG;分钟加1

RET2:

RETI

TIME0:

MOVTH0,#3CH

MOVTL0,#0B0H;重置初值

DJNZR2,RET3;是否满1秒

MOVR2,#20;秒钟加1

INCMIAO;

MOVA,MIAO;

CJNEA,#60,RET3;看是否满60秒

MOVMIAO,#0;满60秒,秒清0

INCFEN;分钟加1

MOVA,FEN;是否满60分

CJNEA,#60,RET3;

MOVFEN,#0;满60分

INCSHI;时钟加1

MOVA,SHI;

CJNEA,#24,RET3;时钟是否满24

MOVSHI,#0;满24,时钟清0

RET3:

RETI

DELAY:

MOVR6,#5

D0:

MOVR7,#245

DJNZR7,$

DJNZR6,D0

RET

TAB:

DB0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H

DB90H,88H,83H,0c6H,0a1H,86H,8eH,0ffH;共阳编码表

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

当前位置:首页 > 表格模板 > 合同协议

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

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