单片机数字钟设计说明书.docx

上传人:b****8 文档编号:10285180 上传时间:2023-02-09 格式:DOCX 页数:23 大小:434.34KB
下载 相关 举报
单片机数字钟设计说明书.docx_第1页
第1页 / 共23页
单片机数字钟设计说明书.docx_第2页
第2页 / 共23页
单片机数字钟设计说明书.docx_第3页
第3页 / 共23页
单片机数字钟设计说明书.docx_第4页
第4页 / 共23页
单片机数字钟设计说明书.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

单片机数字钟设计说明书.docx

《单片机数字钟设计说明书.docx》由会员分享,可在线阅读,更多相关《单片机数字钟设计说明书.docx(23页珍藏版)》请在冰豆网上搜索。

单片机数字钟设计说明书.docx

单片机数字钟设计说明书

目      录

 

一、单片机数字时钟3

二、课程设计的设计任务及基本要求3

三、课程设计方框图4

四、主程序流程图5

五、部分电路设计及相应的程序7

六、附录及参考文献22

七、心得体会23

 

一、单片机数字时钟

 

二、课程设计的设计任务及基本要求

1.设计一个利用C-51单片机编程的数字时钟;

2.要求开机运行显示“23.59.58”;

3.显示部分用6位8八段共阳极数码管;

4.具有显示“时时.分分.秒秒”;

5.具有3个调整按键;

6.按键功能:

秒调整,分调整,时调整;

7.调整到哪位那一位具有闪烁;

 

三、课程设计方框图

 

 

四、主程序流程图

本设计中计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。

定时器T0中断服务程序

•定时器T0用于时间计时。

定时溢出中断周期可设为50ms,中断进入后,时钟计时累计20次(即1s)时,对秒计数单元进行加1操作。

时钟计数单元在定义的6个单元70H~75H中,70H~71H存放秒数据,72H~73H存放分数据,74H~75H存放时数据。

最大计时值为23小时59分59秒。

在计数单元中采用十进制BCD码计数,秒、分、时之间满60进位。

五、部分电路设计及相应的程序

芯片与显示部分电路图:

P0口为八段共阳极数码管段驱动

八段共阳极数码管段驱动接的限流电阻的阻值510

P2口为6为数码管的为驱动

6为数码管的为驱动所接的电阻阻值为5K

位驱动用了6个74HC04来稳定显示效果

显示子程序:

数码管显示的数据放在内存单元70H~75H中,其中70H~71H存放秒数据,72H~73H]存放分数据,74H~75H存放时数据,每一单元内均为十进制BCD码。

由于采用软件动态扫描实现数据显示功能,显示用的十进制BCD码数据的对应段码存放在ROM表中,显示时,先取出70H~75H中的某一地址中的数据,然后查表得对应的显示段码从P0口输出,P2口将对应的数码管位选中供电,就能显示该地址单元的数据值。

 

ORG0000H;主程序起始地址

LJMPMAIN;跳转至主程序

ORG000BH;TIMERO中断起始地址

LJMPINTT0;跳至中断服务程序

ORG0030H;定位起始地址

MAIN:

MOVSP,#75H;设置堆栈在75H

MOV21H,#0;21H为功能状态标志单元,0为时钟运行态,

1为秒调节,2为分调节,3为时调节

CLR00H;按键消抖标志初始化为0

CLR02H;02H为显示闪烁标志,1为熄灭,0点亮

MOVR5,#100;中断100次

MOVTMOD,#01H;T0为方式1

MOVTH0,#0D8H;T0赋初值(10ms,fosc=12MHz)

MOVTL0,#0F0H;

MOV6DH,#23;“时”寄存器初值为23

MOV6EH,#59;“分”寄存器初值为59

MOV6FH,#58;“秒”寄存器初值为28

SETBEA;CPU开中断

SETBET0;T0开中断

SETBTR0;T0启动运行

HERE:

SJMPHERE;等待中断

DISP:

MOVDPTR,#TAB;置共阳字段码首地址

MOVA,70H;读显示数

MOVCA,@A+DPTR;读十位显示符

MOVP0,A;输出至P0

CLRP2.0;P2.0清零

LCALLD1MS;调用1MS显示子程序

SETBP2.0;P2.0置1

MOVA,71H;读显示数

MOVCA,@A+DPTR;读十位显示符

ANLA,#7FH;点亮DP

MOVP0,A;输出至P0

CLRP2.1;P2.1清零

LCALLD1MS;调用1MS显示子程序

SETBP2.1;P2.0置1

MOVA,72H;读显示数

MOVCA,@A+DPTR;读十位显示符

MOVP0,A;输出至P0

CLRP2.2;P2.2清零

LCALLD1MS;调用1MS显示子程序

SETBP2.2;P2.2置1

MOVA,73H;读显示数

MOVCA,@A+DPTR;读十位显示符

ANLA,#7FH;点亮DP

MOVP0,A;输出至P0

CLRP2.3;P2.3清零

LCALLD1MS;调用1MS显示子程序

SETBP2.3;P2.0置1

MOVA,74H;读显示数

MOVCA,@A+DPTR;读十位显示符

