基于单片机的可编程作息时间控制器设计_毕业设计(编辑修改稿)内容摘要:

(flag2==0))||((fen1==fen2)amp。 amp。 (shi==shi2)))amp。 amp。 (flag4==0)) if((fen==fen3)amp。 amp。 (shi==shi3)amp。 amp。 (flag2==1)) if((((fen==fen3)amp。 amp。 (shi==shi3)amp。 amp。 (flag2==0))||((fen1==fen3)amp。 amp。 (shi==shi3)))amp。 amp。 (flag4==0)) if((fen==fen4)amp。 amp。 (shi==shi4)amp。 amp。 (flag2==1)) if((((fen==fen4)amp。 amp。 (shi==shi4)amp。 amp。 (flag2==0))||((fen1==fen4)amp。 amp。 (shi==shi4)))amp。 amp。 (flag4==0) ) if(K4==0amp。 amp。 flag3==0) 当四个定时闹钟任意一路到达时,在没有按下响铃终止键 K4时, flag2都等于 1,此时闹钟响起,同时使得 flag3等于 0。 在闹钟响闹完一个周期后将继续向下执行,并且根据以后程序的判定是哪一路闹钟在响闹,执行这一路所要求的内容,但是不论哪一路时间到都会响铃并且灯闪,不同的是根据判断选择出时间到的那一路并通过 LCD显示出来闹钟时间及某路闹钟;此时若按下 K4键,则使得 flag2等于 0,当进行 是否闹钟响闹时将会不在响应,也就是闹钟被手动关闭,从而不需要一定要响铃一分钟后在关闭闹钟,实现手动关断闹钟的功能。 当闹钟关断过后将及时跳出,并且使得 LCD显示当前的时间。 使得可编程时间控制器能够在 10 响铃时能够显示当前的闹铃及时间,同时可以手动关断闹铃,并且当闹铃关断过后可以跳出当前显示返回到系统时间。 逻辑控制 图 逻辑控制流程图 程序: while(1) {if((K4==0)amp。 amp。 (flag3==1)) { K4num++。 if(K4num==5) 11 K4num=0。 if(K4num==0) {time()。 flag4=0。 } if(K4num==1) {guangbo()。 flag4=1。 } if(K4num==2) { shangke()。 flag4=1。 } if(K4num==3) {xiake()。 flag4=1。 } if(K4num==4) {dengkong()。 flag4=1。 } clock()。 }} 只有当没有一路闹钟响闹时才会执行此程序,因为在闹钟响闹时 K4键将会作为闹钟的停止的功能键使用,所 以只有在没有闹钟响闹时, K4键才会早为闹钟的更换,同时变量 K4num将作为 K4键所处的闹钟或者系统时间区别出来,以实现逻辑上的合理。 系统刚启动时,按键 K4处于系统时间状态,在此状态下可以利用之前所介绍的功能进行所需要的修改,当第一次按下 K4键时,就会进入广播定时的控制口,此时可以根据需要修改所要定的时间,并可以显示自己所定的闹钟时间,再次按下 K4键时,将会进入上课定时的闹钟,和之前的闹钟一样,可以进行相同的操作,当再次按下 K4 键时将进入下课闹铃状态,然后将要进入的的是灯光控制定时,此时 Knum4为 4,当再次 按下 K4键时,将经过判断清零,重新开始,以此来实现按键 K4可以更换闹钟的功能,同时更改闹钟时间的功能。 1602LCD液晶显示 VSS引脚接地, VDD提供电源, VEE接滑动变阻器来控制液晶屏的对比度。 RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。 当 RS和 R/W共同为低电平时可以写入指令或者显示地址,当 RS为低电平 R/W为高电平时可以读忙信号,当 RS为高电平 R/W为低电平时可以写入数据。 E端为使能端,当 E端由高电平跳变成低 电平时,液晶模块执行命令。 程序: void write_(uchar ) {rs=0。 rw=0。 lcden=0。 P3=。 lcden=1。 lcden=0。 } 液晶写命令函数 void write_date(uchar date) {rs=1。 rw=0。 lcden=0。 P3=date。 lcden=1。 lcden=0。 } 液晶写数据函数 当需要将内容显示到 LCD显示器上之前,首先要向液晶显示器 输入写命令函数,有上硬件分析可以得到 LCD液晶显示上一排地址从 80H~8FH,一共 16位,下面一排地址从 C0H~CFH,同样是 16位,所以在进行液晶显示之前首先确定要将结果在哪一位上显示,然后在调用液晶写数据函数,只有两者结合使用才会得到想要的结果。 5 实验与结果分析 实验的调试 设计要求:一个以单片机为核心的可编程作息时间控制器,能够按照给定的时间模拟控制,实现广播、上下课打铃、灯光控制(屏幕显示) ,同时具备日期和时钟显示。 12 首先运用 Keil软件编辑程序,按上图要生成目标代码文件,不断地调试程 序。 联调:加载目标代码文件 打开元器件单片机属性窗口,在“ Program File”栏中添加上面编译好的目标代码文件“ ”;在“ Clock Frequency”栏中输入晶振频率为。 每一小块程序编写过后都进行联调,这样可以及时观察到自己所编的程序是否符合自己的目的,当出现问题时及时处理,可以避免当有大量问题后无法找出错误的地方,可以提高编程的效率,也有利于最终将程序编写出来。 实验的结果 图 广播定时响闹时 13 图 上课定时响闹 图 下课定时响闹 14 图 灯控定时响闹 图 上课定时设定 实验的问题 实验中出现问题最多的就是 LCD显示,又是显示出乱码,又是是不断闪烁的输入标题, 15 有的则是光标的来来回回闪烁而不是固定在某一位,这些问题基本上都是由于 LCD刷新的问题上,有时候由于逻辑上的先后顺序没有做好,有的完全是由于缺少必要的逻辑区分,使得显示在程序执行的过程中 LCD不单单刷新了我所需要的内容,也将我此时不需要的内容也刷新出来,所以屏幕上的内容是闪烁的,因此我加了 4个基本变量进行控制,以此来实现所需要的刷新。 同时 整个延时又是非常重要的,在进行按键设定时这个问题就出现了,有时候按一下会会进行几个需要的操作,使得结果不符合我的要求,所以应用刚开始编写程序时不断适当增加延时使得程序渐渐符合要求。 6 小结与体会 通过此次的单片机课程设计让我学到了许多新的知识,让我受益匪浅,其中对 1602LCD液晶显示器有了非常深刻的认识。 刚开始分到课题时,我便开始研究这个课题,由于我们的课题是在题目 4的基础上改过来的,因此我先研究了一下题目 4的要求以及原理,再结合我们的课题让我对这个课题有了一些了解,下午时我们和大多数同学一样先将电 路图画了出来,但是当我做完这个课题过后,我很同意老师的意见,不应当立即画电路图,因为我们对整个课题还不是很了解,对于Proteus软件也不懂,结果就是我们用了一下午只画了一张图,而且对于整个课程设计课题的理解毫无帮助。 由于我们对课题的理解有困难,不能够将课题所要求的内容完全弄明白,因此我们向李老师寻求帮助,帮我们把我们的课题分析了一下,听过之后我们基本已经理解了这个课题,但是对于具体实施还是没有头路,当我在实验室纠结 1602LCD液晶显示器到底是如何工作时,夏老师告诉我 Proteus软件中就有相关的例子,于 是我便通过自己所找到的资料以及这个例子自学了 LCD显示器,由于例子是用 c语言写的,所以最终我也选择使用 c语言来编写程序,但是在以后我所遇到的困难远远不止这些。 首先我要自学相关的 c语言,同时我在网上找到了一些相关的资料学习了一下,并结合李老师对课题的分析,让我对这个课题有了自己的思路。 首先,我就把我的思路认真的整理下来,然后规划好每一块所要完成的任务,然后再用 Keil软件编写出来,在进行联调,每一小步的调试都必须做到没有问题,只有这样在总的联调时不会因为问题太多而做不出来。 在以后的几天里我都在学习和使用 c语 言,让我对 LCD显示器有了更多的认识,但是在整个程序编写过程中问题基本都处在 LCD显示上,一遍遍的尝试后总会出现一些问题,曾经我也因为最后的一点点问题想向老师请教,最后自己没有解决的时候甚至想放弃,但是最终我还是坚持下来,并最终完成了程序的基本要求,并且通过了李老师的第一次检查,并对李老师提出的一些不满足的地方进行了修改,但是这些修改在进过之前所设计中遇到的问题来说也挺难得,但是我很快就解决掉了,因为我对自己的程序以及 LCD显示器有了好好地认识,从而最后实现了比较好的结果,当李老师验收过后感到非常的高兴,在 此我非常感谢李老师对我设计过程中提供的帮助,以及最后对我设计成果的认可。 虽然在这一周半的课程设计中每时每刻都让我在思考我的课题,同时由于相关网络资源的不足曾经使我在用汇编语言还是应用 c语言徘徊过,但是当我选择其中一个时我就坚持了下来,并通过不断地努力在不断地更改程序,可以说整个课程设计是非常的痛苦的,因为我曾经想放弃过,但是我最终还是坚持了下来,并通过自己坚持不懈的努力完成此次课题任务。 虽然整个课程设计的过程有点痛苦,但是当我看到自己的最终成果时还是很开心,因为我这几天的努力没有 白白浪费,培养了我独立思考的能力,提高我的自学以及应用能力,这将是我以后学习生活的非常宝贵的经历。 在编写程序的过程中每一块的认真编写才为以后整个程序的完成奠定基础,正如我们在平时的生活中一样,只有不断地积累,才会为以后更大的收 16 获打下坚实的基础,而此次的课程设计就可以当做我的一次小小的积累,可以说这是我大学以来最让我纠结的一次课程设计,也是第一个让我有放弃的念头的课程设计,当我最终调出程序的那一刻让我明白,有时候在那自暴自弃还不如竭尽自己的权力去解决这个问题,在这过程中的确会有许多麻烦,有时会把本来没有的问题 弄出来,有时经过一次次的调试还是达不到自己的要求,但是只要我们坚持住,不放弃还是会解决的。 回首这一周多的单片机课程设计,发现自己的程序按模块划分还不是很难,和当初刚刚拿到题目时的各种不明白、各种不懂发现自己真的收获了很多,并且在看看相关类似的课题时能够基本找出基本的设计思路,对于用到 602LCD液晶显示器相关的内容能够做出相关 的反应,这个显示器曾经让我绞尽脑汁依旧不懂,曾经让我的程序漏洞百出,但是最终我征服了它,这是我的一大收获。 同时在李老师和夏老师的督促下能够按时到达实验室,从而合理的分配和合理使用了 课程设计的时间。 最后,我要非常感谢李老师和夏老师在课程设计中提供的帮助,以及李老师最后对我课程设计结果的肯定。 17 参 考 文 献 [1] 张毅刚主编,单片机原理及应用,北京:高等教育出版社, 2020 [2] 陈涛编著,单片机应用及 C51程序设计,北京:机械工业出版社, 2020 [3] 周润景主编, PROTEUS入门实用教程,北京:机械工业出版社, 2020 [4] 皮大能主编,单片机课程设计指导书,北京:北京理工大学出版社, 2020 [5] 楼然苗主编, 单片机实验与课程设计( Proteus仿真版),浙江:浙江大学出版社 , 2020 18 附录 设计程序 include define uint unsigned int define uchar unsigned char Uint i,miao,fen,fen1,fen2,fen3,fen4,shi,shi1,shi2,shi3,shi4,flag1,flag2,flag3,flag4,flag5,aa,K1num,K2num,K3num,K4num,N。 //K1numK1按键被按下的标记变量 ,K2numK2按键被按下的标记变量 ,K3num=0K3按键被按下的标记变量 uchar code table[]= CHINA。 //定义初始上电时液晶默认显示状态 uchar code table2[]= TIME。 uchar code Alarm_0[]= GBDS。 uchar code Alarm_1[]= SKDS。 uchar code Alarm_2[]= XKDS。 uchar code Alarm_3[]= DKDS。 uchar code Alarm_00[]= GB。 uchar code Alarm_11[]= SK。 uchar code Alarm_22[]= XK。 uchar code Alarm_33[]= DK。 uchar code deng[]= LIGHTING。 sbit K1=P1^0。 //四个按键 sbit K2=P1^1。 sbit K3=P1^2。 sbit K4=P1^3。 sbit rs=P2^0。 sbit rw=P2^1。 //灯光控制端 sbit lcden=。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。