单片机原理及应用.docx
《单片机原理及应用.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用.docx(9页珍藏版)》请在冰豆网上搜索。
单片机原理及应用
单片机原理及应用
课程设计报告
(2013—2014学年第一学期)
题目基于单片机的电子时钟设计
系别电子与电气工程系
专业电子信息工程
班级
学号
姓名
指导教师
完成时间
评定成绩
目录
一、设计的目的3
二、设计的内容与要求3
三、设计方案4
四、硬件、软件设计6
五、设计总结12
六、参考文献13
一、设计的目的
掌握单片机应用项目的设计流程和方法,加深对《单片机原理及应用》课程知识的理解和掌握,培养应用系统的设计能力,初步积累单片机系统开发经验,以及分析问题和解决问题的方法,并进一步拓宽专业知识面,培养实践应用技能和创新意识。
单片机作为主控器件,是整个系统的核心,它起到主要的控制作用;时钟芯片为系统提供一个数字钟,定时功能的实现也要依赖它;液晶模块为系统显示提供载体;按键部分采用独立式结构,主要用作调时和定时,也可用作功能选择。
本文完成了对系统硬件电路制作、软件设计和调试过程的说明,系统最终实现分时段定时控制的功能。
1、设计出数字电子时钟以60分钟为一计数周期
2、只有分秒显示的功能
3、能通过一个按键使时钟暂停或时钟清零
二、设计的内容与要求
使用MCS-51单片机作为控制器,4个7段LED数码管作为显示器,按60分钟制显示时间。
上电以后自动进入计时状态,起始于00:
00。
定时时间为1秒,采用定时器实现。
采用LED数码管显示,时、分采用数字显示。
可以通过一个按键对时钟进行暂停控制。
查表,中断等方式实现目的。
要求使用Protues画出电路图,仿真时钟。
三、设计方案
1、单片机(AT89C51)
单片机最小系统主要由电源、复位、振荡电路以及扩展部分等部分组成。
2、显示模块
显示模块是本次单片机课程设计最核心的部分。
采用LED共阴极数码管。
共阴数码管在应用时将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
动态显示驱动。
通过单片机对数码管位选通COM端电路的控制,只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
动态显示可以大幅度地降低硬件成本和电源的功耗,因为某一时刻只有一个数码管工作,也就是所谓的分时显示,故显示所需要的硬件电路可分时复用。
动态显示方式,可以避免静态显示的问题。
但设计上如果处理不当,易造成亮度低,闪烁问题。
因此合理的设计既应保证驱动电路易实现,又要保证显示后的数据稳定,无闪烁。
动态显示采用多路复用技术的动态扫描显示方式,复用的程度不是无限增加的,因为利用动态扫描显示使我们看到一幅稳定画面的实质是利用了人眼的暂留效应和发光二极管发光时间的长短,发光的亮度等因素.我们通过实验发现,当扫描刷新频率(发光二极管的停闪频率)为50Hz,发光二极管导通时间≥1ms时,显示亮度较好,无闪烁感.。
3、按键模块
键盘是人与单片机打交道的主要设备,按键的读取容易引起误动作。
可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间为20ms(
).采用独立式键盘。
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。
但当所需按键数量多,会占用过多的I/O口线。
四、硬件和软件设计
(进行硬件设计,画出硬件结构框图,完成电路原理图的设计和元器件选型,必要时应给出重要电路参数的设计和计算过程,以及元器件参数的选型依据;编写单片机的软件程序,先理清软件设计思路并绘制程序流程图,再编写具体的汇编语言或C语言程序语句,并注释说明。
)
1、程序流程图
(1)硬件电路图
根据以上的电子时钟的设计要求可以分为以下的几个硬件电路模块:
单片机模块、数码显示模块、晶振模块、电源模块与按键模块等,模块之间的关系图如下面得方框电路图所示。
(a)
(b)
(2)总体工作原理图
2、程序设计
ORG0000H;程序存储起始地址
LJMPMAIN;跳转到MAIN
ORG0040H
MAIN:
MOVR4,#0;寄存器R4赋初值为0
MOVR5,#0;寄存器R5赋初值为0
MOVR6,#0;寄存器R6赋初值为0
MOVR7,#0;寄存器R7赋初值为0
MAIN_LOOP:
LCALLTIME_DIP;调用TIME_DIP
SETBP1.3;将P1.3口置1
MAIN_LOOP1:
JBP1.3,MAIN_LOOP2;判断P1.3是否为1,若为1跳转至MAIN_LOOP2
LCALLDISP_flash;调用DISP_flash
LJMPMAIN_LOOP1;跳转到MAIN_LOOP1
MAIN_LOOP2:
LCALLDelay;调用Delay
LCALLTIME_ADD;调用TIME_ADD
LJMPMAIN_LOOP;跳转到MAIN_LOOP
DISP_FLASH:
LCALLDISP_OFF;调用DISP_OFF
LCALLLONGDELAY;调用LONGDELAY
LCALLTIME_DIP;调用TIME_DIP
LCALLLONGDELAY;调用LONGDELAY
RET;子程序返回
TIME_ADD:
INCR4;寄存器R4加1
CJNER4,#0AH,TIME_ADD_NEXT1;R4的内容与0AH比较,若R4的内容不到0AH则跳转至TIME_ADD_NEXT1
MOVR4,#0;对R4清零
INCR5;寄存器R5加1
CJNER5,#06H,TIME_ADD_NEXT1;R5的内容与06H比较,若R4的内容不到06H则跳转至TIME_ADD_NEXT1
MOVR5,#0;对R5清零
INCR6;寄存器R6加1
CJNER6,#0AH,TIME_ADD_NEXT1;R6的内容与0AH比较,若R4的内容不到0AH则跳转至TIME_ADD_NEXT1
MOVR6,#0;对R6清零
INCR7;寄存器R7加1
CJNER7,#06H,TIME_ADD_NEXT1;R7的内容与06H比较,若R4的内容不到06H则跳转至TIME_ADD_NEXT1
MOVR7,#0;对R7清零
TIME_ADD_NEXT1:
RET;子程序返回
TIME_DIP:
MOVA,R4;将R4的内容送到A
MOVDPTR,#TAB;将表中数据TAB送入DPTR
MOVCA,@A+DPTR;进行查表(查的表是一个顺序表以DPTR为表中数据的首地址),将查询到的数据给A
LCALLSENT_1BYTE;调用SENT_1BYTE
MOVA,R5;将R5的内容送到A
MOVDPTR,#TAB;将表中数据TAB送入DPTR
MOVCA,@A+DPTR;进行查表,将查询到的数据给A
LCALLSENT_1BYTE;调用SENT_1BYTE
MOVA,R6;将R6的内容送到A
MOVDPTR,#TAB;将表中数据TAB送入DPTR
MOVCA,@A+DPTR;进行查表,将查询到的数据给A
ORLA,#80H;(A)和80H进行位或运算,结果赋值给A
LCALLSENT_1BYTE;调用SENT_1BYTE
MOVA,R7;将R7的内容送到A
JNZNEXT20;若(A)不为0则跳转到NEXT20
MOVA,#00H;对累加器A清零
LCALLSENT_1BYTE;调用SENT_1BYTE
RET;子程序返回
NEXT20:
MOVDPTR,#TAB;将表中数据TAB送入DPTR
MOVCA,@A+DPTR;进行查表,将查询到的数据给A
LCALLSENT_1BYTE;调用SENT_1BYTE
RET;子程序返回
DISP_OFF:
MOVA,#00H;对累加器A清零
LCALLSENT_1BYTE;调用SENT_1BYTE
LCALLSENT_1BYTE;调用SENT_1BYTE
ORLA,#80H;(A)和80H进行位或运算,结果赋值给A
LCALLSENT_1BYTE;调用SENT_1BYTE
RET;子程序返回
SENT_1BYTE:
MOVR2,#08H;将08H赋值给R2
SENT_NEXT:
CLRp1.1;对p1.1口清零
CLRC;对Cy清零
RLCA;循环左移,最高位给Cy
MOVP1.2,C;将Cy内容送人p1.2口
SETBP1.1;对p1.1口置1
DJNZR2,SENT_NEXT;对R2内容减1若不为0,则跳转至SENT_NEXT
RET;子程序返回
DELAY:
MOVR3,#00H;对R3清零
DELAYLOOP2:
MOVR2,#00;对R2清零
DELAYLOOP1:
MULAB;累加器A与累加器B相乘,结果放在A里面
MULAB;累加器A与累加器B相乘,结果放在A里面
NOP
DJNZR2,DELAYLOOP1;对R2内容减1若不为0,则跳转至DELAYLOOP1
DJNZR3,DELAYLOOP2;对R3内容减1若不为0,则跳转至DELAYLOOP2
RET;子程序返回
LONGDELAY:
MOVR3,#0FFH;将0FFH传送到R3
LONGLOOP2:
MOVR2,#00;对R2清零
LONGLOOP1:
MULAB;累加器A与累加器B相乘,结果放在A里面
NOP
DJNZR2,LONGLOOP1;对R2内容减1若不为0,则跳转至LONGLOOP1
DJNZR3,LONGLOOP2;对R3内容减1若不为0,则跳转至LONGLOOP2
RET;子程序返回
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
五、设计总结
(分析、总结设计项目的实验结果、创新点、设计过程中出现的问题和相应的解决措施或技巧。
总结在此次课程设计环节中的设计经验、收获和体会。
)
功能比较单调,只能实现时分秒的显示,以及控制暂停。
电路图的设计中用的器件较少,还未能实现时间的调节。
在测试过程中,数码显示管的秒位跳变过慢,通过多次的修改程序以及设计仿真电路的修改最终解决了这个问题,同时也透露出本人在单片机电路设计和程序设计方面的不足。
不过最后的仿真效果非常好,实现了预期的效果,是一个比较令人满意的设计。
在此次实训过程当中,我遇到了很多困难,在老师的细心指导下我很完成了这次实训的任务,在遇到困难时还有同学之间的交流,促使我们相互学习相互进步。
六、参考文献
[1].单片机原理及接口技术(第二版),李全利,北京:
高等教育出版社,2009年。
[2].单片机原理及应用(第二版),李建忠,西安:
西安电子科技大学出版社,2008。
[3].单片机原理及应用,冯文旭等,北京:
机械工业出版社,2008。
[4].单片机基础(第3版),李广弟等,北京:
北京航空航天大学出版社,2007。
[5].单片机高级教程:
应用与设计(第2版),何立民,北京:
北京航空航天大学出版社,2007。