流水灯设计——精选推荐
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
流⽔灯设计
1 引⾔
近年来随着科技的飞速发展,单⽚机的应⽤正在不断地⾛向深⼊,同时带动传统控制检测⽇新⽉益更新。
在实时检测和⾃动控制的单⽚机应⽤系统中,单⽚机往往是作为⼀个核⼼部件来使⽤,仅单⽚机⽅⾯知识是不够的,还应根据具体硬件结构,以及针对具体应⽤对象特点的软件结合,加以完善。
在电⼦领域尤其是⾃动化智能控制领域,传统的分⽴元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单⽚机智能控制系统所取代。
⽬前,⼀个学习与应⽤单⽚机的⾼潮正在⼯⼚、学校及企事业单位⼤规模地兴起。
在本次课程设计中,本⼈使⽤单⽚机作为这次作业的核⼼。
课程设计通过使59C51单⽚机和共阴⼆位数码管,综合应⽤基础电⼦电路和单⽚机的知识,来实现该电路的制作。
通过实际程序设计和调试,逐步掌握块化程序设计⽅法和调试技术,通过课程设计,掌握⼀单⽚机核⼼的电路设计的基本⽅法和技术,了解有关电路参数的计算⽅法,通过完成⼀个包括电路设计和程序设计开发的完整过程,了解开发单⽚机应⽤系统的全过程,为今后从事相应⼯作打下基础。
2 流⽔灯⽅案设计与分析
2.1 设计⽬的
本设计包括确定控制任务、系统总体⽅案设计、硬件系统设计、软件程序的设计等,以便使学⽣掌握单⽚机系统设计的总体思路和⽅法。
2.2 设计内容及要求
单⽚机的P1.0-P1.7接⼋个发光⼆极管L1-L8, P3.0~P3.2⼝为闪烁⽅式控制开关K1,K2按键接⼝。
当K1闭合时,实现⼋个发光⼆极管从L1到L8轮流循环点亮,当K2闭合时;实现⼋个发光⼆极管从L8到L1轮流循环点亮;
当K1,K2同时闭合时,实现⼋个发光⼆极管从L1到L8再从L8到L1循环点亮。
每⼀个⼆极管点亮时间为200ms。
2.3 设计⽅案及原理
流⽔灯控制设计,⼤概的设计思路可概括为以下8个步骤:⑴通过累加器A 给P1⼝送⼆进制数,驱动⼋个发光⼆极管,低电平发光,⾼电平熄灭。
⑵编写延时⼀秒的⼦程序DELAY,可通过软件定时,也可通过与定时器中断配合来实现。
⑶调⽤DELAY 延时程序。
⑷送0FFH给P1⼝,使发光⼆极管熄灭,再调⽤DELAY延时程序。
使发光⼆极管点亮。
⑸送给寄存器R0,通过DJNZ指令,配合DELAY延时程序,实现发光⼆极管点亮,后结束。
⑹执⾏RR(循环右移)指令,指向下⼀个⼆极管,重复第5步。
⑺当P3.0为0,即按下K1时,8个发光⼆极管从左⾄右依次点亮,当P3.1为0,即按下K2时,使⼆极管从右⾄左⼀次循环点亮。
⑻当P3.0为0,P3.1为0时,即按下K1、K2时,8个发光⼆极管先从左⾄右依次点亮,再从右⾄左⼀次循环点亮。
单⽚机中的定时器有四种⼯作⽅式,由于⼯作⽅式0和⼯作⽅式1计数溢出后,计数器都全为0,因此,循环定时或循环计数应⽤时就存在反复设置计数初值的问题。
这不但影响精度,⽽且也给程序设计带来了不便。
于是,选择⼯作⽅式2,它具有⾃动更新重新加载功能,即⾃动加载计数初值。
在这种⽅式下,把16位计数器分为两部分,即TL作计数器,TH作预置寄存器,初始化时把初值分别装⼊TL 和TH中。
为了能够清晰的看见⼆极管闪烁,选择定时器定时500us,再通过配合DJNZ 指令来实现延时200ms的定时。
由于,DJNZ中操作数的范围不能达到400,所以选择两条DJNZ指令,⼀次置200,⼀次置2,依次循环就可达到要求。
3 硬件的设计
在做本次课程设计时,⽤到了8051单⽚机,由于其程序存储器是掩膜ROM,其编程是由半导体制造⼚家完成的,即在⽣产过程中进⾏编程,当掩膜ROM制造完成后,⽤户不能更改其内容。
因此,选择了型号为27256(32KB)的EPROM作为它的程序存储扩展。
同时EA引脚必须有效,⽅可访问外扩程序存储器。
在引脚的连接时,8051单⽚机的PSEN引脚须接EPROM的OE端,当PESN有效时,允许读出EPROM 中的指令码。
同时,ALE接74LS373译码器的G引脚,当CPU访问⽚外存储器时,ALE输出信号作为锁存低8位地址的控制信号,以实现低位地址和数据的隔离。
因
此,其程序存储器扩展图如图2所⽰。
单⽚机的复位操作有上电⾃动复位和按键⾃动复位两种⽅式。
上电复位是通过外部复位电路的电容充电来实现的。
电容C1选择10uf,电阻选择10K,这样,只要电源VCC的上升时间不超过1ms,就可实现上电复位,即接通电源就完成了系统的复位初始化。
3.1 硬件接线的设计
发光⼆极管有共阳和共阴接法,此次设计选择了共阳接法,所以可通过给P1⼝输送低电平就可驱动发光⼆极管发光,输送⾼电平就可使发光⼆极管熄灭。
因此,总体的设计图如图1所⽰。
图1 流⽔灯控制设计硬件接线图
3.2 程序存储扩展的设计
外扩程序存储器的空间地址,是由P2⼝提供⾼⼋位地址,P0⼝分时提供低8位地址和⽤作8位双向数据总线。
在设计硬件接线时,使27256芯⽚的⽚选信号CE始终保持有效,低⼋位A0~A7通过74LS373译码器连接P1⼝,⾼七位A8~A14连接
P2.0~P2.6。
因此其地址范围位0000H~7FFFH。
4 软件设计
4.1 流程图的设计
流⽔灯控制设计的流程图如图2所⽰。
图2 流⽔灯控制流程图
4.2 程序代码的设计
ORG 0000H ;程序存放的起始地址
MAIN: MOV A,#0FEH ;A装⼊LED1等亮的数据
MOV R2,#8 ;将灯的数量送给R2
SETB C ;位置1
LOOP3: JNB P3.0,LOOP4 ;看K1是否按下,若按下则转到LOOP4 SJMP LOOP5 执⾏,若没有则转到LOOP5执⾏
LOOP4: JNB P3.1,LOOP2 ;看K2是否按下,若按下则转到LOOP2 SJMP LOOP 执⾏,若没有则转到LOOP执⾏
LOOP5: JNB P3.1,LOOP1 ;看K2是否按下,若按下则转到LOOP1 SJMP MAIN 执⾏,若没有则转到主程序
LOOP: RL A ;将A中的数据左移⼀位
MOV P1,A ;将A移动过的数据送P1⼝显⽰
LCALL DELAY ;调⽤延时⼦程序
DJNZ R2,LOOP ;没有移动够8次,则继续移动
SJMP MAIN ;移动够8次后,跳到主程序,重来,以达到循环
LOOP1: RR A ;将A中的数据右移⼀位
MOV P1,A ;将A移动过的数据送P1⼝显⽰
LCALL DELAY ;调⽤延时⼦程序
DJNZ R2,LOOP1 ;没有移动够8次,则继续移动
LJMP MAIN ;移动够8次后,跳到主程序,重来,以达到循
环
LOOP2: RL A ;将A中的数据左移⼀位
MOV P1,A ;将A移动过的数据送P1⼝显⽰
LCALL DELAY ;调⽤延时⼦程序
DJNZ R2,LOOP2 ;没有移动够8次,则继续移动
LJMP LOOP6 ;移动够8次后,跳到LOOP6执⾏
LOOP6: RR A ;将A中的数据右移⼀位
MOV P1,A ;将A移动过的数据送P1⼝显⽰
LCALL DELAY ;调⽤延时⼦程序
DJNZ R2,LOOP6 ;没有移动够8次,则继续移动
LJMP LOOP3 ;若移动够8次,则转到LOOP3执⾏,判断开关状态,以决定下⼀步动作
DELAY: MOV R0,#200 ;延时⼦程序
D1: MOV R4,#30
D2: MOV R5,#20
DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1
RET ;⼦程序返回
END ;程序结束
4.3 kei图
Keil C51 软件是众多单⽚机应⽤开发的优秀软件之⼀,它集编辑,编译,仿真于
⼀体,⽀持汇编,PLM 语⾔和 C 语⾔的程序设计,界⾯友好,易学易⽤。
Keil C51软件主要是对程序的编写要准确。
为了正确仿真串⼝,在软件仿真调试时,在⽤户的Keil⼯程⽂件的属性中,还需要设置实际使⽤的晶振频率。
这个参数⾮常重要,直接影响通信的波特率,可以按照实际使⽤的参数进⾏设置Keil C51软件提供丰富的库函数和功能强⼤的集成开发调试⼯具,全Windows界⾯。
另外重要的⼀点,只要看⼀下编译后⽣成的汇编代码,就能体会到Keil C51⽣成的⽬标代码效率⾮常之⾼,多数语句⽣成的汇编代码很紧凑,容易理解。
在开发⼤型软件时更能体现⾼级语⾔的优势。
图3
4.4 proteus仿真图
图4
图5
图6
5 课程设计体会
通过此次课程设计,使我更加扎实的掌握了有关单⽚机⽅⾯的知识,在设计过程中虽然遇到了⼀些问题,但经过⼀次⼜⼀次的思考,⼀遍⼜⼀遍的检查终于找出了原因所在,也暴露出了前期我在这⽅⾯的知识⽋缺和经验不⾜。
实践出真知,通过亲⾃动⼿制作,使我们掌握的知识不再是纸上谈兵。
其次,在这次课程设计中,我们运⽤到了以前所学的专业课知识,如:CAD 制图、汇编语⾔、模拟和数字电路知识等。
虽然过去从未独⽴应⽤过它们,但在学习的过程中带着问题去学我发现效率很⾼,这是我做这次课程设计的⼜⼀收获。
在这次课程设计中,清晰的分析过程也起到很⼤的作⽤。
在设计程序之前,对所⽤单⽚机的内部结构有⼀个系统的了解,知道该单⽚机内有哪些资源;要有⼀个清晰的思路和⼀个完整的的软件流程图;在设计程序时,不能妄想⼀次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,⼀个程序的完美与否不仅仅是实现功能,⽽应该让⼈⼀看就能明⽩你的思路,这样也为资料的保存和交流提供了⽅便;在设计课程过程中遇到问题是很正常德,但我们应
该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终⾝
在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。
最终的检测调试环节,本⾝就是在践⾏“过⽽能改,善莫⼤焉”的知⾏观。
这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在各种努⼒下,终于游逆⽽解。
在今后社会的发展和学习实践过程中,⼀定要不懈努⼒,不能遇到问题就想到要退缩,⼀定要不厌其烦的发现问题所在,然后⼀⼀进⾏解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,⽽不是知难⽽退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他⼈对你的认可。
参考⽂献
[1] 孙涵芳.MCS-51/96系列单⽚机原理及应⽤(修订版).北京航空航天⼤学出版社.1994
[2] 李朝青.单⽚机原理及接⼝技术(第3版).北京航空航天⼤学出版社.2005
[3] 蒋辉平.基于Proteus的单⽚机系统设计与仿真实例.机械⼯业出版社.2009。