MOVP0,A;输出至P0

CLRP2.4;P2.4清零

LCALLD1MS;调用1MS显示子程序

SETBP2.4;P2.4置1

MOVA,75H;读显示数

MOVCA,@A+DPTR;读十位显示符

MOVP0,A;输出至P0

CLRP2.5;P2.5清零

LCALLD1MS;调用1MS显示子程序

SETBP2.5;P2.5置1

RET;推出循环

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H

DB92H,82H,0F8H,80H,90H;表格

;fosc=12MHz,1T=1us,1ms=1000T;

D1MS:

MOVR7,#249;1T

DIMSLP:

NOP;2TX249=498T

NOP;

DJNZR7,DIMSLP;2TX249=498T

NOP;1T

RET;2T

INTT0:

MOVTH0,#0D8H;T0重赋初值

MOVTL0,#0F0H;T0重赋初值

DJNZR5,INTRET;判断INTRET是不是到了

MOVR5,#100;到100次

CPL02H;取反

MOVA,21H;将21H单元数送入累加器

CJNEA,#0,INTRET;判断中断到1000次吗

INC6FH;6FH单元加1

MOVA,6FH;将6FH数送入累加器A

CJNEA,#60,INTRET;判断累加器A中的数等于60

MOV6FH,#0;6FH清0

INC6EH;6EH单元加1

MOVA,6EH;将6EH数送入累加器A

CJNEA,#60,INTRET;判断累加器A中的数等于60

MOV6EH,#0;6EH清0

INC6DH;6DH单元加1

MOVA,6DH;将6DH数送入累加器A

CJNEA,#24,INTRET;判断累加器A中的数等于23

MOV6DH,#0;6DH清0

INTRET:

LCALLKEYA;调用按键防抖动

LCALLBIN2BCD;调用2位十进制数显示模块

LCALLXS_FL;调用闪烁模块

LCALLDISP;调用显示模块

RETI;结束中断

BIN2BCD:

MOVA,6FH;将秒寄存器的内容存入A

MOVB,#10;设B累加器的值为10

DIVAB;A/B,商存入A,余数,存入B

MOV74H,A;将A的内容送入74H单元

MOV75H,B;将B的内容送入75H单元

MOVA,6EH;将秒寄存器的内容存入A

MOVB,#10;设B累加器的值为10

DIVAB;A/B,商存入A,余数,存入B

MOV72H,A;将A的内容送入72H单元

MOV73H,B;将B的内容送入73H单元

MOVA,6DH;将秒寄存器的内容存入A

MOVB,#10;设B累加器的值为10

DIVAB;A/B,商存入A,余数,存入B

MOV70H,A;将A的内容送入70H单元

MOV71H,B;将B的内容送入71H单元

RET;退出循环

END;结束程序

 

调时功能程序的设计方法是:

按下P1.0键,进入调分状态,时钟停止走动;按P1.1或P1.2键可进行加1或减1操作;继续按P1.0键可分别进行分十位、时个位和时十位调整;最后按P1.0键将退出调整状态,时钟开始计时运行。

K0键为“秒调整,分调整,时调整”总共有4种状态

“0”为正常运行状态

“1”为正常秒调整状态

“2”为正常分调整状态

“3”为正常时调整状态;

通过判断读键值程序

K1键为加1功能键:

如果当没有键操作则时钟正常运行;

 

如果当KA0为1秒调整状态秒单元闪烁,按KA1则秒单元加1;

如果当KA0为2分调整状态分单元闪烁,按KA1则分单元加1;

如果当KA0为3时调整状态时单元闪烁,按KA1则时单元加1;

KA2功能键:

通过判断读键值程序

KA2键为减1功能键:

如果当没有键操作则时钟正常运行;

如果当KA0为1秒调整状态秒单元闪烁,按KA1则秒单元减1;

 

如果当KA0为1分调整状态分单元闪烁,按KA1则分单元减1;

 

如果当KA0为3时调整状态时单元闪烁,按KA1则时单元减1;

 

按键功能程序:

====================================================================

KA0:

JB01H,N4;判断标志位等于4

INC21H;21H单元加1

MOVA,21H;将21H单元送入累加器A

CJNEA,#4,N4;判断等于4,不等于4

MOV21H,#0;21H单元清0

N4:

CLR00H;标志位,0为下一次按键操作做好准备

SETB01H;按键功能响应标志

SJMPGRET;退出

 

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

KA1:

JB01H,KA1END;转01H标志响应

MOVA,21H;将21H标志送入累加器A

CJNEA,#0,N0;判断键为0,不等于0

SJMPKA1END;退出响应

N0:

CJNEA,#1,N1;判断等于1,不等于1

INC6FH;6FH单元加1

MOVA,6FH;将6FH单元送入累加器

CJNEA,#60,KA1END;判断等于60,不等于60

MOV6FH,#06FH;6FH清0

SJMPKA1END;退出响应

N1:

CJNEA,#2,N2;判断等于2,不等于2

INC6EH;6EH单元加1

MOVA,6EH;将6FH单元送入累加器A

CJNEA,#60,KA1END;判断等于60,不等于60

MOV6EH,#0;6EH清0

SJMPKA1END;退出响应

N2:

CJNEA,#3,KA1END;判断等于2,不等于2

INC6DH;6EH单元加1

MOVA,6DH;将6FH单元送入累加器A

CJNEA,#24,KA1END;判断等于60,不等于60

MOV6DH,#0;6DH清0

KA1END:

CLR00H;标志位,0为下一次按键操作做好准备

SETB01H;按键功能响应标志

SJMPGRET;时钟运转

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

KA2:

JB01H,KA2END;转01H标志响应

MOVA,21H;将21H标志送入累加器A

CJNEA,#0,DN0;判断键为0,不等于0

SJMPKA1END;退出响应

DN0:

CJNEA,#1,DN1;判断等于1,不等于1

DEC6FH;6FH单元减1

MOVA,6FH;将6FH单元送入累加器A

CJNEA,#255,KA2END;判断等于255,不等于255

MOV6FH,#59;6FH减59次

SJMPKA2END;退出响应

DN1:

CJNEA,#2,DN2;判断等于1,不等于1

DEC6EH;6FH单元加1

MOVA,6EH;将6FH单元送入累加器A

CJNEA,#255,KA2END;判断等于255,不等于255

MOV6EH,#59;6FH减59次

SJMPKA2END;退出响应

DN2:

CJNEA,#3,KA2END;判断等于1,不等于1

DEC6DH;6FH单元减1

MOVA,6DH;将6FH单元送入累加器A

CJNEA,#255,KA2END;判断等于255,不等于255

MOV6DH,#23;6FH减23

KA2END:

CLR00H;标志位,0为下一次按键操作做好准备

SETB01H;按键功能响应标志

AJMPGRET;退出循环

 

闪烁部分程序:

XS_FL:

MOVA,21H;将21H单元送入累加器A

CJNEA,#0,FL;判断A中等于0,跳到FL

SJMPN3FL;跳转到出口

FL:

CJNEA,#1,N1FL;判断A中等于1,跳到N1FL

JB02H,MFL;02H为显示闪烁标志,1为熄灭,0点亮

LCALLBIN2BCD;调用显示模块

SJMPN3FL;退出循环

MFL:

MOV74H,#10;将74H单元表调用中的熄灭码

MOV75H,#10;将75H单元调用表中的熄灭码

SJMPN3FL;退出循环

N1FL:

CJNEA,#2,N2FL;判断A中等于1,跳到N2FL

JB02H,MFL1;02H为显示闪烁标志,1为熄灭,0点亮

LCALLBIN2BCD;调用显示模块

SJMPN3FL;跳转到出口

MFL1:

MOV72H,#10;将73H单元表调用中的熄灭码

MOV73H,#10;将72H单元调用表中的熄灭码

SJMPN3FL;跳转到出口

N2FL:

CJNEA,#3,N3FL;判断A中等于3,跳到N3FL

JB02H,MFL2;02H为显示闪烁标志,1为熄灭,0点亮

LCALLBIN2BCD;调用显示模块

SJMPN3FL;跳转到出口

MFL2:

MOV70H,#10;将70H单元表调用中的熄灭码

MOV71H,#10;将71H单元表调用中的熄灭码

N3FL:

RET;退出循环程序

 

表格中的第十个位熄灭码:

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H

DB92H,82H,0F8H,80H,90H,0FFH;表格

BIN2BCD:

MOVA,6FH;将秒寄存器的内容存入A

MOVB,#10;设B累加器的值为10

DIVAB;A/B,商存入A,余数,存入B

MOV74H,A;将A的内容送入74H单元

MOV75H,B;将B的内容送入75H单元

MOVA,6EH;将秒寄存器的内容存入A

MOVB,#10;设B累加器的值为10

DIVAB;A/B,商存入A,余数,存入B

MOV72H,A;将A的内容送入72H单元

MOV73H,B;将B的内容送入73H单元

MOVA,6DH;将秒寄存器的内容存入A

MOVB,#10;设B累加器的值为10

DIVAB;A/B,商存入A,余数,存入B

MOV70H,A;将A的内容送入70H单元

MOV71H,B;将B的内容送入71H单元

RET;退出循环

 

六、附录及参考文献

AT89C51

1片

74HC04

6个

RES

8只510

RES

6只5K

BUTTON

3个

7SEG-MPX6-CA

1片

POWER

1个

GROUND

1个

Proteus软件

《单片机原理与控制技术》第二版张志良主编

 

七、心得体会

通过这次对数字钟的设计,让我了解了设计电路的程序,也让我了解了关于数字钟的原理与设计理念,要设计一个完整的电路总要经过多次的失败才能成功的,在设计中,遇到了许多匪夷所思的问题,一个人就是想破脑子也做不出来,这时候,就需要去询问老师、和同学探讨,共同解决出现的问题,也许就是因为老师的一句提醒、同学的探讨中就会豁然开朗。

通过这次设计,不仅使我学到了知识,让我对电路设计有了大概的了解;其次,还体会到了团队精神。

总而言之,这次设计是成功的。

 

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

当前位置:首页 > 法律文书 > 起诉状

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

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