单片机课程设计心得体会

2021-04-08 来源:其他心得体会收藏下载本文

推荐第1篇:单片机课程设计心得体会

篇1:单片机课程设计心得体会

两周的单片机课程设计终于顺利完成了,其中包含着快乐,也有辛酸。我们选的设计题目是数字温度计,大家都觉得这个题目是比较简单的。其实不然,做了之后,发现设计电路虽然简单,但我们认为它真正困难的地方是程序设计,不过在我们同心努力下最终完成了。

我们刚选该题目时,真的是一头雾水,硬件电路不知如何下手,更何谈解决程序那块,因为我们所学的都是单片机方面的理论知识,应用到实践中去还比较少。不过,我们三人也没偷下懒,迅速分工去查阅和收集资料。我们去了图书馆借一些参考书,上网找一些相关资料,并且请教指导老师。通过不断努力,终于把数字温度计的思路和模型定了下来并开始分一个人去焊接硬件电路,剩下的去整理和修改程序。

通过一番整理和修改后,在电脑上进行仿真,仿真成功后准备焊接电路板。在焊接电路板中,我们首先对硬件电路进行布局,然后确认无误后,在电路板上进行焊接,这个过程我们觉得是做得比较快的,以至于后面出现了虚焊的错误。

焊接电路板完工,细心检查后,进行通电测试。结果液晶LCD没有显示,通过检查,原来是LCD坏了,在换了块新的后,能显示显示值。但还有个问题是, 当报警电路不会报警,在请教老师后,发现走动蜂鸣器的电压太低了,是因为串接了一个太大的电阻。然后,我们换了一个小电阻,但这时蜂鸣器却一直在叫,停不下来,不过,在我们三人的的细心检查下,原来是在放大电路的一端虚焊了,这说明我们焊接电路的技术还不够好。在重新焊接那端后,数字温度电路终于成功实现功能,当时我们的心情都是无比兴奋和快乐的,因为我们两周的辛苦没有白费。

在完成单片机课程设计后,我们发现我们还有许多不足,所学到的知识还远远不够,以至于还有一些功能不能被动完成。但通过学习这一次实践,增强了我们的动手能力,提高和巩固了单片机方面的知识,特别是软件方面。从中增强了我们的团队合作精神,并让我们认识到把理论应用到实践中去是多么重要。

篇2:单片机课程设计心得体会

作为一名自动化专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。

这次单片机课程设计我们历时两个星期,在我们班里算是倒数几组完成的吧,但经过这两个星期的实践和体验下来,我们又怎么会去在乎那个先后问题呢,因为对我来说学到的不仅是那些知识,更多的是团队和合作。现在想来,也许学校安排的课程设计有着它更深层的意义吧,它不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能!

单片机作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。

两个星期前我们五个人还在为到底选那个课题而发生分歧,最后还是在龚老师的耐心分析和指导下完成了课题的选定,但是随之而来的问题却远比我们想想的要困难的多

过没想到这项看起来不需要多少技术的工作却是非常需要耐心和精力在两个星期后的今天我已明白课程设计对我来说的意义,它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是同学间的团结,虽然我们这次花去的时间比别人多,但我相信我们得到的也会更多!

在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。

其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:CAD制图、汇编语言、模拟和数字电路知识等。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;

要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。

发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。

通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。

通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。

虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的学习,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。

我认为这个收获应该说是相当大的。觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。小组人员的配合﹑相处,以及自身的动脑和努力,都是以后工作中需要的。

推荐第2篇:单片机课程设计心得体会

单片机课程设计心得体会

做了两周的课程设计,有很多的心得体会,有关于单片机方面的,更多的是关于人与人之间关系方面的。

我们组一共有三个人,但其他两个人是真的神龙见首不见尾,除了在最后答辩的时候他们一起坐在了我旁边,冠冕堂皇的指着我画了几遍的图说了几嘴,我想可能他们自己都不知道自己在说怎么,虽然有的东西他们也答出来了。我佩服他们的勇气,羡慕他们的运气(我见到的很多做了10天的人最后的成绩都有不如他们的),但是鄙视他们的做法。

所幸的是,我得到了很多同学的帮助。我想没有他们我可能都要放弃了,因为我本人对单片机也并不是很熟悉,学的东西好像它是它,我是我似的,理论联系不了实际。以前的汇编语言没学好,一开始的程序这块儿就要令我抓狂了。后来请教我们班的一个男生,每次跟他一起到试验室调试程序(他们组也只有他一个人动手),看他边做边给我讲解。最后在开发机上做出来的时候,虽然不是我自己写的,但看他那么高兴,我也有一种分享到的成就感。后来我们组就用了他写的程序,他自己又抽空做了些拓展。 接下来就是做硬件方面的焊接工作了。没想到这项看起来不需要多少技术的工作却是非常的劳心劳力。很多次是早上起来带瓶水带些吃的到实训中心,一泡就是一天。我看到有很多人跟我一样,不同的是他们是三三两两,而我大部分时间都是一个人做。在这个时候也有很多人帮助我,或是热心的帮我带饭,或是在我打盹儿的时候帮我做点焊接。大家都鼓励我,即使最后出不来东西,但是一定要坚持把它做完。当我想放弃的时候,我也这么对自己说,即使你做出来的是次品甚至不合格品,但是你一定要拿出来一件成品。

在要验收前,终于做了一件成品出来,不幸的是它真的是一件不合格品。帮我的那个男生做的已经出来了,所以最后应该还是我的焊接方面的问题。有一点灰心,想再重做来不及了,单是检查线路却也查不出来什么问题。那么就准备答辩吧。我对着电路图再看课本,发现以前很多觉得很难记的东西现在记起来容易多了,因为整天都在同它们打交道。51的引脚及其功能,a/d转换器的,驱动器的,所有我用到的我都一再的看书了解,同时请教同学我看书过程当中的疑惑。在这个过程中又发现了以前焊接当中出的一些问题,能改的就改,不能改的,咳,要是时间再多一些,或者我能早点做好,要是不只是我一个人动手……算了吧,不要想那些如果,还是准备我自己的,做好我现在能做的吧。

还好,验收还算成功,得了3分,不是很高,但是我觉得对我来说已经很好,代表了我真实的水平,我觉得我对单片机的一些知识在这个动手的过程中真的是从无到有增长的。同时我也尽量不去想别人得了多少分,没有什么不平衡的,有些人付出的是努力,有些人付出的是风险代价,其实这也没有什么不一样,这一点我早就了解。

最后,我发现自己对单片机竟然也有了一点兴趣,想暑假回家以后自己去买一些东西来做,再补一补汇编语言。有什么问题请教下以前的那些老同学好了,他们好厉害,在高中劳动课就成功的做出过调频收音机,大一暑假的时候参加了学校的电子竞赛培训接着比赛,不过后来怎么样我就不知道了。汗。看来要多保持联络,这次回家就好好找他们叙叙旧。

推荐第3篇:单片机课程设计心得体会

单片机课程设计心得体会

07级交流生:续衍森 江蓝晶

这次这个单片机的课程设计我们完成的不太理想,我们小组两个人都是交流生,并且不是在物理学院学习,同时选课时没有认真全面的了解这门课程的安排,导致没有选上和课程配套的实验课,一个学期也就没有做过一次实验,在后来的制作过程中遇到了很多困难,所以这次这个课程设计的作品完全是在没有任何单片机制作经验甚至是没有做过任何相关电路的基础上开始的。选题的时候其实只上了几个星期的课,对单片机能做什么或者说以我们的水平能让单片机做什么根本没有一个清晰的认识,很担心自己的选题最后做不出来,所以当时选题时的原则是尽量的简单可行,因为毕竟我们没有实验课,一学期下来必定会比物理系的同学在具体的实验方面落后不少,同时平时我们都在南新校区,与老师和同学的交流都很困难,在后来的具体制作过程中遇到什么困难几乎不可能跑到实验室去向老师请教,同时现在社会上都在大力提倡节能,于是我们打算从这点出发在我们的身边发现问题,当时我们听周围的同学说起济南的夏天白天相当的炎热,可是晚上退凉很快特别是深夜的时候温度其实已经不高了,但是同学们一般晚上睡觉都比较早,都会叫风扇一直开着最大档,可是到了深夜后已经没有必要这么强的风速了,这样一夜下来将会浪费很多电能,同时还容易把同学们吹感冒。于是我们想能不能做一个单片机系统来解决这个问题,基于以上原因我们确定了这个方案,在最初的计划中我们还准备加入对风扇转向的控制,使之能实现人体追踪功能,不过在后来的具体设计中发现现在风扇的风扇转向控制基本都是纯机械装置,要用单片机控制比较的困难,而电子控制装置一般都出现在高端的风扇之中且价格比较昂贵,而且机械部分方面我们也无法解决。所以最后决定放弃对转向的控制,等以后对机械方面的只是有所学习之后再做。

通过这次的课程设计作品的制作让我对单片机的理论有了更加深入的了解,同时在具体的制作过程中我们发现现在书本上的知识与实际的应用存在着不小的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不考虑这方的问题,这让我们无法根据书上的理论就轻易得到预想中的结果,有时结果甚至很差别很大。通过这次实践使我更深刻的体会到了理论联系实际的重要性,我们在今后的学习工作中会更加的注重实际,避免称为只会纸上谈兵的赵括。

课程设计贡献排序:这次课程设计从最初的规划到后来的理论设计到最后的具体制作都是我们两共同完成的,实在无法区分贡献排序。各取50%吧。

课程改革建议:我们强烈建议将这门课程的理论学习和实验部分合并成一门,以避免想我们这种情况的再次发生。

推荐第4篇:单片机课程设计心得体会

做了两周的课程设计,有很多的心得体会,有关于单片机方面的,更多的是关于人与人之间关系方面的。

我们组一共有三个人,但其他两个人是真的神龙见首不见尾,除了在最后答辩的时候他们一起坐在了我旁边,冠冕堂皇的指着我画了几遍的图说了几嘴,我想可能他们自己都不知道自己在说怎么,虽然有的东西他们也答出来了。我佩服他们的勇气,羡慕他们的运气(我见到的很多做了10 天的人最后的成绩都有不如他们的),但是鄙视他们的做法。

所幸的是,我得到了很多同学的帮助。我想没有他们我可能都要放弃了,因为我本人对单片机也并不是很熟悉,学的东西好像它是它,我是我似的,理论联系不了实际。以前的汇编语言没学好,一开始的程序这块儿就要令我抓狂了。后来请教我们班的一个男生,每次跟他一起到试验室调试程序(他们组也只有他一个人动手),看他边做边给我讲解。最后在开发机上做出来的时候,虽然不是我自己写的,但看他那么高兴,我也有一种分享到的成就感。后来我们组就用了他写的程序,他自己又抽空做了些拓展。

接下来就是做硬件方面的焊接工作了。没想到这项看起来不需要多少技术的工作却是非常的劳心劳力。很多次是早上起来带瓶水带些吃的到实训中心,一泡就是一天。我看到有很多人跟我一样,不同的是他们是三三两两,而我大部分时间都是一个人做。在这个时候也有很多人帮助我,或是热心的帮我带饭,或是在我打盹儿的时候帮我做点焊接。大家都鼓励我,即使最后出不来东西,但是一定要坚持把它做完。当我想放弃的时候,我也这么对自己说,即使你做出来的是次品甚至不合格品,但是你一定要拿出来一件成品。

在要验收前,终于做了一件成品出来,不幸的是它真的是一件不合格品。帮我的那个男生做的已经出来了,所以最后应该还是我的焊接方面的问题。有一点灰心,想再重做来不及了,单是检查线路却也查不出来什么问题。那么就准备答辩吧。我对着电路图再看课本,发现以前很多觉得很难记的东西现在记起来容易多了,因为整天都在同它们打交道。51的引脚及其功能,a/d转换器的,驱动器的,所有我用到的我都一再的看书了解,同时请教同学我看书过程当中的疑惑。在这个过程中又发现了以前焊接当中出的一些问题,能改的就改,不能改的,咳,要是时间再多一些,或者我能早点做好,要是不只是我一个人动手……算了吧,不要想那些如果,还是准备我自己的,做好我现在能做的吧。

还好,验收还算成功,得了3分,不是很高,但是我觉得对我来说已经很好,代表了我真实的水平,我觉得我对单片机的一些知识在这个动手的过程中真的是从无到有增长的。同时我也尽量不去想别人得了多少分,没有什么不平衡的,有些人付出的是努力,有些人付出的是风险代价,其实这也没有什么不一样,这一点我早就了解。

最后,我发现自己对单片机竟然也有了一点兴趣,想暑假回家以后自己去买一些东西来做,再补一补汇编语言。有什么问题请教下以前的那些老同学好了,他们好厉害,在高中劳动课就成功的做出过调频收音机,大一暑假的时候参加了学校的电子竞赛培训接着比赛,不过后来怎么样我就不知道了。汗。看来要多保持联络,这次回家就好好找他们叙叙旧。

推荐第5篇:单片机课程设计心得体会

2016单片机课程设计心得体会

单片机课程设计心得体会,课程设计是大学课堂中常见的课堂模式,该模式更好的培养学生的综合能力,课程模式主要由选题到定稿,从理论到实践组成,以下由第一公文网整理关于单片机课程设计的心得。

单片机课程设计心得体会

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。

本次课程设计持续了一个多月的时间,它主要是培养我们通过把所学的理论知识应用于实践,并且这一次课程设计采用的万用板搭建电路,想要焊接出来的电路板看起来整洁美观,我们便需要从全局入手,要有全局统筹局部的思维,这样才能更快捷设计出整齐美观的电路板。

刚开始时,由于自己的专业基础不足,对课题设计有一些恐惧。刚开始只是对照电路图一个个元件进行焊接,没有对整个电路结构进行布局。有经验的同学提醒我,如果继续这样下去,最后有些电路根本无法焊接上去。有了这种意识之后,我立即决定停止焊接,在同学的帮助下开始对整个电路图进行合理的排列,根据不同的电路部分的不同的特殊要求来安排位置,以达到最佳.最优的效果。在进行焊接的过程中慢慢的对此次课程越来越感兴趣。

然而在用程序对硬件进行调试的时候却出现了一些问题。整体焊接完毕后还是不能实现功能,通过一步一步的测量调试,检查出多处漏焊、虚焊的现象,修改后还是有很多的问题,用万用表不断的测试也找不到问题所在,而且用尽了各种方法检查了很久之后,任然没有有这样一个想法,但是没有做出来心里实在是很不甘心,因此我还是向基础扎实,经验丰富的同学请教,鼓励自己做下去。在他们的帮助下,发现有的电线上的绝缘胶皮由于焊接时,温度过热有部分破损,导致部分短路。一些残留的锡使得有些键盘与键盘之间连接了起来,却又很难被发现。经过多次修改和调整后,终于能基本实现功能。

问题得以圆满的解决,课题设计圆满结束,在此过程学到的细心,坚持不懈,不畏困难将使我受益终身。这其中除了自己的努力,更多的是感谢我们的课题设计老师段正华教授的帮助。由于对电路原理的不熟,对汇编语言的不精通我对课程设计很惧怕,但是段正华教授一方面在理论课上教育我们要对自己有信心,要争做一流的学者,并很详细很专业的为我们讲解了本次课程设计的理论知识,让我对此有了宏观上了解,并能够掌握这些理论知识,为以后的实际操作提供了坚实的基础。另一方面在实际操作时,也给我们很多技术上的指导,让我们能在此过程中,学到更多的操作技能。

所幸的是,我得到了很多同学的帮助。我想没有他们我可能都要放弃了,因为我本人对单片机也并不是很熟悉,学的东西好像它是它,我是我似的,理论联系不了实际。以前的汇编语言没学好,一开始的程序这块儿就要令我抓狂了。后来请教我们班的一个男生,每次跟他一起到试验室调试程序(他们组也只有他一个人动手),看他边做边给我讲解。最后在开发机上做出来的时候,虽然不是我自己写的,但看他那么高兴,我也有一种分享到的成就感。后来我们组就用了他写的程序,他自己又抽空做了些拓展。

接下来就是做硬件方面的焊接工作了。没想到这项看起来不需要多少技术的工作却是非常的劳心劳力。很多次是早上起来带瓶水带些吃的到实训中心,一泡就是一天。我看到有很多人跟我一样,不同的是他们是三三两两,而我大部分时间都是一个人做。在这个时候也有很多人帮助我,或是热心的帮我带饭,或是在我打盹儿的时候帮我做点焊接。大家都鼓励我,即使最后出不来东西,但是一定要坚持把它做完。当我想放弃的时候,我也这么对自己说,即使你做出来的是次品甚至不合格品,但是你一定要拿出来一件成品。

在要验收前,终于做了一件成品出来,不幸的是它真的是一件不合格品。帮我的那个男生做的已经出来了,所以最后应该还是我的焊接方面的问题。有一点灰心,想再重做来不及了,单是检查线路却也查不出来什么问题。那么就准备答辩吧。我对着电路图再看课本,发现以前很多觉得很难记的东西现在记起来容易多了,因为整天都在同它们打交道。51的引脚及其功能,A/D转换器的,驱动器的,所有我用到的我都一再的看书了解,同时请教同学我看书过程当中的疑惑。在这个过程中又发现了以前焊接当中出的一些问题,能改的就改,不能改的,咳,要是时间再多一些,或者我能早点做好,要是不只是我一个人动手......算了吧,不要想那些如果,还是准备我自己的,做好我现在能做的吧。

最后,我发现自己对单片机竟然也有了一点兴趣,想暑假回家以后自己去买一些东西来做,再补一补汇编语言。有什么问题请教下以前的那些老同学好了,他们好厉害,在高中劳动课就成功的做出过调频收音机,大一暑假的时候参加了学校的电子竞赛培训接着比赛,不过后来怎么样我就不知道了。汗。看来要多保持联络,这次回家就好好找他们叙叙旧。

回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说三极管pNp管脚不懂怎么放置,不懂分得二极管的正负极,对单片机汇编语言掌握得不好......通过这次课程设计之后,一定把以前所学过的知识重新温故。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和老师再次表示忠心的感谢!

推荐第6篇:单片机课程设计

基于单片机的火灾智能报警控制系统的设计

前言

在各种灾害中,火灾是最经常、最普通地威胁公众安全和社会发展的灾害之一。人类能够对火进行利用和控制,是文明进步的一个重要标志。火,给人类带文明进步、光明和温暖。但是,失去控制的火,就给人类造成灾害。 据统计, 我国 70 年代火灾年平均损失不到 2.5 亿元,80 年代火灾年平均损失不到

3.2 亿元。进入 90 年代, 特别是 1993 年以来,火灾造成的直接财产损失上升到年均十几亿元,年均死亡 2000 多人。2010年上海静安区高层住宅着火,导致58人死亡,70余人受伤。2014年1月云南香格里拉大火,烧毁房屋100多栋,直接经济损失1亿多元人民币。火灾事件经常发生,防止火灾事故关系到人民群众的生命财产安全和社会和谐稳定。现在各种电子产品的普及,再加上人们防火意识的不强,这些都给火灾的发生带来了巨大的安全隐患。

对于火灾最关键的问题在于预防,目前防火报警系统趋于智能化、自动化,灵敏程度也越来越高。在这种背景下,基于单片机的火灾智能报警控制系统能突显出其巨大的优越性。目前,国内大多数偏重于商场、宾馆、高级写字楼、大型仓库等大型火灾报警系统的研发和设计。本系统侧重于小型火灾智能报警系统的设计,可在火灾发生初期检测到并且报警,还能够实时显示温度和烟雾浓度。

推荐第7篇:单片机课程设计

单片机课程设计

MCS-51单片机课程设计

指导教师:黄东

电管081,082,建电081,08

2单片机课程设计目的:

单片机原理及接口技术是一门专业技术基础课,是一门实践性很强的课程,单片机课程设计要求将所学的理论知识通过实践加强理解和认识,提高学生们的单片机接口电路的设计能力和实践动手能力。

单片机课程设计题目: 1. 2. 3. 4.

日历时钟设计 数字温度计设计 数字频率测量仪设计 数字电压表设计

课程设计实验装置:

DP-51PRO.NET三合一多功能实验仪 课程设计拟使用主要电子元器件:

说明:由于单片机课程设计题目将利用DP-51PRO.NET三合一多功能实验仪来实现,因此

本课程设计建议采用实验仪能提供的电子元器件。

设计时间:两周

单片机课程设计报告要求:

1.根据设计题目要求进行系统总体设计

2.设计系统总体电路图,阐述系统中各个单元电路的工作原理 3.系统的硬件设计、电路中元器件的选择,参数确定

--- 1 ---

4.系统的软件设计、主程序流程图和主要子程序流程图 5.给出系统设计硬件元器件清单 6.列出参考资料

注意事项:

1) 设计期间旷课3天或以上本设计不及格; 2) 设计雷同50%以上不及格; 3) 设计报告少于3000字不及格。4)设计封面和硬件图要求打印其他手写。

题目一日历时钟设计

一、设计内容:

采用MCS-51系列单片机进行日历时钟设计并通过实验仪验证通过。

二、设计要求:

1. 设计单片机最小系统电路(包括复位、晶振电路、外扩3个2764共24KROM、

3个6264共24KRAM等) 2. 设计键盘/显示器接口电路。

3. 通过软件编程实现日历时钟的显示(显示年、月、日和时:分:秒) 4. 通过键盘可预置日历时钟。 5. 实现作息时间控制输出。

题目二数字温度计设计

一、设计内容:

采用MCS-51系列单片机进行数字温度计设计并通过实验仪验证通过。

二、设计要求:

1.设计单片机最小系统(电路包括复位、晶振电路、外扩3个2764共24KROM、3个6264共24KRAM等) 2.设计键盘/显示器接口电路。 3.设计温度测量接口电路

4.通过软件编程实现环境温度的测量和显示(温度显示:25.8℃) 5.通过键盘可预置温度报警值,实现温度越限报警功能。

题目三数字频率测量仪设计

一、设计内容:

采用MCS-51系列单片机进行数字频率计设计并通过实验仪验证通过。

二、设计要求:

1.设计单片机最小系统电路(包括复位、晶振电路、外扩3个2764共24KROM、3个6264共24KRAM等) 2.设计键盘/显示器接口电路。

3.通过软件编程实现数字频率计的测量和显示(显示使用六位数码显示器)

4.通过键盘可控制频率计的闸门时间。

题目四数字电压表设计

一、设计内容:

采用MCS-51系列单片机进行数字电压表设计并通过实验仪验证通过。

二、设计要求:

1.设计单片机最小系统电路(包括复位、晶振电路、外扩3个2764共24KROM、3个6264共24KRAM等) 2.设计键盘/显示器接口电路。 3.设计A/D转换器接口

4.通过软件编程实现模拟电压测量和显示(显示取2位小数) 5.通过键盘可预置电压报警值,实现电压越限报警功能。

单片机课程设计硬件参考电路

一、单片机最小系统

1.89C52单片最小系统

XTAL1

2.8032总线型最小系统(3片组成)

XTAL1

推荐第8篇:单片机课程设计

目录

第 1 章

概述.....................................................................................6 第 2 章

单片机.................................................................................7

2.1 单片机简介及应用..................................................................7

2.2 AT89C51简介.......................................................................10

2.2.1主要特性..........................................................................11

2.2.2管脚说明..........................................................................11

2.2.3振荡器特性......................................................................12 第 3 章

电子时钟设计方案.............................................................13

3.1电子时钟简介...........................................................................13

3.2电子时钟的基本特点...............................................................13

3.3电子时钟的原理.......................................................................13 第 4 章

电子时钟硬件设计.............................................................15

4.1 Proteus的简介..........................................................................15

4.1.1 EDA工具软件的功能.....................................................15

4.1.2 特点.................................................................................16

4.2 电子时钟原理图及分析...........................................................17

4.2.1原理图...............................................................................17

4.2.2功能说明...........................................................................18 第 5 章

电子时钟软件设计..............................................................20

5.1 软件设计流程图........................................................................20

5.1.1 程序流程图.......................................................................20

5.1.2 源程序...............................................................................21

5.2 系统仿真及程序测试................................................................27 第 6 章

实验心得...............................................................................29 附录 元器件...........................................................................................30 参考文献.................................................................................................30

1

第一章 概述

一、设计目的

计算机控制系统课程设计是自动化专业的一个重要实践教学环节。在课程设计过程中,学生通过一个较完整的设计过程,可以加深对本门课程所学理论知识的理解与应用,提高学生对所学理论知识的综合运用能力,使学生对计算机控制系统有一个整体认识,掌握计算机控制系统的设计方法。通过课程设计,还可以培养学生独立工作能力,为将来毕业设计打好基础。

二、设计要求

1.用AT89C51单片机及接口电路设计一个电子计时器。

①系统硬件设计:根据任务要求,完成单片机最小系统及其扩展设计,组成功能完整的系统。

②系统软件设计:根据数字电子计时器功能,完成控制软件的编写与调试,并对数码显示进行控制。 2.实现的功能:

①开机时,电子钟从12:00:00开始自动计时。 ②设置按键,能对时、分、秒进行调整。

三、设备及工作环境

1.硬件:计算机一台。

2.软件:Windows操作系统、单片机编译软件,proteus仿真软件。

四、设计思路

电子计时器主要由AT89C

51、显示模块、控制模块和计时运算模块四大部分组成。其中控制模块和计时运算模块主要对时、分、秒的数值显示和调整进行操作,并且秒计算到60时,自动清零并向分进1;分计算到60时,自动清零并向时进1;时计算到24时,自动清零。这样,就形成了循环计时,显示模块主要用来显示当前计数值。A89C51是整个设计的核心,主要用来产生定时中断,传输数据和控制各个部件工作。

2

第二章 单片机

自从1971年微型计算机问世以来,随着大规模集成电路技术的进一步发展,导致微型计算机向两个方向发展:一是高速度、高性能、大容量的高档微型计算机及其系列化,向大、中型计算机的挑战;另一个是稳定可靠、小而廉、能适应各种控制领域需要的单片机。

2.1 单片机简介及应用 1.单片机的简介

单片机是把中央处理单元、随机存储器、只读存储器、定时/计数器以及I/O接口电路等主要部件集成在一块半导体芯片上的微型计算机。虽然单片机只是一个芯片,但从组成和功能上看,它已具有了微型计算机系统的含义,从某种意义上说,一块单片机芯片就是一台微型计算机。

自从1975年美国德克萨斯公司推出世界第一个4位单片机TMS——1000型以来,单片机技术不断发展,目前已成为微型计算机技术的一个独特分支,广泛应用于工业控制、仪器仪表智能化和家用电子产品等各个控制领域。 2.单片机的发展

1975年4位单片机的产生开创了单片机的历史,由于4位单片机具有较高的性能价格比,主要用于家用电器和电子玩具,如电视机、空调机、洗衣机、微波炉等。

1976年美国Intel公司首次推出了8位单片机MCS-48系列,从而进入了8位单片机时代。1978年Motorola公司推出6801系列的8位机。早期的8位单片机的功能较差,一般都没有串行I/O口,几乎不带A/D、D/A转换器,中断控制和管理能力也较弱,并且寻址空间的范围小(小于8KB)。随着集成工艺水平的提高,一些高性能8位单片机相继问世,增加了通用串行通信控制,强化中断控制功能,增加了定时/计数器的个数,扩展了存储器的容量,部分系列单片机内还集成了A/D、D/A转换接口。如Intel公司的MCS-51系列、NEC公司的μPD78XX系列等。为了提高单片机的控制功能,拓展其应用领域,在高档8位单片机基础上,又推出新一代8位单片机,如Intel、Phillips、Atmel、华邦公司的80C51

3 系列,Motorola公司的MC68HC11系列,Microchip公司的PIC16C系列等。8位单片机功能强、品种多、价格低廉,因而广泛应用于各个领域。

继8位单片机以后,16位单片机逐渐问世并得到很大的发展,Intel公司于1983年推出的MCS-96系列单片机就是其中的典型产品。16位单片机的集成度更高,内部除有常规I/O口、定时/计数器、全双工串行口外,还有高速I/O部件、多路A/D转换器、脉冲宽度调制器及监视定时器等,运算速度更快。近年来还出现了32位单片机,例如英国Inmos公司的IMST414单片机、Intel公司的80960单片机、日本NEC公司的μPD77230单片机,可用于高速控制、图像处理、语音偶A/DA处理和数字滤波等

从单片机的结构上看,单片机的发展趋势将向着片内存储器容量增加、高性能、高速度、多功能、低电压、低功耗、低价格以及外围接口电路内装化等方向发展。

1.大容量和高性能化:新一代8位单片机的CPU及寄存器都采用16位,内部总线也采用16位,有的还采用流水线技术以及RISC精简指令集计算机技术,指令执行速度可达100ns,堆栈的空间达64KB,并支持C语言的开发。内部RAM在1MB以上,内部ROM可达48KB,存储器寻址可达16MB。

2.多样化的I/O口及电路内装化:随着集成度的不断提高,尽可能把众多的各种外围功能部件集成在片内。单片机内部一般带有存储器、定时/计数器、串行口、并行口,目前较高档的单片机内部还集成A/D、D/A、DMA控制器、声音发生器、监视定时器、液晶显示驱动、PWM端口、FIP控制、彩色电视机和录像机用的锁相电路等多样的I/O接口。

3.低功耗、宽范围的电源电压:许多单片机工作电压范围大,而且可在低电压下工作。

单片机的发展前景是非常乐观的,其应用范围也将更加广泛。 3.单片机的特点

单片机结构上的设计主要是满足控制的需要,因此,它在硬件结构、指令系统及I/O能力等方面均有其独特之处,其显著的特点之一就是具有非常有效的控制功能,故也可以把单片机成为微控制器。

与普通的微型计算机相比,单片机主要具有以下特点:

4 (1) 体积小、结构简单、可靠性高 单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合于恶劣环境下工作。

(2) 控制功能强 单片机虽然结构简单,但是它“五脏俱全”,已经具备了足够的控制功能。单片机具有较多的I/O口,CPU可以直接对I/O口进行I/O操作、算术操作、逻辑操作和位操作,指令简单而丰富。所以单片机也是“面向控制”的计算机。

(3) 低电压、低功耗 单片机已可在2.2V的电压下运行,有的已能在1.2V或0.9V电压下工作;工耗降至μA级,一颗纽扣电池就可以长期使用。

(4) 优异的性能价格比 由于单片机构成的控制系统硬件结构简单、开发周期短、控制功能强、可靠性高,因此,在达到同样功能的条件下,用单片机开发的控制系统比用其他类型的微型计算机开发的控制系统价格更便宜。

4.单片机的应用与89C51单片机的介绍

由于单片机具有上述显著特点,所以其应用领域无所不及,到处都有它的身影。

A、单片机的典型应用领域

(1)工业控制 单片机广泛用于工业自动化控制系统中,数据采集、过程控制、过程测控和生产线上的机器人系统,都是用单片机作为控制器。自动化使工业系统处于最佳工作状态,从而提高经济效益、、改善产品质量和减轻劳动强度,因此单片机技术广泛应用与机械、电子、石油、化工、纺织和食品等工业领域中。

(2)智能化仪器仪表 在各类仪器仪表中引入单片机,可以使仪器仪表智能化、数字化、自动化,提高测试精度和准确度,简化结构,减小体积及重量,提高性能价格比。例如:只智能仪器,医疗器械和数字示波器等。

(3)智能家电 家电产品智能化程度的进一步提高需要有单片机的参与,例如“微电脑控制”的洗衣机、电冰箱、微波炉、空调机、电视机和音响设备等,这里的 “微电脑”实际上就是单片机。

(4)信息与通信技术 图形终端机、传真机、复印机、调制解调器、声像 5 处理器和数字滤波器等。

5.单片机的应用实例

下面以单片机在遥控及数字调谐电视接收机中的应用为例进行介绍。 单片机在电视接收机中的应用,大致分为两个领域:一是用于操作控制系统;二是用于图像、声音信息的处理。属于前一领域的应用有红外遥控、数字调谐、节目预约、功能显示和语言遥控等。

现在以数字调谐选台电路为例加以说明,如图1所示。当进行预置选台是,有本机键盘或遥控发出预置选台指令、单片机控制器读入指令后首先进行解码(通过执行解码程序完成,每一种控制功能都对应一段控制程序,分别写于程序存储器ROM中的不同区域,用地址码来选择)。解码的结果是识别出输入的控制功能指令代码所代表的控制功能,即找到该控制功能所对应控制程序的首地址,然后从该首地址开始执行这段程序。在控制程序的控制下,对时钟脉冲进行变换处理,由微控制器的搜索计数器进行加减计数,产生数字选台数据,其中数字频信息送至频段译码电路,得到三个频段(VL、VH、U)的控制电压送至调谐器完成频段的切换;而数字调谐电压信息送至微控制器内的D/A转换器,以便合成频率和宽度为特定值的脉冲宽度调制(PWM)信号,经低通滤波器变换成直流调谐控制电压VT,也送至调谐器进行频段内不同频道的选择,两种信号共同作用完成选台。控制电路还送出供显示选台及接收机调整状态的标记用的信号。

2.2

AT89C51简介

AT89C51 AT89C51 单片机简介 AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器(FPEROM— Falsh Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8 位微处理器,俗称单片机。A单片机的可擦除只读存储器可以反复擦除 100 次。该 器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令 集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中, ATMEL 的 AT89C51 是一种高效微控制器。

2.2.1主要特性

与 MCS-51 兼容 ; 4K 字节可编程闪烁存储器 ; 寿命:1000 写/擦循环;数据保留时间:10 年; 全静态工作:0Hz-24Hz; 三级程序存储器锁定; 128*8 位内部 RAM ;32 可编程 I/O 线; 两个 16 位定时器/计数器; 5 个中断源 ; 可编程串行通道; 低功耗的闲置和掉电模式;片内振荡器和时钟电路。

2.2.2管脚说明

VCC:供电电压。 GND:接地。 P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。 当 P1 口的管脚第一次写 1 时,被定义为高阻输入。P0 能够用于外部程序数据 存储器,它可以被定义为数据/地址的第八位。在 FIASH 编程时,P0 口作为原 码输入口,当 FIASH 进行校验时,P0 输出原码,此时 P0 外部必须被拉高。 P1 口:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能 接收输出 4TTL 门电流。P1 口管脚写入 1 后,被内部上拉为高,可用作输入, P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 FLASH 编程和校验时,P1 口作为第八位地址接收。 P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收, 输出 4 个 TTL 门电流,当 P2 口被写“1”时,其管脚被内部上拉电阻拉高,且 作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由 于内部上拉的缘故。P2 口当用于外部程序存储器或 16 位地址外部数据存储器 进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉 优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器 的内容。P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。 P3 口:P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个 TTL 门电流。当 P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。 作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的 缘故。 P3 口也可作为 AT89C51 的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 P3.2 P3.3 P3.4 P3.5 TXD(串行输出口) /INT0(外部中断 0) /INT1(外部中断 1) T0(记时器 0 外部输入) T1(记时器 1 外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器

7 读选通) P3 口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地 位字节。在 FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不 变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它可用作对 外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器 时,将跳过一个 ALE 脉冲。如想禁止 ALE 的输出可在 SFR8EH 地址上置 0。此时, ALE 只有在执行 MOVX,MOVC 指令是 ALE 才起作用。另外,该引脚被略微拉高。 如果微处理器在外部执行状态 ALE 禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个 机器周期两次/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN 信 号将不出现。 /EA/VPP:当/EA 保持低电平时,则在此期间外部程序存储器(0000HFFFFH),不管是否有内部程序存储器。注意加密方式 1 时,/EA 将内部锁定为 RESET;当/EA 端保持高电平时,此间内部程序存储器。在 FLASH 编程期间,此 引脚也用于施加 12V 编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。

2.2.3振荡器特性

XTAL1 和 XTAL2 分别为反向放大器的输入和输出。该反向放大器可以配置 为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件, XTAL2 应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外 部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

图 AT89C51

第三章 电子时钟设计方案

3.1电子时钟简介

电子钟亦称数显钟(数字显示钟),是一种用数字电路技术实现时、分、秒计时的装置,与机械时钟相比,直观性为其主要显著特点,且因非机械驱动,具有更长的使用寿命,相较石英钟的石英机芯驱动,更具准确性。电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大地方便。

相对于其他时钟类型,它的特点可归结为“两强一弱 ”:比机械钟强在观时显著,比石英钟强在走时准确,但是它的弱点为显时较为单调。

3.

2电子时钟的基本特点

本设计由单片机 AT89C51 芯片和 LED 数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。与传统机械表相比,它具有走时精确,显示直观等特点。 它的计时周期为 24 小时, 显满刻度为“23 时 59 分 59 秒”,另外具有校时功能等特点。该电子钟可以做到的功能:上电或按键复位后能自动显示系统提示符“P.”进入时钟准备状态 2.第一次按电子钟启动/ 调整键,电子钟从 0 时 0 分 0 秒开始运行,进入时钟运行状态。再次按电子钟启动/调整键, 则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键 再次进入时钟运行状态。通过设置的 A、B、C、D 四个键来调整运行,并且利用了 8 位 LED 显示时分秒。

3.

3电子时钟的工作原理

电子钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,具有校时功能和报时功能。因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路、报时电路和振荡器组成。主电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精

9 度,一般用石英晶体振荡器加分频器来实现。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。译码显示电路将“时”、“分”、“秒”计数器的输出状态用七段显示译码器译码,通过七段显示器显示出来。整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整。

10

第 四 章

电子时钟硬件设计

4.1 Proteus的简介

Proteus(海神)的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。

4.1.1 EDA

工具软件的功能

(1)智能原理图设计(ISIS)

丰富的器件库:超过27000种元器件,可方便地创建新元件;

智能的器件搜索:通过模糊搜索可以快速定位所需要的器件;

智能化的连线功能:自动连线功能使连接导线简单快捷,大大缩短绘图时间;

支持总线结构:使用总线器件和总线布线使电路设计简明清晰;

可输出高质量图纸:通过个性化设置,可以生成印刷质量的BMP图纸,可以方便地供WORD、POWERPOINT等多种文档使用。

(2)完善的电路仿真功能(Prospice)

※ ProSPICE混合仿真:基于工业标准SPICE3F5,实现数字/模拟电路的混合仿真;

※ 超过27000个仿真器件:可以通过内部原型或使用厂家的SPICE文件自行设计仿真器件,Labcenter也在不断地发布新的仿真器件,还可导入第三方发布的仿真器件;

※ 多样的激励源:包括直流、正弦、脉冲、分段线性脉冲、音频(使用wav文件)、指数信号、单频FM、数字时钟和码流,还支持文件形式的信号输入;

※ 丰富的虚拟仪器:13种虚拟仪器,面板操作逼真,如示波器、逻辑分析 11 仪、信号发生器、直流电压/电流表、交流电压/电流表、数字图案发生器、频率计/计数器、逻辑探头、虚拟终端、SPI调试器、I2C调试器等;

※ 生动的仿真显示:用色点显示引脚的数字电平,导线以不同颜色表示其对地电压大小,结合动态器件(如电机、显示器件、按钮)的使用可以使仿真更加直观、生动;

※ 高级图形仿真功能(ASF):基于图标的分析可以精确分析电路的多项指标,包括工作点、瞬态特性、频率特性、传输特性、噪声、失真、傅立叶频谱分析等,还可以进行一致性分析;

(3)独特的单片机协同仿真功能(VSM)

※ 支持主流的CPU类型:如ARM

7、8051/

52、AVR、PIC10/

12、PIC

16、PIC

18、PIC

24、dsPIC

33、HC

11、BasicStamp、808

6、MSP430等,CPU类型随着版本升级还在继续增加,如即将支持CORTEX、DSP处理器;

※ 支持通用外设模型:如字符LCD模块、图形LCD模块、LED点阵、LED七段显示模块、键盘/按键、直流/步进/伺服电机、RS232虚拟终端、电子温度计等等,其COMPIM(COM口物理接口模型)还可以使仿真电路通过PC机串口和外部电路实现双向异步串行通信;

※ 实时仿真:支持UART/USART/EUSARTs仿真、中断仿真、SPI/I2C仿真、MSSP仿真、PSP仿真、RTC仿真、ADC仿真、CCP/ECCP仿真;

※ 编译及调试:支持单片机汇编语言的编辑/编译/源码级仿真,内带80

51、AVR、PIC的汇编编译器,也可以与第三方集成编译环境(如IAR、Keil和Hitech)结合,进行高级语言的源码级仿真和调试;

4.1.2 特点

① 全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。

②具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿 12 真、RS-232动态仿真、C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

③ 目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

④ 支持大量的存储器和外围芯片。总之该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大 ,可仿真

51、AVR、PIC。

4.2 电子时钟原理图及分析

4.2.1原理图

1.系统总体原理图

图1系统总体原理图

4.2.2功能说明

1.整体功能说明

在LED数码管上能实现数字计时器的时、分、秒显示,并能对时、分、秒进行加1校对和清零.通过控制键控制计时器的开始,暂停,继续和清零.并且开机时时钟时从00:00:00开始计时的。

2.模块功能说明

(1)AT89C51简介,如下图

图2 AT89C51引脚图

①TMOD定时器/计数器方式寄存器

定时器方式控制寄存器TMOD在特殊功能寄存器中,字节地址为89H,无位地址。

②TCON定时器/计数器控制寄存器

TCON在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)为 14 88H--8FH,由于有位地址,十分便于进行位操作。 ③定时器/计数器的初始化

由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时/计数器前都要对其进行初始化,使其按设定的功能工作.初始货的步骤一般如下:

1、确定工作方式(即对TMOD赋值),预置定时或计数的初值。

2、根据需要开放定时器/计数器的中断(直接对IE位赋值)。

3、启动定时器/计数器。(2)时钟电路

单片机芯片可使用内部时钟电路和外部时钟电路两种方式产生电路所需的时钟脉冲,内部时钟电路实现可用石英晶体和微调电容外接即可达到,外部时钟电路实现需要一个外部脉冲源引入脉冲信号以保证个单片机之间时钟信号的同步。从硬件实现难易角度考虑,内部时钟电路的实现比外部时钟电路的实现更简易。既本数字电子钟设计所需的时钟源采用内部时钟电路实现。所用定时方式为工作方式1,石英晶振为12M,即最小定时时间为1us,最大定时时间约为65.5ms,其电路图如下图2所示。

图3 时钟电路图 (3)LED数码管

7SEG-MPX6-CC是7段6位共阴级数码管,DP为小数点,位码(1-6)应轮流通低电位,段码控制数码管的显示:0-b,1-g,2-a,3-f,4-c,5-e,6-h,7-d.共阴极LED数码管,它是将发光二极管的阴极(负极)短接后作为公共阴极.当驱动信号为高电平才能发光。

15

五 章

电子时钟软件设计

5.1 软件设计流程图

5.1.1 程序流程图.

1.时钟显示程序流程图 时钟显示程序流程图如下图

图 4 时钟显示程序流程图

16

5.1.2 源程序

源程序清单

ORG 0000H LJMP MAIN ORG 0003H LJMP MIAO ORG 000BH LJMP SHI ORG 0013H LJMP FEN ORG 001BH LJMP SZ

MAIN:

MOV R7, #20 MOV R4, #00H MOV R5, #00H MOV R6, #00H

MOV TMOD, #16H MOV TH1, #3CH MOV TL1, #0B0H MOV TH0, #0FFH MOV TL0, #0FFH SETB TR0 SETB

TR1 SETB EA SETB ET1 SETB PT1

17 SETB IT0 SETB IT1 CLR EX0 CLR EX1 CLR ET0

LOOP:

MOV A, R4

MOV B, #10 DIV AB MOV DPTR, #TAB MOVC A, @A+DPTR MOV P0, A MOV P1,

#01H LCALL DELAY MOV P0, #0FFH MOV A, B

MOVC A, @A+DPTR MOV P0, A MOV P1,

#02H LCALL DELAY MOV P0, #0FFH MOV P2, #0FFH JNB

P2.0,TIAOJIE

MOV P1, #04H MOV P0, #0F6H LCALL DELAY MOV P0,#0FFH MOV A, R5

MOV B, #10 DIV AB MOV DPTR, #TAB MOVC A, @A+DPTR MOV P0, A MOV P1,

#08H LCALL DELAY MOV P0, #0FFH MOV A, B

MOVC A, @A+DPTR MOV P0, A MOV P1,

#10H LCALL DELAY MOV P0, #0FFH MOV P2, #0FFH

JNB

P2.0,TIAOJIE

MOV P1, #20H MOV P0, #0F6H LCALL DELAY

MOV P0, #0FFH MOV A, R6

MOV B, #10 DIV AB MOV DPTR, #TAB MOVC A, @A+DPTR MOV P0, A MOV P1,

#40H LCALL DELAY

19 MOV P0, #0FFH MOV A, B

MOVC A, @A+DPTR MOV P0, A MOV P1,

#80H LCALL DELAY MOV P0, #0FFH MOV P2, #0FFH JNB

P2.0,TIAOJIE

LCALL DELAY LJMP

LOOP

TIAOJIE:CPL ET0

CPL ET1

CPL EX0

CPL EX1

LJMP LOOP

DELAY: MOV R3, #100

DEL2:

MOV R2, #10

NOP

DJNZ

R2,$

DJNZ

R3,DEL2

RET LCALL DELAY LJMP LOOP

ORG

0100H SZ: PUSH ACC

MOV TH1, #3CH

MOV TL1, #0B0H DJNZ R7, L2 MOV R7, #20 INC R4 MOV A, R4 CJNE A, #60, L2 MOV R4, #00H INC R5

MOV A, R5 CJNE A, #60, L2 MOV R5, #00H INC R6 MOV A, R6 CJNE A, #12, L2 MOV R6, #00H L2: POP ACC RETI ORG

0200H MIAO:

CLR EA INC R4 SETB EA

RETI FEN: CLR EA INC R5 SETB EA

21 RETI SHI:

CLR EA INC R6 SETB EA RETI

TAB:

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

22

5.2 系统仿真及程序测试

1.调秒

图5 调秒原理图

2.调分

图6调分原理图

23

3.调时

图7调时原理图

24

六 章

实验心得

这个星期参加单片机实习,让我受益匪浅。通过这次的实训,让我学会了Proteus和Keil软件的使用。整个设计通过了软件和硬件上的调试。我想这对于自己以后的学习和工作都会有很大的帮助。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。对于教材管理系统,其程序是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。

在老师的精心指导下,花费的时间与精力终于没有白费,效果渐渐地出现了。这是我们共同努力的结果,在享受我们成果之时,不得不感慨单片机的重要性与高难度性,所以为期一周的单片机课程设计没有浪费,我们从中学到了很多知识。也让我们对单片机有了更深一步的了解。

25

附录 元器件 AT89C51

1个 8位数码管

1个 电阻

电容

晶振

按键

电源

GND

13个 3个 1个 4个

3个 4个 26

参考文献

[1]李朝清.单片机原理与接口技术[M].北京航空航天大学出版社。2005.10.[2]耿永刚.单片机与接口应用技术[M].华东师范大学出版社.2008.4.[3]范立南, 谢子殿.单片机原理及应用教程[M].北京大学出版社.2006.1.[4]梅丽凤.王艳秋,汪毓铎.单片机原理及接口技术[M].清华大学出版社.2003.5.[5]何立民.单片机应用系统设计[M].北京航空航天大学出版社.2002.[6]胡汉才.单片机原理及其接口技术[M].清华大学出版社.2004.10.

27

推荐第9篇:单片机课程设计

基于单片机的计算器设计、基于单片机的密码锁设计、基于单片机的电机控制、基于单片机的交通灯设计、基于单片机的八路抢答器设计、基于单片机的温度检测设计、基于单片机的温湿度检测设计、基于单片机的LED显示屏、基于单片机的烟雾报警设计、基于单片机的液位检测设计基于单片机的智能小车设计、基于单片机的气压计设计、基于单片机的多功能电子时钟设计、基于单片机的电子秒表设计、基于单片机的电压表设计、基于单片机的波形发生器设计、电机驱动模块、基于单片机的频率计设计、基于单片机的电子称设计、基于单片机的电子调光灯、基于单片机的智能风扇、基于单片机的红外遥控设计、基于单片机的出租车计价器设计、基于单片机的调速设计、基于单片机的超声波测距设计、基于单片机的电子琴设计、基于单片机的风力发电测试、基于单片机的智能充电器设计、基于单片机的小功率直流电机控制、基于单片机1602的万年历设计、基于单片机的无限温度控制、、、、、、、更多单片机课程设计免费下载、机不可失失不再来:http:///reg/index.asp?id=7586

推荐第10篇:单片机课程设计

多元智能理论在美国教育改革的理论和实践中产生了广泛的积极影响,并且已经成为当前美国教育改革的重要理论基础之一。运用多元智能理论分析我国的教育问题,对于促进我国的教育改革和学生全面素质的提高有着重要的积极意义。

1.树立新的学生观、教学观和评价观

首先,根据多元智能理论,我们应该树立积极乐观的学生观。每个学生都有自己的优势智能,有自己的学习风格和方法。我们看待学生时应该时刻清醒地认识到,每个学生都是多种不同智能不同程度的组合,问题不再是一个学生有多聪明,而是一个学生在哪些方面聪明和怎样聪明。

2.向学生展示多方面的智能领域

受遗传因素和环境因素的影响,儿童之间很早就表现出兴趣爱好和智能特点的不同。美国心理学家的一项实验研究表明,四五岁的儿童在完成需要不同智能共同参与的多项游戏任务时,都表现出了不同的智能特点。教育工作者的任务就应该是向儿童提供多种多样的智能活动机会,在充分尊重儿童发展独特性的同时,保证儿童的全面发展。

3.注意鉴别并发展学生的优势智能领域

在多元智能理论看来,每一位学生都有相对的优势智能领域(无论是相对于自己还是别人),如有的学生更容易通过音乐来表达,有的学生则更容易通过数学来表达。我们应该在对学生进行评价的基础上注意发现他们的优势智能领域并加以挖掘和发展。

4.帮助学生将优势智能领域的特点迁移到其他智能领域多元智能理论强调八种智能中的每一种在人类认知结构中均具有同等重要的地位,教育应该对不同的智能一视同仁。但它更强调每一个人的智能特点是不一样的,强调每一个人都应该在充分展示自己智能长项的同时,将自己优势领域的意志品质等迁移到弱势智能领域中,从而使自己的弱势智能领域得到发展。

5.应该注重培养学生的创造能力

加德纳多元智能理论告诉我们应该注重学生创造能力的培养。在多元智能理论看来,现实生活需要每个人都充分利用自身的多种智能来解决各种实际问题,社会的进步需要个体创造出社会需要的物质产品和精神产品,这两种能力的充分发展,才应该被视作智能的充分发展。从智能的本质上讲,解决实际问题的能力也是一种创造能力,因为它主要是综合运用多方面的智能和知识、创造性地解决现实生活中没有先例可循的新问题特别是难题的能力。

6.建构全新的课程设计思路

多元智能理论为我们挑战传统的课程设计思路并形成新的、有时代特点的课程设计思路提供了有意义的借鉴。根据多元智能理论的理念和实践,有时代特点的课程设计思路可以概括为两点,其一是“为多元智能而教”,其二是“通过多元智能来教”。

1.不相信自己的意志,永远也做不成将军。

春秋战国时代,一位父亲和他的儿子出征打仗。父亲已做了将军,儿子还只是马前卒。又一阵号角吹响,父亲庄严地托起一个箭囊,郑重地对儿子说:“这是家袭宝箭,佩带身边,力量无穷,但千万不可抽出来。”果然,佩带宝箭的儿子英勇非凡,所向披靡。当鸣金收兵的号角吹响时,儿子再也禁不住得胜的豪气,完全忘记了父亲的叮嘱,强烈的欲望驱使他呼一声就拔出了宝箭。骤然间他惊呆了,断箭,箭囊里装着一枝折断的箭。儿子顿时吓出了一身冷汗,意志轰然坍塌。结果儿子惨死于乱军之中。

Skill 1:把胜败寄托在一枝宝箭上,多么愚蠢,而当一个人把生命的核心与把柄交给别人,又是多么危险!永远记住:自己才是一枝宝箭。

2、乐观者和悲观者

从前,有一对夫妇养育了两个儿子,大儿子以卖煤为生,小儿子则卖雨伞。每到下雨,母亲就唉声叹气说大儿子的煤要卖不出去了,天晴时,母亲又惆怅抱怨小儿子的伞没人要。但父亲则和母亲恰恰相反,下雨天,他为小儿子高兴,天晴时,他为大儿子叫好。

Skill 2:性格决定命运,乐观的人会在逆境中找到快乐,悲观的人看不到生活中的希望,有什么样的思维方式就会有什么样的人生。

3、为生命画一片树叶

美国作家欧・亨利在他的小说《最后一片叶子》里讲了个故事: 病房里,一个生命垂危的病人从房间里看见窗外的一棵树,叶子在秋风中一片片地掉落下来。病人望着眼前的萧萧落叶,身体也随之每况愈下,一天不如一天。她说:“当树叶全部掉光时,我也就要死了。”一位老画家得知后,用彩笔画了一片叶脉青翠的树叶挂在树枝上。最后一片叶子始终没掉下来。只因为生命中的这片绿,病人竟奇迹般地活了下来。

Skill 3:人生可以没有很多东西,却唯独不能没有希望。希望是人类生活的一项重要的价值。

4、飞翔的蜘蛛 一天,我发现,一只黑蜘蛛在后院的两檐之间结了一张很大的网。难道蜘蛛会飞?要不,从这个檐头到那个檐头,中间有一丈余宽,第一根线是怎么拉过去的? 后来,我发现蜘蛛走了许多弯路——从一个檐头起,打结,顺墙而下,一步一步向前爬,小心翼翼,翘起尾部,不让丝沾到地面的沙石或别的物体上,走过空地,再爬上对面的檐头,高度差不多了,再把丝收紧,以后也是如此。蜘蛛不会飞翔,但它能够把网结在半空中。它是勤奋、敏感、沉默而坚忍的昆虫,它的网织得精巧而规矩,八卦形地张开,仿佛得到神助。这样的成绩,使人不由得想起那些沉默寡言的人和一些深藏不露的智者。

Skill 4:信念是一种无坚不摧的力量,当你坚信自己能成功时,你必能成功。

5、成功并不像你想像的那么难

1965年,一个韩国学生到剑桥大学主修心理学。他常到学校的咖啡厅或茶座听一些成功人士聊天,他们中有诺贝尔奖获得者,有学术权威,还有一些创造了经济神话的人。这些人幽默风趣、举重若轻,把自己的成功都看得非常自然和顺理成章。时间长了,他发现,在国内时,一些成功人士把自己的创业艰辛过分地夸大了。 作为心理系的学生,他对韩国成功人士的心态进行了研究。1970年,他把《成功并不像你想像的那么难》作为毕业论文,提交给现代经济心理学的创始人威尔布雷登教授。布雷登教授读后,大为惊喜。这本书后来鼓舞了很多人,它从一个新的角度告诉人们,成功与“劳其筋骨,饿其体肤”、“三更灯火五更鸡”、“头悬梁,锥刺股”没有必然的联系,只要你对某一事业感兴趣,长久地坚持下去就会成功,必有收获。

Skill 5:人世中的许多事,只要想做,都能做到,用不着什么钢铁般的意志,更用不着什么技巧或谋略。只要一个人还在朴实而饶有兴趣地生活着,他终究会发现,造物主对世事的安排,都是水到渠成的。

6、勇于冒险

有一天,龙虾与寄居蟹在深海中相遇,寄居蟹看见龙虾正把自己的硬壳脱掉,露出娇嫩的身躯。寄居蟹非常紧张地说:“龙虾,你怎可以把唯一保护自己身躯的硬壳也放弃呢?难道你不怕有大鱼一口把你吃掉吗?以你现在的情况来看,连急流也会把你冲到岩石去,到时你不死才怪呢?” 龙虾气定神闲地回答:“谢谢你的好心,可是你不了解,我们龙虾每次成长,都必须先脱掉旧壳,才能生长出更坚固的外壳,现在面对的危险,只是为了将来发展得更好而作出准备。” 寄居蟹细心思量一下,自己整天只找可以避居的地方,而从来没有想过如何令自己成长得更强壮,整天只活在别人的护荫之下,难怪永远都限制自己的发展。

Skill 6:对于那些害怕危险的人,危险无处不在。

7、再试一次 有个年轻人去微软公司应聘,而该公司并没有刊登过招聘广告。见总经理疑惑不解,年轻人用不太娴熟的英语解释说自己是碰巧路过这里,就贸然进来了。 总经理感觉很新鲜,破例让他一试。面试的结果出人意料,年轻人表现糟糕。他对总经理的解释是事先没有准备,总经理就随口应道:“等你准备好了再来试吧。” 一周后,年轻人再次走进微软公司的大门,这次他依然没有成功。但比起第一次,他的表现要好得多。而总经理给他的回答仍然同上次一样:“等你准备好了再来试。”就这样,这个青年先后5次踏进微软公司的大门,最终被公司录用,成为公司的重点培养对象。

Skill 7:以勇敢者的气魄,坚定而自信地对自己说一声“再试一次”!再试一次,你就有可能到达成功的彼岸!

8、天道酬勤

曾国藩是中国历史上最有影响的人物之一,但是他小时候的天赋却并不高。 有一天在家读书,对一篇文章不知道重复了多少遍,还是没有能够背下来。这时候他家来了一个贼,潜伏在他的屋檐下,贼想等到读书人睡觉之后捞点好处。 可是等啊等,就是不见他睡觉,还是翻来覆去地诵读那篇文章。贼大怒,从梁上跳出来说,“这种水平读什么书”?然后将那文章背诵一遍,扬长而去。贼是很聪明,至少比曾先生要聪明,但是他只能成为贼,那贼的记忆力真好,听过几遍的文章都能背下来,可惜,他的天赋没有加上勤奋,变得不知所终,而曾国藩便是凭着勤奋和坚忍的毅力成为一代宗师。

Skill 8:伟大的成功和辛勤的劳动是成正比的,有一分劳动就会有一分收获,日积月累,从少到多,奇迹就可以创造出来。

9、居安思危

一只野狼卧在草上勤奋地磨牙,狐狸看到了,就对它说:“天气这么好,大家在休息娱乐,你也加入到我们队伍中吧!” 野狼没有说话,继续磨牙,把它的牙齿磨得又尖又利。狐狸奇怪地问道:“森林这么静,猎人和猎狗已经回家了,老虎也不在近处徘徊,又没有任何危险,你何必那么用劲磨牙呢?” 野狼停下来回答说:“我磨牙并不是为了娱乐,你想想,如果有一天我被猎人或老虎追逐,到那时,我想磨牙也来不及了。”

Skill9:做事应该未雨绸缪,居安思危,这样在危险突然降临时,才不至于手忙脚乱。“书到用时方恨少”,平时若不充实学问,临时抱佛脚是来不及的。机会只给那些有准备的人。千万不要相信,临阵磨枪不快也光,那是自欺欺人。

10、你也在井里吗?

有一天某个农夫的一头驴子,不小心掉进一口枯井里,农夫绞尽脑汁想办法救出驴子,但几个小时过去了,驴子还是在井里痛苦地哀嚎着。最后,这位农夫决定放弃,他想这头驴子年纪已经太大了。农夫于是请来左邻右舍帮忙一起将井中的驴子埋了。邻居们人手一把铲子,泥土一铲铲进了枯井。但出人意料的是,这头驴子好像安静下来了,农夫好奇地往井底探头,出现在眼前的景象令他大吃一惊:当泥土落在驴子的背部时,驴子便将泥土抖落在一旁,然后站到铲进的泥土堆上面。 就这样,驴子将大家铲倒在它身上的泥土全数抖落在井底,然后再站上去。很快,这只驴子便得意地上升到井口,然后在众人惊讶的表情中快步地跑开了!

Skill 10:在生命的旅程中,有时候我们难免会陷入“枯井”里,会被各式各样的“泥沙”倾倒在我们身上,而想要从这些“枯井”脱困的秘诀就是:将“泥沙”抖落掉,然后站到上面去!

成功等于知识加人脉,不断地补充知识是获得成功的前提.华人首富,我们 的创富凯模李嘉诚先生也说:知识是一个人成就大业的基础.在二十一世纪竞争激烈的今天,我们 大学生必须具备哪些技能才能在这个时代脱颖而出?我个人认为当代大学生在无论是职场还是自己创业都必须获得以下三种技能技能才能更加成功及我对这三种技能的提升计划

1、拥有勇气

万丈高楼平地起,不积跬步无以成千里,不积小流无以成江河。飞机要起飞,先求稳再求快,一个人要成功,打基础非常重要,大学生要成功,勇气是必不可少的基本功。人之一世,殊为不易。在看似平坦的人生道路上却充满了无数的荆棘。有些人会志气消沉变得一蹶不振,有些人会因其迷失前进的道路,从而半途而废,也有些人依然奋勇向前,最终看到的是柳暗花明之后的又一座美丽的村庄。 勇气是成功的保证,每当面临抉择,许多人会犹豫不决,也会因此错过瞬息即逝的机会。但如果拥有当机立断的魄力与勇气,机会就不会溜走。

2、坚持乐观

每天做一件让他人感到舒服的事,或是说让他人感到高兴的话,我可以非常轻松的做到这一点,我可以用电话、明信片的方式,训练自己在每一困境中,用积极的心态面对这一切。每天阅读一篇励志文章,从他人的经验中汲取面对困难的勇气。同时我也会坚信,积极乐观的心态会对一个人的命运产生极大的影响。与成功和积极乐观的人交朋友,从他们身上汲取积极正面的力量,并与他们分享成功的经验。

3、坚定信念

每个人都有一定的理想,这种理想决定着他的努力和判断的方向。在这个意义上,我从来不把安逸和快乐看作是生活目的本身——这种伦理基础 ,我叫它猪栏式的理想。照亮我的道路,并且不断地给我新的勇气去愉快地正视生活的理想,是善、美和真。培养自己的信念,培养保持这种信念的毅力。自己认为对的,要有坚持的信念,人生很多时候不是因为坚持做了什么而后悔,而是因为没有坚持做某事而后悔。别人给予的永远只是建议和参考,理性分析这些建议,摈弃糟粕,取其精华。

第11篇:单片机课程设计

课 程 设 计

设计题目: 基于单片机的8*8点阵显示数字设计

学生姓名: 指导教师: 二级学院: 专

业: 班

级: 学

号:

目 录

摘要„„„„„„„„„„„„„„„„„„„„„„„„„„Ⅱ 1 方案选择及总体设计„„„„„„„„„„„„„„„„„„„1 1.1方案确定„„„„„„„„„„„„„„„„„„„„„1 1.1.1功能要求„„„„„„„„„„„„„„„„„„„„1 1.1.2方案确定„„„„„„„„„„„„„„„„„„„„1 1.2器件选择„„„„„„„„„„„„„„„„„„„„„1 2 控制系统设计„„„„„„„„„„„„„„„„„„„„„„2 2.1 控制系统硬件设计„„„„„„„„„„„„„„„„„2 2.1.1整体模块设计„„„„„„„„„„„„„„„„„„2 2.1.2单片机AT89C51„„„„„„„„„„„„„„„„„2 2.1.3单片机最小系统设计„„„„„„„„„„„„„„„5 2.1.3.1晶振电路设计„„„„„„„„„„„„„„„„„5 2.1.3.2复位电路设计„„„„„„„„„„„„„„„„„5 2.1.4驱动电路设计„„„„„„„„„„„„„„„„„„6 2.1.5LED点阵显示设计„„„„„„„„„„„„„„„„9 2.2控制系统软件设计„„„„„„„„„„„„„„„„„11 2.2.1软件设计思想„„„„„„„„„„„„„„„„„„11 2.2.2主程序流程图„„„„„„„„„„„„„„„„„„11 2.2.3子程序流程图„„„„„„„„„„„„„„„„„„13 3 系统仿真及调试„„„„„„„„„„„„„„„„„„„„14 3.1系统调试„„„„„„„„„„„„„„„„„„„„„14 3.2系统仿真„„„„„„„„„„„„„„„„„„„„„14 3.2.1protrus软件仿真„„„„„„„„„„„„„„„„14 3.2.2程序„„„„„„„„„„„„„„„„„„„„„„14 总结„„„„„„„„„„„„„„„„„„„„„„„„„^„17 参考文献„„„„„„„„„„„„„„„„„„„„„„„„18

I

摘 要

现在市场上各类基于LED的显示屏较多,但大部分产品为单一模式的LED显示屏,其在显示内容的更换及显示屏的重组等方面都存在不便之处。但随着信息化社会的迅速发展,LED显示屏正在向显示内容丰富、信息更改方便等方面发展。因此制作一款多功能的LED广告显示屏是非常有意义地。

LED驱动显示采用动态扫描方法,动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。以8×8点阵为例,把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第1行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定的时间,然后熄灭;再送出第2行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;第8行之后,又重新燃亮第1行,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。

本次课程设计的题目为8×8点阵数字显示,设计的任务为使用单片机控制8×8的点阵显示0到9的数字,不仅显示清晰,并且每经过一定时间,显示的数字加一,从0 到 9 循环。 以AT89C51单片机为核心,采用串行传输、动态扫描技术,制作一款模块化LED多功能显示屏。

在资料收集方面,主要是参考了《51单片机原理及应用—基于Keil C与Proteus》一书,结合了一些网络资料,以及一些集成块的使用说明书。

在整个工作过程中,根据收集来的资料绘制出大概的原理图,然后通过Proteus仿真,与此同时运用Keil 编程,用Keil 与Proteus进行联调,调试成功后确定了原理图和控制程序。

II

第一章 方案选择及总体设计

1.1 方案确定

1.1.1 功能要求

1、采用STC-51单片机作为微处理器。

2、设计一个8×8点阵LED数码字符显示器。

3、在目测条件下LED显示屏各点亮度均匀、充足、稳定、清晰无串扰。

4、动态显示“0——9”几个字符。

1.1.2 方案确定

采用ST89C51单片机作为微处理器,将共阳极二极管用共阴型接法连接成8×8点阵LED数码字符阵列,通过程序控制,采用动态显示,建立字符库“0——9”。

1.2 器件选择

微处理器采用ST89C51系列单片机,ST89C51单片机是这几年在我国非常流行的单片机,是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)高性能单片机,可擦除只读存储器可以反复擦除100次,具有低功耗、高性能的特点。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

1

第二章 控制系统设计

2.1控制系统硬件设计

2.1.1整体模块设计

本设计行、列驱动电路,显示器电路,运用单片机的智能化,系统的将每个功能电路模块连接在一起,总体结构设计如图2-1所示。

点阵显示器行驱动电路PC上位机单片机8×8点阵LED显示器电路点阵显示器列驱动电路

图2-1 硬件系统框图

此次需要实现的功能是利用一个ST89C51,一个8×8LED点阵,动态显示“0——9”10个字,采用PC上位机驱动显示电路。

2.1.2 单片机AT89C51 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM) ,器件采用ATMEL公司的高密度、非易失性存储技术生产, 兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机能提供许多高性价比的应用场合,可灵活应用于各种控制领域。

AT89C51单片机引脚图如图2-2所示。

2

图2-2 AT89C51引脚图

AT89C51管脚说明: VCC:供电电压。 GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行

3

存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下所示: P3口管脚

备选功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:

4

来自反向振荡器的输出。

2.1.3 单片机最小系统设计

单片机的最小系统是能够让单片机工作的最小硬件电路。除了单片机外,最小系统还包括复位电路和时钟电路。

复位电路:单片机的复位电路接在复位信号RST上,复位电路用于将单片机内部电路的状态恢复到初始值。需要复位时按下按钮即可。

时钟电路:时钟电路为单片机工作提供基本时钟。时钟电路中包含一个晶体振荡器,简称晶振,频率范围是1.2~12MHz。晶体振荡频率越高,系统的时钟频率也越高,单片机的运行速度也就越快

ST89C51单片机最小系统电路由复位电路、晶振电路两部分组成。 2.1.3.1 晶振电路设计

ST89C52单片机芯片内部设有一个由反向放大器构成的振荡器,XTAL1和XTAL2分别为振荡电路的的输入端和输出端,时钟可有内部或外部生成,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就会产生自激振荡。系统采用的定时元件为石英晶体和电容组成的并联谐振回路。晶振频率采用12MHZ,C

1、C2的电容值取30pF,电容的大小起频率微调的作用。晶振电路图如图2-3所示。

C1XTAL130pFC2XTAL230pF图2-3 晶振电路图

X112MHZ

2.1.3.2 复位电路设计

ST89C51单片机在启动运行时或者出现死机时需要复位,使CPU以及其他功能部件处于一个确定的初始状态,并从这个状态开始工作。单片机有多种复位方式,常用的复位操作有上电复位和手动复位方式。本设计采用最简单的上电复位方式,电路如图2-4所示。上电复位是通过外部复位电路的电容充电来实现的,

5

复位电路产生的复位信号(高电平有效)由RST引脚送入到内部的复位电路,对ST89C51单片机进行复位,复位信号要持续两个机器周期(24个时钟周期)以上,才能使ST89C51单片机可靠复位。当上电时,C1相当于短路,有时碰到干扰时会造成错误复位,可在复位端加个去耦电容,可以取得很好的效果。

ST89C51单片机复位电路如下图所示:

VCCAT89C51VCCC510MF/25VRSTR94.7KVSSR24.7KVSSRSTR1C10MF/25VS5 RSTVCCAT89C51VCC

图2-4 上电复位电路图

图2-5 按键电平复位电路图

复位电路工作原理:

上电瞬间RST引脚的电位与VCC等电位,RST引脚为高电平,随着电容C5充电电流的减少,RST引脚的电位不断下降,可以保持RST引脚在为高电平的时间内完成复位操作。

当单片机已在运行当中时,按下复位键S5后再松开,也能使RST引脚为一段时间的高电平,从而实现ST89C51单片机复位。

2.1.4 驱动电路设计

驱动电路图如图2-6所示。

6

图2-6 驱动电路图

74LS245引脚图如图2-7所示。

图2-7 74LS245引脚图

引出端符号: A A总线端

7

B B总线端

/G 三态允许端(低电平有效) DIR 方向控制端

74LS245是用来驱动LED或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。

如果用89C51的P0口输出到数码管,那就要考虑到数码管的亮度以及P0口带负载的能力,当89C51单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。选用74LS245提高驱动能力。P0口的输出经过74LS245提高驱动后,输出到数码管显示电路。

工作原理:

当片选端/CE低电平有效时,

DIR=“0”,信号由B向A传输;(接收) DIR=“1”,信号由A向B传输;(发送) 当CE为高电平时,A、B均为高阻态。

正向点亮一颗LED,至少也要10~20mA,若电流不够大,则LED不够大。而不管是ST89C51的I/O口,还是TTL、CMOS的输出端,其高态输出电流都不是很高,不过1~2mA而已。因此很难直接高态驱动LED,这时候就需要额外的驱动电路,通常有共阳型与共阴型LED阵列驱动电路,本设计才用共阴型高态扫描信号驱动电路。

共阴型LED阵列驱动电路采用高态扫描,也就是任何时间只有一个高态信号,其它则为低态。一行扫描完成后,再把高态信号转化到近邻的其他行,扫描信号接用一个反向驱动器,ST89C51本身内置一个反向驱动器,本设计将ST89C51作为点矩阵显示控制系统的控制核心,通过点矩阵实时显示并移动字符。

单片机的串口与行驱动器相连,用来发送显示数据信息。P3口与LED阵列的行引脚相连,送出数据、地址以及系统控制信号。输出低态时,最大可吸取0.5A,即500mA,若每个LED取30mA,7个LED同时点亮,需要210mA,完全满足LED点亮的基本条件。

所要显示的信号送入74LS245芯片,然后连接到LED阵列的列阵脚。对于高态的显示信号,将可提供其所连接LED的驱动电流,而这个驱动电流经过LED到输出端,形成正向回路,即可点亮该LED。其中每个晶体管任何时间只需负

8

责驱动一个LED,所以选择30mA射极电流的晶体管。驱动电路如图2-6所示。

2.1.5 LED点阵显示设计

本设计采用ATMEL公司的AT89C51作矩阵显示控制系统控制核心,12MHZ晶振,88点阵共阳LED显示器。其中,P0口作为字符数据输出口,P3口为字符显示扫描输出口,第31脚(EA)接电源,改变电阻(270×8)的大小可改变显示字符的亮度,驱动用74LS245芯片。

本设计LED矩阵显示器电路选用8×8点阵模块,系统由单片机控制。 LED显示屏是将发光二极管按行按列布置的,在扫描驱动方式下可以按行扫描按列控制,也可以按列扫描按行控制。本文就是使用1块8×8点阵,采用按列扫描按行控制控制方式,扫描顺序自左向右,以满足数字显示的要求。8×8点阵LED结构如图2-8所示。

8×8点阵LEDabcdefgh12345678

图2-8 LED数码显示管

8×8 点阵LED的工作原理:LED点阵的显示方式是按显示编码的顺序,一行一行地显示。对于共阳型的点阵来说,当某一点所在的行对应高电平“1”并且其所在的列对应低电平“0”的时候,这一点就会被点亮。将每一行的显示时间进行一定的延时,由于人的视觉暂留现象,就会感觉到8行LED是在同时显示的。若显示的时间太短,则亮度不够,若显示的时间太长,将会感觉到闪烁。图2-9为8×8点阵LED外观及引脚图,其等效电路如图2-10所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴。一个8×8点阵是由64个发光二极管按规律组成的,如图2-10所示。图中,行接高电平,列接低电平,发光二极管导通发光。

9

图2-9 8×8点阵LED外观及引脚图

图2-10 8×8点阵LED等效电路

8×8点阵数字显示的编码原理: 8×8点阵数字显示主要应用行扫描动态显示的方法实现,如图2-11所示,将行线依次置零,一次对列线编码,有红色填充部分为1,无填充部分为0。

10

图2-11 8×8点阵数字显示的编码原理

如此可得到“0”的编码为{0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00},同理可得到:

{0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00}

//1 {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}

//2 {0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00}

//3 {0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00}

//4 {0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00}

//5 {0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00}

//6 {0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00}

//7 {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}

//8 {0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00}

//9 2.2控制系统软件设计

2.2.1 软件设计思想

主程序先进行设置中断,并启动,再进行键盘扫描载入“0——9”字型,然后判断一组字型是否扫描完,按不同情况进行循环调用子程序。进入子程序后,首先设置相应的程序,反复调用显示子程序,并在显示过程中反复调用键盘扫描子程序进行延时,判断是否退出相应的方式显示子程序。设计过程中,能很好得提高按键响应速度。

2.2.2 主程序流程图

主程序首先设置并启动T0中断,然后调用初始化程序,为后面程序要用到的数据调入,并清零一些用到的数据单元,然后载入“0——9”字型,进行扫描。图2-12为主程序流程图。

11

图2-12 主程序流程图

12

2.2.3 子程序流程图(定时中断服务程序)

图11 子程序流程图(定时中断服务程序)

13

第三章 系统仿真及调试

3.1系统调试

根据硬件电路图核对了元器件的型号、极性,安装是否正确,检查硬件电路连线是否与电路原理图一致,检查电路元器件是否都已经连接好。

通电后,用示波器检测单片机的复位和晶振电路是否有复位信号和振荡信号。

3.2 系统仿真

3.2.1 proteus软件仿真

使用proteus原理及仿真如图3-1所示。

如图3-1 proteus原理及仿真图

3.2.2 程序

#include #include #define uchar unsigned char #define uint unsigned int uchar code Table_of_Digits[]=

14

{ 0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, 0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,

//0 //1 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,

//2 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,

//3 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,

//4 0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, 0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, 0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00,

0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,

0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00

}; uchar i=0,t=0,Num_Index; //主程序 void main() { P3=0x80;

Num_Index=0;

//从0开始显示

TMOD=0x00;

//T0方式0 TH0=(8192-2000)/32; //2ms定时

TL0=(8192-2000)%32; IE=0x82;

//允许T0中断

TR0=1;

//启动T0 while(1); }

//T0中断函数

void LED_Screen_Display() interrupt 1 { TH0=(8192-2000)/32;

//恢复初值

TL0=(8192-2000)%32; P0=0xff;

//输出位码和段码

P0=~Table_of_Digits[Num_Index*8+i]; P3=_crol_(P3,1);

//P3循环向左一位

5 //5 //6 //7

//8 //9

}

if(++i==8) i=0; if(++t==250) {

} t=0;

//每屏一个数字由8个字节构成 //每个数字刷新显示一段时间

if(++Num_Index==10) Num_Index=0; //显示下一个数字

16

总结

经过单片机的课程设计,我有了很大的收获。

首先,就是让我加深了对单片机的掌握和理解与应用,知道单片机到底是怎样控制点阵,怎样应用在生活中的。并且让我懂得了要善于思考,追求严谨,认真解决问题,才会有更多的收获。

然后,提高了通过查阅资料解决问题的能力。通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,了解了LED的现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点,明确了研究目标。并且通过对单片机资料的查阅和应用,更进一步增加了对单片机知识的理解和运用能力。并证实了自己的思路:“查资料→思考总结→运用→找出差错,再查资料和向别人询问→再次运用”的正确性。

最后,本系统能够完成设计任务,能够显示数字0-9,并且显示也较为稳定清晰。 本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。在本次课程设计中,主要使用了Proteus和Keil等软件进行硬件电路和控制程序的设计,加深了对这些软件的了解。感到Proteus对电子专业的同学来说是一个很有用的软件。总体来说这次的课程设计很成功,达到了预想的目的:学到了知识,提高了能力,完成了任务。

17

参考文献

[1] 张靖武,周灵彬 《单片机系统的PROTEUS设计与仿真》北京 电子工业出版社 [2] 吴金戌,沈庆阳,郭庭吉 《8051单片机实践与应用》北京 清华大学出版社 [3] 李群芳,肖看 《单片机原理、接口及应用》北京 清华大学出版社

[4] 张毅刚,彭喜元等 《新编MCS-51单片机应用设计 》黑龙江 哈尔滨工业大学出版社 [5] 李朝青,刘艳玲编著 《单片机原理及接口技术》北京 航空航天大学出版社

18

第12篇:单片机课程设计

单片机课程设计 跑马灯的控制

摘要:本设计选择对跑马灯的控制,先构思跑马灯实现预想效果,然后进行分 析,根据要求编写程序,选择硬件端口,并进行调试致预想效果,最后浅谈课

程设计的经历,以及总结。

目录

一)课程设计的目的 二)课程设计的要求 三)流程图 四)原理图 五)程序语言 六)

总结 七)参考资料

设计题目:试设计一个闪烁跑马灯控制器,该控制器可以控制8个灯顺序亮灭。 当单片机上电后,8个灯依次从左向右亮,并且每个灯亮的时间为1秒钟。这时,如果按钮K1按下,则灯亮的顺序是从右向左,同样,每个灯亮的时间是1秒钟。这时,如果按下按钮K2,则此时,4个灯亮4个灯灭,延迟4秒钟以后,又开始从左向右点亮。最后,若按下按钮K3,则全部灯亮。此时若想再次点亮灯,必须

重新上电。 题目分析:

该题目要求控制8盏灯的亮灭,可使用单片机的P1.0到P1.8口来控制。按钮K1用P3.4口,K2用P3.2口,及外部中断0,K3用P3.3口,及外部中断1,分别来实现。单片机使用AT89C52,电源使用5V标准电源。顺序亮灭使用外部中断

源构成循环控制语句。

一、课程设计的目的

课程设计是本专业集中实践环节的主要内容之一。训练正确地应用单片机,培养解决工业控制、工业检测等领域具体问题的能力。学生通过所做课题,熟悉单片机应用系统开发研制的过程,软硬件设计的工作方法、内容及步骤,对学生进行基本技能训练。例如组成系统、编程、调试、绘图等。使学生理论联系实际,提高动手能力和分析问题、解决问题的能力。

通过本课程设计,主要达到以下目的:

1.使学生增进对单片机的感性认识,加深对单片机理论方面的理解。2.使学生掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O

口、串行口通讯等。

3.使学生了解和掌握单片机应用系统的软/硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。

二、课程设计的要求

1.学生需认真阅读课程设计任务书,熟悉有关设计资料及参考资料,熟悉各种设计规范的有关内容,认真完成任务书规定的设计内容。

2.课程设计的成果为“课程设计报告”。课程设计报告内容要正确,概念要清楚,完成任务书所规定的内容,附有原理图及程序流程图,程序清单,文字要通顺,书写要工整,设计图纸必须符合规范。

3.课程设计报告应在2000字以上(含相关图纸和计划书等),用A4纸打印。

三、流程图 主程序流程图

原理图说明:该设计选用一块AT89C52型单片机,使用其P0口,P3口的部 分。P0口作为发光二极管的控制信号输出端,P3.0作为按钮K1的信号输入口,P3.2为按钮K2外部中断0信息输入口,P3.3作为K3外部中断0的信息输入口。单片机晶振频率为12MHz,每个机器周期1µs。电源使用5v直流电。

五、程序语言:

ORG 0000H :程序入口地址 AJMP MAIN ORG 0003H :外部中断0入口地址 AJMP ZD0 ORG 0013H :外部中断1入口地址 AJMP ZD1

ORG 0100H :主程序入口地址

MAIN: MOV SP,#40H :初始化,开外部中断1,外部中断0,以及总中断,并

且将外部中断1设为最高优先级,并且是脉冲触发方式。

MOV IE,#85H

MOV IP,#04H MOV TCON,#01H YYY: MOV A,#7FH :将A寄存器中存入7FH.

SETB P3.4 JB P3.4,PPP :判断按键K1是否按下,如果没有按下则跳转到PPP,灯从

左到右依次点亮。 CLR Cy :进位位清零 MOV A,#0FFH :A中存入FFH.MMM: RLC A :A中数据带进位位左移一位。

MOV P2,A :将A中数据送到P0口,灯亮且延迟1秒。 ACALL DELAY SETB P3.4 JB P3.4,PPP :判断K1是否按下,若按下则跳转到MMM,没有则跳转

到PPP,灯依次从左向右亮,且没亮一次,延迟1秒

SJMP MMM PPP: MOV P2,A A中数据转到P0口,点亮灯。

RR A :A中数据右移一位 ACALL DELAY :调用一秒延迟

SETB P3.4 JNB P3.4,YYY :判断K1按键是否按下,按下则跳转到YYY,没有则跳

转到PPP SJMP PPP ZD0: MOV A,#0FFH :外部中断0,将FFH送入A寄存器中,再送到P0口,

灯全灭,且延迟4秒钟,后再循环亮。

MOV P2,A ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY

AJMP MAIN

RETI :中断程序返回

ZD1: MOV A,#0FFH :A寄存器中存入FFH,再送到P0口,灯灭, MOV P0,A AJMP $ :本地一直循环 RETI :中断返回

DELAY: MOV R5,#25 :延迟4秒子程序 D1: MOV R6,#200 D2: MOV R7,#100 DJNZ R7,$ DJNZ R6,D2 DJNZ

R5,D1

RET :子程序返回 END :程序结束

调试说明:打开c51软件,新建工程gao,新建文件,输入以上程序,以.asm 格式保存。在gao工程中添加输入好的程序。点击编译,对有错误地方修改。选择生成HEX文件,再编译,此时已经生成HEX文件。打开AVR烧录软件,将生成好的HEX文件下载到单片机机中,观察单片机的对应发光二极管的状态,看是否与设计预想一致。若不一致,在C51里修改相应地方,再重新编译下载,

直至与预想一致。

六、总结

单片机课程设计是一个很好的实践环节,它将我们所学的课堂知识与实践生活结合,使我们所学知识得到加固。以前的课程都是理论知识的学习,感觉有些抽象,学习起来也比较乏味,没有主观的学习热情。这次课程设计的主要收获就是在运用知识的过程中让我对单片机产生了浓厚的兴趣,课后自己还亲手制作单片机,从而对单片机的结构更加了解,将硬件与软件知识完美的结合。从而增加了我对知识的渴望,这也许就是主观的学习积极性。

老师的指导也是是很重要的,众所周知,实践中,经验占据重要地位。老师的经验和知识都要多于我们。通过老师的指导,使我们的试验过程更加轻松,受益匪浅。 总之,这次课设不仅使我了解了单片机的开发流程,更加地理解运用了知识,而且更重要的是收获了知识以外的学问,这才是我受用一生的。

七、

参考资料:

牛昱光主编《单片机原理与接口技术》电子工业出版社 51单片机实验指导书 胡汉才主编《单片机原理及其应用》清华大学出版社出版 何立民主编《单片机应用文集》北京航空航天大学出版社出版 天津锐志单片机学习资料

第13篇:单片机课程设计

2014单片机课程设计

课程设计基本格式:

一。摘要(300字)

基于何种原理,采用什么方法,达到什么目的,得到什么结果。

二。正文(有图有文):

1.方案论证与比较

系统设计(或设计原理)与理论分析(或测控)方法和计算。

①总体设计、总体框图,有框图中每一个模块的功能说明。

②电路设计及参数计算(主要针对核心电路而言),有电路图、电路说明、主要参数计算。

③软件设计,有流程图及叙述、对其中核心算法进行说明。

三。调试方法与数据

①测试原理(方法),有硬件设计、软件调试、联调。

②使用仪器和工具(型号)。

③测试结果(采用多张表格或图形表示)。

四。结论

用结果说明设计作品成功之处,对某些问题进行分析,展望。

附录硬件线路图和PCB印刷电路板图及程序清单

题目一步进电机控制器设计

设计要求

利用51单片机控制步进电机的旋转方向和旋转速度,各控制功能通过按键实现:

(1)通过正传和反转控制按键,控制步进电机正向和反向旋转。

(2)通过加速和减速控制按键,在一定范围内控制步进电机的旋转速度。

(3)在不切断电源的情况下,通过停止按键可以停止步进电动机。

(4)步进电机的驱动电路自行设计,不能采用现成的驱动芯片和驱动器。

(5)键输入按中断方式进行处理。

题目二直流电机控制器设计

设计要求

利用51单片机控制直流电机的旋转方向和旋转速度,各控制功能通过按键实现:

(1)通过正传和反转控制按键,控制直流电机正向和反向旋转。

(2)通过加速和减速控制按键,在一定范围内控制直流电机的旋转速度。

(3)在不切断电源的情况下,通过停止按键可以停止直流电机。

(4)直流电机的驱动电路自行设计,不能采用现成的驱动芯片和驱动器。

(5)键输入按中断方式进行处理。

题目三基于DS18B20的数字温度计设计

设计要求

以51单片机为核心,设计一数字式温度计:

(1)采用数字式温度传感器DS18B20为温度检测元件,单点检测。

(2)温度采用三位数字显示,两位整数,一位小数。

(3)具有按键设置温度上限和下限的功能。

(4)实测温度超过上下限时,采用声光报警。

PLC课程设计题目

题目一基于PLC的门禁系统设计

一.平衡式自动感应门机组组成部分

平移式自动感应门机组由以下部件组成:

主控制器:它是自动感应门的指挥中心,通过内部编有指令程序的大规模集成块,发出相应指令,指挥马达或电锁类系统工作;同时人们通过主控器调节门扇开启速度、开启幅度等参数。

感应探测器:负责采集外部信号,如同人们的眼睛,当有移动的物体进入它的工作范围时,它就给主控制器一个脉冲信号。

动力马达:提供开门与关门的主动力,控制自动感应门门扇加速与减速运行。

自动感应门扇行进轨道:就像火车的铁轨,约束门扇的吊具走轮系统,使其按特定方向行进。

门扇吊具走轮系统:用于吊挂活动门扇,同时在动力牵引下带动门扇运行。

同步皮带(有的厂家使用三角皮带):用于传输马达所产动力,牵引自动感应门扇吊具走轮系统。

下部导向系统:是自动感应门门扇下部的导向与定位装置,防止门扇在运行时出现前后门体摆动。

二.工作流程

当自动感应门门扇要完成一次开门与关门,感应探测器探测到有人进入时,将脉冲信号传给主控器判断后通知马达运行,同时监控马达转数,以便通知马达在一定时候加力和进入慢行运行。马达得到一定运行电流后做正向运行,将动力传给同步带,再由同步带将动力传给吊具系统使自动感应门扇开启;自动感应门扇开启后由控制器作出判断,若需关自动感应门,通知马达作反向运动,关闭自动感应门。

三.系统设计的主要内容

(一)拟定控制系统设计的技术条件。技术条件一般以设计任务书的形式来确定,它是整个设计的依据;

(二)选择电气传动形式和电动机、电磁阀等执行机构;

(三)选定PLC的型号;

(四)编制PLC的输)k/输出分配表或绘制输入/输出端子接线图;

(五)根据系统设计的要求编写软件规格说明书,然后再用相应的编程语言。

题目二双恒压供水控制系统设计

一.工作流程

PLC控制双恒压供水系统主要有变频器、可编程控制器、压力变送器和现场的水泵机组一起组成一个完整的闭环调节系统,有1个贮水池,3台水泵,采用部分流量调节方法,即3台水泵中只有1台水泵在变频器控制下作变速运行,其余水泵停止。PLC根据管网压力自动控制各个水泵之间切换,并根据压力检测值和给定值之间偏差进行PID运算,输出给变频器控制其输出频率,调节流量,使供水管网压力恒定。各水泵切换遵循先起先停、先

停先起原则。

PLC控制双恒压供水系统主要有变频器、可编程控制器、压力变送器和现场的水泵机组一起组成一个完整的闭环调节系统,该系统的控制工艺流程图如下图所示。

双恒压供水控制系统工艺流程图

从图中可看出,系统可分为:执行机构、信号检测机构、控制机构三大部分,具体为: (l) 执行机构:执行机构是由三台水泵组成,它们用于将水供入用户管网三台水泵可以进行变频调整,用以根据用水量的变化改变电机的转速,以维持管网的水压恒定。

(2) 信号检测机构:在系统控制过程中,需要检测的信号包括管网水压信号、水池水位信号和报警信号。管网水压信号反映的是用户管网/消防管网的水压值,它是双恒压供水控制的主要反馈信号。此信号是模拟信号,读入PLC时,需进行A/D转换。另外为加强系统的可靠性,还需对供水的上限压力和下限压力用电接点压力表进行检测,检测结果可以送给PLC,作为数字量输入;水池水位信号反映水泵的进水水源是否充足。信号有效时,控制系统要对系统实施保护控制,以防止水泵空抽而损坏电机和水泵。此信号来自安装于水池中的液位传感器;报警信号反映系统是否正常运行,水泵电机是否过载、变频器是否有异常,该信号为开关量信号。

(3) 控制机构:供水控制系统一般安装在供水控制柜中,包括可编程控制器、变频器和电控设备三个部分。可编程控制器是整个变频恒压供水控制系统的核心。供水控制器直接对系统中的压力、液位、报警信号进行采集,对来自通讯接口的数据信息进行分析、实施控制算法,得出对执行机构的控制方案,通过变频调速器和接触器对执行机构(即水泵机组)进行控制;变频器是对水泵进行转速控制的单元,其跟踪供水控制器送来的控制信号改变水泵的运行频率,完成对水泵的转速控制。

二.系统设计的主要内容

(一)根据以上控制要求,进行系统总体控制方案设计。

(二)硬件设备选型、PLC选型,估算所需I/O点数,进行I/O模块选型,

(三)绘制系统硬件连接图:包括系统硬件配置图、I/O连接图,分配I/O点数,

(四)列出I/O分配表,熟练使用相关软件,设计梯形图控制程序,

(五)编写设计说明书。

题目三四层电梯控制系统设计

第14篇:单片机课程设计

单片机课程设计

实验报告

——简易温度测量仪

专业班级:电科3班

姓名:李纯

学号:2220112515

摘要

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。

温度检测仪是工业生产中应用比较广泛的一种检测装置。温度是生产工艺过程中最基本、最重要的控制参数之一,关系到生产条件的建立,产品的产量、质量、效率,以及生产设备的寿命与安全等。温度是物体冷热程度的表现参数。温度测量仪的由感温元件帮助完成检测。

本次课程设计制作一个基于单片机的简易温度测量仪,设计旨在进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,加强对实际应用系统设计的能力。

设计任务和要求

设计目标和实现方法

为了满足简易温度测量仪的基本要求,可以进行低精度,一定范围内的温度测量,本次设计基于51单片机,温度传感器DS18B20并用液晶屏显示数据。

整体方案论述

根据简单温度测量仪的功能和本方案中的设计指标要求,本系统选用了MCS 51 单片机为主控机。通过扩展必要的外围接口电路,实

现对简单温度测量仪的设计。具体设计考虑如下:

由于要设计的是简单的温度测量仪,可以进行低精度,一定范围内温度的测量,对结果的精确程度与灵敏度要求不苛刻,故本次设计基于MCS 51 单片机为主控机,并用液晶屏显示数据即可。

实验资料

MCS 51 单片机

在HMOS技术大发展的背景下,Intel公司在MCS-48系列的基础上,于1980年推出了8位MCS-51系列单片机。它与以前的机型相比,功能增强了许多,就其指令和运行速度而言,超过了INTEL8085的CPU和Z80的CPU,成为工业控制系统中较为理想的机种。较早的MCS-51典型时钟为12MHz,而目前与MCS-51单片机兼容的一些单片机的时钟频率达到40MHz甚至更高,现在已有400MHz的单片机问世。51系列单片机有8位CPU,片内带振荡器频率范围为1.2MHz-12MHz, 128B的数据存储器,4KB的程序存储器。程序存储器的寻址空间为64KB,片外数据存储器的寻址空间为64KB,有128个用户位寻址空间,21个字节特殊功能寄存器,4个8位的I/O并行接口:P0、P

1、P

2、P3,两个16位定时、计数器,两个优先级别的五个中断源,还有一个全双工的串行I/O接口,可多机通信。片内采用单总线结构有较强的位处理能力。

DS18B20数字温度传感器

DS18B20数字温度传感器接线方便,封装成后可应用于多种场

合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。其独特的单线接口方式使DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

液晶显示器

在电场的作用下,液晶分子的排列会产生变化,从而影响到它的光学性质,这种现象叫做电光效应。利用液晶的电光效应,英国科学家在上世纪制造了第一块液晶显示器即LCD。今天的液晶显示器中广泛采用的是定线状液晶,如果我们微观去看它,会发现它特象棉花棒。与传统的CRT相比,LCD不但体积小,厚度薄(14.1英寸的整机厚度可做到只有5厘米),重量轻、耗能少(1到10 微瓦/平方厘米)、工作电压低(1.5到6V)且无辐射,无闪烁并能直接与CMOS集成电路匹配。由于优点众多,LCD从1998年开始进入台式机应用领域。

实际制作与调试

原理图

MCS-51 单片机

温度传感器

元器件清单

最小系统板 1块 温度传感器DS18B20 1各 液晶显示器 1个 电阻 18KΩ 1个 滑动变阻器 0-2KΩ 1个 面包板 1块 导线若干

仿真图

Proteus ISIS是一种操作简便而又功能强大的原理图编辑工具,它运行于Windows操作系统上,可以仿真、分析各种模拟器件和集成电路,该软件实现了单片机仿真和SPICE电路仿真的结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真等功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。它支持主流单片机系统的仿真。目前支持的单片机类型有68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。它还具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的电路设计和仿真软件,功能极其强大。本次课程设计基于该软件绘制简易温度测量仪原理图,并进行仿真。得到结果如下

程序流程图

系统程序流程图

温度转换与显示子程序流程图

程序清单

#include #define uint unsigned int #define uchar unsigned char uchar code table[]=\"now temperature:\"; sbit ds = P2^2; sbit lcden=P3^4; sbit lcdrs=P3^5; sbit dula=P2^6; sbit wela=P2^7;

void belay(uint i)//274us { unsigned char j, k; for(j = i; j >0; j--) { for(k = 125; k >0; k--); } } void dsWait() { unsigned int i;

while(ds); while(~ds); //检测到应答脉冲 i = 4; while(i>0) i--; } void delay(uint z) { uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); } void write_com(uchar com) //写指令 本次单片机只用写不用读 { lcdrs=0; //写指令的时候rs=0 P0=com; delay(5); lcden=1; delay(5); lcden=0; } void writeData(uchar date) //写数字

要保证 LCDEN为1

{ lcdrs=1; //写数据的时候rs为1 P0=date; delay(5); lcden=1; delay(5); lcden=0; } void init() //初始化

{

dula=0; // 关闭数码管

wela=0; lcden=0; write_com(0x38); //显示设置

write_com(0x0f); //00001DCB(D=1开显示,C=1显示光标,B=1光标闪烁) write_com(0x06); // 00001NS(N=1当读或写一个字符后地址指针加1,且光标加一,S=1当写一个字符,整屏显示左移) write_com(0x01); //清屏

} //初始化DS18B20

//让DS18B20一段相对长时间低电平, 然后一段相对非常短时间高电平, 即可启动 void dsInit() { //一定要使用unsigned int型, 一个i++指令的时间, 作为与DS18B20通信的小时间间隔

//以下都是一样使用unsigned int型 unsigned int i; ds = 0; i = 100; while(i>0) i--; ds = 1; i = 4; while(i>0) i--; }

//向DS18B20读取一位数据

//读一位, 让DS18B20一小周期低电平, 然后两小周期高电平, //之后DS18B20则会输出持续一段时间的一位数据 bit readBit() { unsigned int i; bit b;

ds = 0; i++; //3.25us ds = 1; i++; i++; b = ds; i = 8; while(i>0) i--; return b; }

//读取一字节数据, 通过调用readBit()来实现 unsigned char readByte() { unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i>1); } return dat;

} //向DS18B20写入一字节数据 void writeByte(unsigned char dat) { unsigned int i; unsigned char j; bit b; for(j = 0; j >= 1; //写\"1\", 让低电平持续2个小延时, 高电平持续8个小延时 if(b) { ds = 0; i++; i++; ds = 1; i = 8; while(i>0) i--; } else //写\"0\", 让低电平持续8个小延时, 高电平持续2个小延时 {

ds = 0; i = 8; while(i>0) i--; ds = 1; i++; i++; } } } //向DS18B20发送温度转换命令 void sendChangeCmd() { dsInit(); //初始化DS18B20 // belay(1); //延时1ms dsWait() ; writeByte(0xcc); //写入跳过序列号命令字 writeByte(0x44); //写入温度转换命令字 } //向DS18B20发送读取数据命令 void sendReadCmd() { dsInit(); // belay(1); dsWait() ; writeByte(0xcc); //写入跳过序列号命令字

writeByte(0xbe); //写入读取数据令字 }

//获取当前温度值

unsigned int getTmpValue() { unsigned int value; //存放温度数值 float t; unsigned char low, high; sendReadCmd(); //连续读取两个字节数据 low = readByte(); high = readByte(); //将高低两个字节合成一个整形变量 value = (high

//DS18B20的精确度为0.0625度, 即读回数据的最低位代表0.0625度

t = value * 0.0625 ; //将它放大10倍, 使显示时可显示小数点后一位, 并对小数点后第二2进行4舍5入

//如t=11.0625, 进行计数后, 得到value = 111, 即11.1 度

value = t * 10 + 0.5; return value; }

//显示当前温度值, 精确到小数点后一位 void display(unsigned int v) { uchar tempArray[4]; tempArray[0]=(v/100)+48; tempArray[1]=((v%100)/10)+48; tempArray[2]=\'.\';

tempArray[3]=(v%10)+48; write_com(0x80+0x40); writeData(tempArray[0]); writeData(tempArray[1]); writeData(tempArray[2]); writeData(tempArray[3]); writeData(0xdf); writeData(\'c\'); }

void main() {

int num; unsigned int value; value=0; // value++; init(); write_com(0x80);//写在第一行 for(num=0;num

P1=0xff; while(1) { //启动温度转换 sendChangeCmd(); value = getTmpValue(); //显示3次 if(value>320)

{

belay(5) ;

if(value>320)

P1=0x00;

}

else

{

belay(5) ;

if(value

P1=0xff;

} display(value); } }

成品图

实验数据记录

实验结果分析

根据简单温度测量仪的最终结果,本次设计基本达到最初的方案中的设计指标要求,实现了对温度的低精度,一定范围内的测量。

课程设计总结

本次课程设计,我们组选择的是使用基于单片机设计一个简易温度测量仪。确定这个课题后,通过图书馆,网上查阅资料,与小组内的成员之间的交流,我们对课题有了一个比较充分的了解。

第一次上课时候,由于之前大家都把资料准备好了,就直接开始仿真。刚刚开始仿真时,大家根据资料将仿真图弄好,且把程序导入,但是仿真结果总是不对,经过细心排查后发现是程序少了一条,改正后,就出结果了。过程中也有对软件的不熟悉,使得仿真进行的不是很顺利,好在最后正确出现想要的结果了。

之后,开始连接面包板,这个课题需要连接的元器件较少,连线这方面也很顺利。但是结果就是一直出不来,以为是线路连错,反反复复检查错误不下余十遍后发现还是不能出来结果。由于我们班是最后一个做课设的,安排在考试周,时间也很紧张,大家也开始着急了。最后没有办法,组员觉得是星研软件的问题,于是将面包板带回宿舍,因为他们有单片机学习板,准备将程序导入到芯片内部进行尝试。果不其然,组员在宿舍将程序导入到芯片后脱离星研软件后,立马出来了实验结果。

在这次单片机课程设计中,我们组每个人都将自己的任务完成

的很好,相互合作使得整个课设过程终于顺利的完成。虽然过程中因为总是出不来实验结果等各种原因使整个过程感觉困难重重,但是还是很好的解决了。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正学以致用,从而提高自己的实际动手能力和独立思考的能力。通过这次课程设计使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我们在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。

第15篇:单片机课程设计

单片机课程设计

课题: 简易电子琴设计

院:

电气与信息工程学院 专

业:

电子信息工程 姓

名:

李琳琳 学

号:

093411106

指导老师:

田巍

河南城建学院

2014年

01 月

01 日

第16篇:单片机课程设计

单片机课程设计

---------

机电汽车工程学院

同组成员:(机091-1) 姓名(学号):

第17篇:单片机课程设计

单片机课程设计_报警器 报警器 ORG 0010H START:MOV DPTR,#TAB CLR P3.1 SETB P1 MOV A,P1 CPL A ANL A,#0F0H SWAP A MOV R0,A LCALL DISP1 MOV A,P1 CPL A ANL A,#0FH MOV R1,A LCALL DISP2 GWPD:CJNE R0,#00H,GWJ1 CJNE R1,#00H,SWJ1 LCALL DISP1 LCALL DISP2 LCALL BJ SWJ1: LCALL YSLMIN MOV R0,#09H LCALL DISP1 DEC R1 LCALL DISP2 GWJ1: LCALL YSLMIN DEC R0 LCALL DISP1 LJMP GWPD DISP1:MOV A,R0 MOVC A,@A+DPTR MOV P2,A RET DISP2:MOV A,R1 MOVC A,@A+DPTR MOV P0,A RET YSLMIN:MOV R7,#60 MOV R6,#10 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#03H SETB TR0 LOOP:JBC TF0,DONE SJMP LOOP DONE:MOV TL0,#0B0H MOV TH0,#03CH CJNE R7,#00H,SIX MOV R7,#60 SIX:DJNZ R6,LOOP DJNZ R7,LOOP RET BJ:MOV TMOD,#11H MOV TH1,0FH MOV TL1,0CH SETB TR1 LOOP1:JBC TF1,LOOP2 SJMP LOOP1 LOOP2:MOV TH1,#0FFH MOV TL1,#0C0H CPL P3.1 SJMP LOOP1 RET TAB:DB 0C0H,0F9H,0A4H DB 0B0H,099H,092H DB 082H,0F8H,080H DB 090H END

第18篇:单片机课程设计

设计题目: 单片机课程设计

学生姓名:

院: 电气与信息工程学院

级: 电子111班 指导教师:

日 期: 2014年9月20日

一、课程设计目的:

了解电子元器件的功能与原理,掌握单片机的结构和原理,学会使用单片机应用开发技术的相关软件如 keill、STC_ISP_V394等,能够使用c语言的语言编程简单的功能。

二、设计的思想:

利用所提供的单片机和开发板的原理图用keill软件编程程序以实现一些功能。然后用STC_ISP_V394 .exe软件将编译完全正确的程序生成的hxe文件下载到开发板上,再调试编译的程序能否实现其所设计的功能。

1、对蜂鸣器的了解:

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,它由振荡器、电磁线圈、磁铁、振动膜片及外壳组成,接通电源后,振荡器产生的音频信号由电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性的振动发声。

2、设计:

我们所使用的开发板实物图如图一,单片机对右上角蜂鸣器的控制是加入三极管接入vcc,单片机的第22引脚和负极上,以此来控制蜂鸣器工作。单片机我们选择STC89C52RC+1602液晶来实现对蜂鸣器的控制及显示所需要的信息。

图一 调试说明:

首先用Keil软件创建一个工程,将程序源代码输入并编译生成单片可执行的.hex文件。 其次,打开单片机实践板的电源,接好串口线,用STC-ISP烧录软件,将.hex文件烧录入单片机中。程序下载完毕后,单片机会自动执行程序功能。最后,观察程序功能的执行情况,看是否达到了设计要求。

如果单片机实践板硬件电路的执行结果与设计结果一致,则说明设计过程及流程没有问题,完全符合设计要求。否则,先检查单片机实践板的硬件电路是否完好,是否有断点、漏焊、虚焊以及元器件是否完好等情况,排除故障重新连接后重新进行调试。如果仍然无法正

常实现,则说明程序编写有误,需要认真检查程序流程,然后经过反复的修改与调试排除故障,实现设计要求的各项功能。 编译和烧写该程序到单片机:

(1)用Keil编译上面的代码,并设置产生16进制代码文件*.hex.(2 )用专用下载线,连接好实验板和电脑串口(DB9) (2)运行hex文件烧写软件STC_ISP_V394.exe

选单片机的型号,并打开编译产生好的hex文件

点击下载,给开发板上电。

3、实现的功能:使用单片机将歌曲《八月桂花》的调子通过蜂鸣器播放出来,用1602液晶将想要表达的信息有步骤地显示在液晶显示屏上,并且调子与显示内容可以任意通过修改的程序烧录到单片机内,实现设计产品的使用性与灵活性。

三、实验程序:

/************************************************************************

[主题] C51音乐程序《八月桂花》

[功能]

通过单片机演奏音乐,显示一些内容

/**********************************************************************/

#include

#include

//本例采用89C52, 晶振为11.0592MHZ

//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.

//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;

//所以拿出谱子, 试探编吧!

unsigned char i=0; sbit Beep = P2^7 ;

unsigned char p,m;

//m为频率常数变量

unsigned char n=0; //n为节拍常数变量

unsigned char code music_tab[] ={

0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,

0x20, 0x40, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x10,

0x1C, 0x10, 0x18 , 0x40,

0x1C, 0x20, 0x20 , 0x20,

0x1C, 0x20, 0x18 , 0x20,

0x20, 0x80, 0xFF , 0x20,

0x30, 0x1C, 0x10 , 0x18,

0x20, 0x15, 0x20 , 0x1C,

0x20, 0x20, 0x20 , 0x26,

0x40, 0x20, 0x20 , 0x2B,

0x20, 0x26, 0x20 , 0x20,

0x20, 0x30, 0x80 , 0xFF,

0x20, 0x20, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x20, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x20, 0x15 , 0x20,

0x1C, 0x20, 0x20 , 0x20,

0x26, 0x40, 0x20 , 0x20,

0x2B, 0x20, 0x26 , 0x20,

0x20, 0x20, 0x30 , 0x80,

0x20, 0x30, 0x1C , 0x10,

0x20, 0x10, 0x1C , 0x10,

0x20, 0x20, 0x26 , 0x20,

0x2B, 0x20, 0x30 , 0x20,

0x2B, 0x40, 0x20 , 0x15,

0x1F, 0x05, 0x20 , 0x10,

0x1C, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x20, 0x15 , 0x20,

0x1C, 0x20, 0x20 , 0x20,

0x26, 0x40, 0x20 , 0x20,

0x2B, 0x20, 0x26 , 0x20,

0x20, 0x20, 0x30 , 0x30,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x40, 0x1C , 0x20,

0x20, 0x20, 0x26 , 0x40,

0x13, 0x60, 0x18 , 0x20,

0x15, 0x40, 0x13 , 0x40,

0x18, 0x80, 0x00

};

void int0() interrupt 1

//采用中断0 控制节拍

{ TH0=0xd8;

TL0=0xef;

n--;

}

void delay (unsigned char m)

//控制频率延时

{

unsigned i=3*m;

while(--i);

}

void delayms(unsigned char a) //豪秒延时子程序

{

while(--a);

//采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!

}

typedef unsigned char BYTE; typedef bit BOOL;

sbit LCD_RS = P2^0;

sbit LCD_RW = P2^1; sbit LCD_EP = P2^2;

BYTE code dis1[] = {\"

WLCOME TO

\"}; BYTE code dis2[] = {\"

DanPianJi \"}; BYTE code dis3[] = {\"

111iZnaiD

\"}; BYTE code dis4[] = {\"

eiXeiX \"};

delays(int ms) {

// 延时子程序 int i; while(ms--) {

for(i = 0; i

{

_nop_();

_nop_();

_nop_();

_nop_();

} } }

BOOL lcd_bz() {

// 测试LCD忙碌状态 BOOL result; LCD_RS = 0; LCD_RW = 1; LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (BOOL)(P0 & 0x80); LCD_EP = 0; return result; }

lcd_wcmd(BYTE cmd) {

while(lcd_bz()); LCD_RS = 0; LCD_RW = 0; LCD_EP = 0; _nop_(); _nop_(); P0 = cmd; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 0;

}

lcd_pos(BYTE pos) {

lcd_wcmd(pos | 0x80);

// 写入指令数据到LCD //设定显示位置

}

lcd_wdat(BYTE dat)

{

//写入字符显示数据到LCD while(lcd_bz()); LCD_RS = 1; LCD_RW = 0; LCD_EP = 0; P0 = dat; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 0; }

lcd_init() {

lcd_wcmd(0x38);

delays(1); lcd_wcmd(0x0c);

delays(1); lcd_wcmd(0x06);

delays(1); lcd_wcmd(0x01);

delays(1); }

void main()

{

BYTE j;

lcd_init();

delays(10);

//LCD初始化设定

//16*2显示,5*7点阵,8位数据//显示开,关光标 //移动光标 //清除LCD的显示内容

// 初始化LCD

lcd_wcmd(0x06);

//向右移动光标

lcd_pos(0);

//设置显示位置为第一行的第1个字符

j = 0;

while(dis1[ j ] != \'\\0\')

{

//显示字符\"Welcome TO\"

lcd_wdat(dis1[ j ]);

j++;

delays(30);

//控制两字之间显示速度

}

lcd_pos(0x40);

j = 0;

while(dis2[ j ] != \'\\0\')

{

lcd_wdat(dis2[ j ]);

j++;

delays(30);

}

delays(800);

lcd_wcmd(0x01);

delays(1);

lcd_wcmd(0x04);

lcd_pos(15);

j = 0;

while(dis3[ j ] != \'\\0\')

{

lcd_wdat(dis3[ j ]);

j++;

delays(30);

}

lcd_pos(0x4F);

j= 0;

while(dis4[ j ] != \'\\0\')

{

lcd_wdat(dis4[ j ]);

j++;

delays(30);

}

delays(800);

//设置显示位置为第二行第1个字符 //显示字符\" DanPianJi \"

//控制两字之间显示速度

//控制停留时间

//清除LCD的显示内容

//向左移动光标

//设置显示位置为第一行的第16个字符

//显示字符\"DianZi111\"

//控制两字之间显示速度

//设置显示位置为第二行的第16个字符//显示字符\" XieXie \"

//控制两字之间显示速度

//控制停留时间

TMOD&=0x0f;

TMOD|=0x01;

TH0=0xd8;TL0=0xef;

IE=0x82;

play:

while(1)

{

a: p=music_tab[i];

if(p==0x00)

{ i=0, delayms(1000); goto play;}

//如果碰到结束符,延时1秒,回到开始再来一遍

else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;} //若碰到休止符,延时100ms,继续取下一音符

else

{m=music_tab[i++], n=music_tab[i++];} //取频率常数 和 节拍常数

TR0=1;

//开定时器1

while(n!=0) Beep=~Beep,delay(m);

//等待节拍完成, 通过P1口输出音频(可多声道哦!)

TR0=0;

//关定时器1

}

}

四、电路图的protue仿真

五、单片机课程设计心得体会:

这个学期的单片机课已经早早的上完了,但是理论纯属理论,没有与实践的结合总让我们学的不踏实,感觉没有达到学以致用的效果。所庆幸的是在课程介绍考试完之后,老师给我们安排了这次单片机课程设计,给了我们学以致用的做好的实践

关于这次课程设计,我们花费了比较多的心思,既是对课程理论内容的一次复习和巩固,还让我们丰富了更多与该专业相关的其他知识,比如软件应用等,在摸索中学习,在摸索中成长,在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获,在真正设计之前我们做了相当丰富的准备,首先巩固一下课程理论,再一遍熟悉课程知识的构架,然后结合加以理论分析、总结,有了一个清晰的思路和一个完整的的软件流程图之后才着手设计。在设计程序时,我们不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;养成注释程序的好习惯是非常必要的,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也能为资料的保存和交流提供了方便;我觉得在设计课程过程中遇到问题是很正常,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计又出错了。

除了对此次设计的准备工作之外,我们还学到了很多平时难得的东西,首先是团队协作,在这次设计当中,难免和同学产生观点和意见的分歧,以及分工明细、时间安排等不合理,通过这次设计,我们体会到了团结合作的重要性及力量之强大,还有让我们处理事情更加有条理,思路更加清晰明了了,发现、提出、分析、解决问题和实践能力的提高都将受益于我在以后的学习、工作和生活中。

除了对此次设计的准备工作之外,我们还学到了很多平时难得的东西,首先是团队协作,在这次设计当中,难免和同学产生观点和意见的分歧,以及分工明细、时间安排等不合理,通过这次设计,我们体会到了团结合作的重要性及力量之强大,还有让我们处理事情更加有条理,思路更加清晰明了了,发现、提出、分析、解决问题和实践能力的提高都将受益于我在以后的学习、工作和生活中。

第19篇:单片机课程设计

分类号

编号

烟 台 大 学

课 程 设 计

基于单片机8051的密码锁控制

系:

机电学院

业:

机械设计制造及其自动化

名:

号:

2010年

7 月 6 日

0

目录

第一章:引言·················2 第二章:方案设计···············3

1、方案论证与比较 ············3

2、单片机8051·············· 4 第三章:电路原理分析与设计··········7

1、开锁机构 ···············7

2、按键电路及LCD设计 ··········7

3、掉电存储单元设计 ···········14

4、密码锁电源电路设计 ··········14

5、设计总框图 ··············16

6、整体程序设计和程序流程图 ·······16

第四章:程序设计 ··············17

第五章:调试、测试分析及结果 ········35 第六章:小结 ················35 参考文献 ·················36

第一章、引言

目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着cmos化、低功耗、大容量、高性能、低价格和外围电路内装化等方向发展。下面是单片机的 主要发展方向

今年,由于chmos技术的进步,大大的促进了单片机的cmos化。Cmos除了低功耗外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。Cmos电路的特点是低功耗、大容量、高性能、低价格。采用双极型半导体工艺的ttl电路速度快、但功耗低和芯片面积大。

单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。以前必须由模拟电路或数字电路实现的大部分功能,现在可以用单片机通过软件方法来实现。这种软件代替硬件的控制技术也称为传统控制的一次革命

单片机自二十世纪七十年代问世以来,以其极高的性能价格比受到人们的重视和关注,应用广泛,发展快。由于其的优点多而突出,所以其的应用领域极广,几乎到了无孔不入的地步。在我国广泛的应用于工业自动化控制、自动检测、智能仪表、智能家用电器、航空航天系统和国防军事、尖端武器等各个方面。可以采用软硬件结合的办法提高系统的性能的控制技术为微控技术。

LCD 液晶显示器是 Liquid Crystal Display 的简称,是20世纪70年代初发展起来的一种液晶显示器。随着技术的发展其的分辨率、屏幕发光颜色等进入批量化合实用化。

随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。

第二章:设计方案

本次设计我组采用液晶显示lcd,按键采用4*4键盘矩阵、8051单片机。本系统由单片机系统、矩阵键盘、lcd显示和报警系统。系统可以完成开锁、密码错误报警、修改用户密码、管理员解密基本的密码锁功能。除上述功能,还应具有掉电存储,声光提示等功能。依据实际情况还可以添加遥控功能。本系统成本低廉,功能可靠实用。

设计本课题时构思了两种方案:一种是用以8051为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,所以本文采用前一种方案。

1、方案论证与比较

方案一:采用数字电路,其原理方框图如图1

图2-1 数字密码锁电路方案

采用数字密码锁电路的好处就是设计简单。用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若输入密码错误报警防止他人的非法操作。 电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。

密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路。 方案二:采用一种是用以8051为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声 3

光提示甚至添加遥控控制功能。其原理如图1-2所示。

图2-2单片机控制方案

通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。

2、单片机8051 1>、芯片8051有40条引脚,共分为端口线、电源线和控制线三类 ·4并行I/O端口,每个端口有8条端口线,用于传送数据、地址。 ·可编程串行通道

·5个中断源

·低功耗的闲置和掉电方式 ·两个16位定时器、计数器 ·片内振荡器和时钟脉冲 ·4K内部RoM ·128内部RaM

2>、管脚说明

1)、、主电源引脚VCC和VSS VCC——(40脚)接+5V电压; VSS——(20脚)接地。

2)、外接晶体引脚XTAL1和XTAL2 XTAL1(19脚)接外部晶体的一个引脚。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部振荡器时,对HMOS单片机,此引脚应接地;对CHMOS单片机,此引脚作为驱动端。

XTAL2(18脚)接外晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的输出端。采用外部振荡器时,对HMOS单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对XHMOS,此引脚应悬浮。

3)、控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP ①RST/VPD(9脚)当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机复位。推荐在此引脚与VSS引脚之间连接一个约8.2k的下拉电阻,与VCC引脚之间连接一个约10μF的电容,以保证可靠地复位。VCC掉电期间,此引脚可接上备用电源,以保证内部RAM的数据不丢失。当VCC主电源下掉到低于规定的电平,而VPD在其规定的电压范围(5±0.5V)内,VPD就向内部RAM提供备用电源。

②ALE/PROG(30脚):当访问外部存贮器时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1/6。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。ALE端可以驱动(吸收或输出电流)8个LS型的TTL输入电路。

对于EPROM单片机(如8751),在EPROM编程期间,此引脚用于输入编程脉冲(PROG)。

③PSEN(29脚):此脚的输出是外部程序存储器的读选通信号。在从外部程序存储器取指令(或常数)期间,每个机器周期两次PSEN有效。但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不出现。PSEN同样可以驱动(吸收或输出)8个LS型的TTL输入。

④EA/VPP(引脚):当EA端保持高电平时,访问内部程序存储器,但在PC(程序计数器)值超过0FFFH(对851/8751/80C51)或1FFFH(对8052)时,将自动转向执行外部程序存储器内的程序。当EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器。对于常用的8031来说,无内部程序存储器,所以EA脚必须常接地,这样才能只选择外部程序存储器。

对于EPROM型的单片机(如8751),在EPROM编程期间,此引脚也用于施加21V的编程电源(VPP)。

4)、输入/输出(I/O)引脚P0、P

1、P

2、P3(共32根)

①P0口(39脚至32脚):是双向8位三态I/O口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个LS型的TTL负载。

②P1口(1脚至8脚):是准双向8位I/O口。由于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。P1口能驱动(吸收或输出电流)4个LS型的TTL负载。对80

52、8032,P1.0引脚的第二功能为T2定时/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。对EPROM编程和程序验证时,它接收低8位地址。

③P2口(21脚至28脚):是准双向8位I/O口。在访问外部存储器时,它可以作为扩展电路高8位地址总线送出高8位地址。在对EPROM编程和程序验证期间,它接收高8位地址。P2可以驱动(吸收或输出电流)4个LS型的TTL负载。

④P3口(10脚至17脚):是准双向8位I/O口,在MCS-51中,这8个引脚还用于专门功能,是复用双功能口。P3能驱动(吸收或输出电流)4个LS型的TTL负载。 作为第一功能使用时,就作为普通I/O口用,功能和操作方法与P1口相同。

作为第二功能使用时,各引脚的定义如表所示 。

值得强调的是,P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。 表 P3各口线的第二功能定义

口线 引脚 第二功能

P3.0 10 RXD(串行输入口) P3.1 11 TXD(串行输出口) P3.2 12 INT0(外部中断0) P3.3 13 INT1(外部中断1)

P3.4 14 T0(定时器0外部输入) P3.5 15 T1(定时器1外部输入) P3.6 16 WR(外部数据存储器写脉冲) P3.7 17 RD(外部数据存储器读脉冲)

2>、MCS-51单片机的片外总线结构

综合上面的描述可知,I/O口线都不能当作用户I/O口线。除8051/8751外真正可完全为用户使用的I/O口线只有P1口,以及部分作为第一功能使用时的P3口。如图,是MCS-51单片机按引脚功能分类的片外总线结构图。

由图我们可以看到,单片机的引脚除了电源、复位、时钟接入,用户I/O口外,其余管脚是为实现系统扩展而设置的。这些引脚构成MCS-51单片机片外三总线结构,即:

①地址总线(AB):地址总线宽为16位,因此,其外部存储器直接寻址为64K字节,16位地址总线由P0口经地址锁存器提供8位地址(A0至A7);P2口直接提供8位地址(A8至A15)。

②数据总线(DB):数据总线宽度为8位,由P0提供。

③控制总线(CB):由P3口的第二功能状态和4根独立控制线RESET、EA、ALE、PSEN组成。 下表列出各个子系列的配制情况供读则参考。

芯片种类 片内存储器 中断源 定时/计数器 串行口 电源消耗(mA) 制造工艺 ROM/EPROM RAM 8051(8751,8031) 4K 128 5 2 同、异步方式,8位或10位可程序控制 125 HMOS 8052(8752,8032) 8K 256 6 3 同、异步方式,8位或10位可程序控制 100 HMOS 80C51(87C51,80C31) 4K 128 5 2 同、异步方式,8位或10位可程序控制 24 CHMOS 80C52(87C52,80C32) 8K 256 7 3 同、异步方式,8位或10位可程序控制 24 CHMOS 8044(8744,8344) 4K 192 5 2 S.L.U 200 HMOS 3>、控制部件

控制部件是单片机的神经中枢,它包括时钟电路、复位电路、指令寄存器、译码以及信息传送控制部件。它以主振频率为基准发出CPU的时序,对指令进行译码,然后发出各种控制信号,完成一系列定时控制的微操作,用来控制单片机各部分的运行。其中有一些控制信号线能简化应用系统外围控制逻辑,如控制地址锁存的地址锁存信号ALE,控制片外程序存储器运行的片内外存储器选择信号EA,以及片外取指信号PSEN

第二章、电路原理分析与设计

1、开锁机构

通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。其原理如图2-1所示。密码锁开锁机构示意图如下图:

图3-1密码锁开锁机构示意图

当用户输入的密码正确输入的时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。其实际电路如下图3-2所示。

2、按键电路设计

1、

键盘应用4x4组成的0-9数字键及确认键和功能键。用LCD液晶显示器显示,当密码输入时直接显示,当密码输入完毕按下确认键时对输入的密码和设定的密码比较,若正确则开门,此处用led发光二极管做一秒种提示,同时发出“叮咚”声;若不正确,则发出“滴滴”报警声。

键盘设计采用行列式键盘,同事可以减少键盘与单片机接口时占用的I/O线的数目,在按键比较多的时候通常采用该方法。其原理图如图3-3

每一条行线与列线的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可以组成NXM个按键的键盘

在该行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。

当确认有按键按下后,下一步要识别哪个按键按下。对按键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是先反转法。应要求我们采用第一种方案。

逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。

1>、判断键盘中有无键按下 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

2>、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

按键的操作面板如图3-4所示,共计数字键10个,功能键6个,另外有指示灯一个、LCD液晶显示器一个和蜂鸣器一个。

图3-4按键操作面板示意图

10个数字键用来输入密码,另外六个功能键分别是:CLR\\E、EN、A、B、F

1、F2。其中CLR键的功能是当输入密码错误时,清除前面输入的数据,从新输入。EN键的功能是确认密码。A设置新密码B输入数字密码并检查。F1用作电铃键,F2用来关闭显示器。

2、LCD显示器的基本结构和原理

2>、LCD显示电路d3d2d19LED09LED19LED29LED39LED49bcpbcpbcpbcpbcpbcpYdYdYdYdYdYdPagPagPagPagPagPagDdDdDdDdDdDdfefefefefefeppppppabcdefgdabcdefgdabcdefgdabcdefgdabcdefgdabcdefgdHEADER2vcc12345678123456781234567812345678123456781234567821012301230123012301230123345611113456111134561111345611113456111134561111HEADER1012345670123456701234567QQQQQQQQIC1QQQQQQQQIC2QQQQQQQQIC3012345670123456701234567QQQQQQQQIC4QQQQQQQQIC5QQQQQQQQ12KKKKKKLRLRLRLRLRLRABCMABCMABCMABCMABCMABCM128912891289128912891289C

IC6LED5

LCD模组是由控制器,驱动器,显示器三部份所组成,而目前市面上LCD的模组驱动/控制器都是由日制的HD44780控制器晶片(或是相容产品),因此外部接脚的功能也都相同,这个控制器的内部共有80 个位元组可供储存由外部送进来的资料,因此使用此款控器的LCD模组最多一次可显示80个字HD44780中储存显示资料的80个位元组,称之为Display DataRAM(DDRAM),DDRAM 的位址从00H~67H,共80个Byte。在LCD 上Show 出资料DDRAM 位址与可供显示位置的对应图

至于CPU 如何将资料送给LCD 显示的方法,是将欲显示的字元的ASCII 码写到LCD内部的DDRAM,LCD就会将这个自在其对应的位置显示出来.例如,若想在LCD 的左上角处(位址00h),显示’A’.就将ASCII码-41H,送到DDRAM 的00H 位址.例:

第二节 LCD 的接脚规格

虽然LCD 的接脚因制造厂商的不同而排列方式有所不同,不过都是编号由1 至14,的14 根接脚。

LCD 模组内只有2 个8 位元暂存器,称为指令暂存器(Instruction Register IR),和资料暂存器(Data Register, DR),他们都是8 位元暂存器,由RS 脚来选 用

指令暂存器IR 用来接收单片机送来的命令,例如清除显示,或功能设定等等…资料暂存器DR则用来接收单片机要写到DDRAM(共80Byte)或CGRAM(共64Byte)的资料缓冲区。当单片机写到DR 暂存器之后。LCD 内部的控制电路会将资料自动写到DD RAM或 CG RAM中,而位址是由LCD内部的位址计数器(Addre CounterAC)所指定。而单片机要读取资料时,需先将欲读取的位址放入IR 暂存器中,LCD 就会将其内容放入DR中,然后单片机就可以去读取DR 的资料。

图表、LCD 模组写入时序

图表、LCD 模组读出时序图

3、掉电存储单元设计

掉电存储单元的作用是在电源断开的时候,存储当前设计的单价信息。AT24C02是ATMEL公司的2KB字节的电源可檫除存储芯片,采用两线串行的总线和单片机通讯,电压 14

最低可为2.5V,额定电流为1mA,静态电流10UA,芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装。如图3-5示

图3-5 掉电存储单元电路原理图

图中R

8、R10是上拉电阻,其作用是减少AT24C02的静态功耗,由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据、地址)与单片机传送。

每当设定一次掉电,系统自动调用存储程序,将信息存储在芯片内;当系统重新上电时自动调用读存储器程序,将存储器中的信息读到缓存单元中,供主程序使用。

4、密码锁电源电路设计

为防止停电情况的发生,本电路备有UPS电源,它包含市电供电电路,停电检测电路,电子开关切换电路,蓄电池充电电路和蓄电池组成。电源电路图如图示

图3-6市供电电路

220V市电通过变压器降压成12V的交流电,再经整流桥式整流,7805稳压到5V送往电子切换电路,由于本电路功耗少,所以选10W的小型变压器。

由R

6、R

7、R

8、R9及IC14构成比较电压器,正常情况下,V+V-IC14输出高电平,由T

3、T4构成的达林顿管使继电器J开启,将其常开触点把蓄电池和电路相连,实现市电与蓄电池的切换,保证电子密码锁的正常工作。电路图如3-7所示

图3-7停电检测及电子开关切换电路

T

1、T2构成的蓄电池自动充电电路,其在充电池充满后自动停止充电,其中D1亮为正在充电,D2为工作指示。其电路图如图3-8所示

5、总框图设计

6、整体程序设计和程序流程图

1>、程序分为主程序和中断服务程序两个主要部分,主程序完成变量和单片机特殊功能寄存器的初始化后,进入一个循环结构。在循环中,首先判断有无按键按下,若有则判断是数字键还是功能键,根据按键的情况执行相应的功能。然后根据密码是否正确的判断情况,执行相应的操作。循环中最后需要显示的内容通过动态扫描子在液晶显示器上显示。中断服务程序需要实现待机计时5秒。

单片机采用MCS51系列的单片机8051作为主要主控制器,外围电路器件包括液晶显示驱动、蜂鸣器的驱动输出、独立式键盘和发光二极管的输出等。

2>、程序主要包括以下几个模块

1)、主程序模块——主要完成初始化、设置中断向量、检查有无按键按下、以及调用显示等等。

2)、键盘扫描及识别子程序——键盘采用查询方式,放于主程序中,当没有按键按下时,单片机循环主程序,当按键按下时便转向相应的子程序处理,处理结束后返回。

3)、掉电存储服务程序——当比较密码的时候,需要读取AT24C02程序,将存储于芯片内的数据读到RAM中,然后和输入密码相比较,当修改密码时需要把密码保存于AT24C02中。

4)、显示子程序——包括关闭状态显示子程序(dis-A)、开锁状态显示子程序(DIS-B)、密码输入及修改状态显示子程序(DIS-C)、密码输入错误报警状态子程序(DIS-D).

3、程序流程图

第四章、程序设计

1#include #define uint unsigned int #define uchar unsigned char void key_scan(); uchar count0,count1,count3,num,n=0,temp,a,j,count4; uchar mima[4];

//初始密码存储区 uchar tab_key[50];

//输入密码存储区 uchar code table[]={

0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; bit enterflag;

//确认键按下与否的标志 bit mimaflag;

//密码正确与否的标志 bit xiugaiflag;

//修改密码标志

bit enter1flag;

//修改密码确认键标志

sbit red=P3^7; sbit bell=P3^6; sbit rs=P2^0; sbit rw=P2^1; sbit lcden=P2^2; sbit alarm_out=P3^2; sbit scl=P3^4; sbit sda=P3^5; uchar code table1[]=\"input the paco\"; uchar code table2[]=\"de:

--------\"; uchar code table3[]=\"*\"; uchar code table4[]=\"right

(^_^)

\"; uchar code table5[]=\"error!!!!\"; uchar code table6[]=\"define the pac\"; uchar code table7[]=\"ode:

--------\"; uchar code table8[]=\"code

is

new\"; //******************************键盘消抖函数******************************* void delay1() { ;; } void delay2(uchar x) { uchar a,b; for(a=x;a>0;a--)

for(b=100;b>0;b--); }

void delay(uint z) { uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); }

//****************************e^2room的初始化*******************************

void start() //开始信号 {

sda=1; delay1(); scl=1; delay1(); sda=0; delay1(); }

void stop()

//停止 { sda=0; delay1(); scl=1; delay1(); sda=1; delay1(); } //****************************应答信号************************************* void respond()

{ uchar i; scl=1; delay1(); while((sda==1)&&(i

temp=temp

//保持最高位,左移到进位CY

scl=0;

delay1();

sda=CY;

delay1();

scl=1;

delay1(); } scl=0; delay1(); sda=1;//总线释放

delay1(); } //*******************************读字节操作函数***************************** uchar read_byte() { uchar i,k; scl=0; delay1(); sda=1; delay1(); for(i=0;i

scl=1;

delay1();

k=(k

//或运算,放到最低位

scl=0;

delay1();

} return k; } //**********************************写地址函数****************************** void write_add(uchar addre,uchar date) { start(); write_byte(0xa0); respond(); write_byte(addre); respond(); write_byte(date); respond(); stop(); } //*******************************读地址函数************************************* uchar read_add(uchar addre) { uchar date; start();

21

write_byte(0xa0); respond(); write_byte(addre); respond(); start(); write_byte(0xa1); respond(); date=read_byte(); stop(); return date; } //****************************LCD1602的初始化******************************* void write_com(uchar com) { rs=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; }

void write_date(uchar date) { rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; }

//***************************************密码比较函数******************************** bit mimacmp()

{ bit flag; uchar i; for(i=0;i

{

if(mima[i]==tab_key[i])

22

flag=1;

else

{

flag=0;

i=4;

}

} return(flag);

//返回flag }

////**********************************LCD显示函数开始************************************** void lcd_display() { uchar i=0; write_com(0x80+0x40+4); for(i=0;i

//****************************************键盘功能分配函数群开始**************************** //** 0 ** 1 **2 ** 3**

//** 4** 5** 6 **7 ** //**8** 9** 确认(en)

//**清除(clr)**修改密码键(a)

void key_manage1() { tab_key[n]=0; n++; if(xiugaiflag==1) { mima[count4]=0; count4++; } }

23 void key_manage2() {

tab_key[n]=1; n++; if(xiugaiflag==1) { mima[count4]=1; count4++; } }

void key_manage3() {

tab_key[n]=2; n++; if(xiugaiflag==1) { mima[count4]=2; count4++; } }

void key_manage4() { tab_key[n]=3; n++; if(xiugaiflag==1) { mima[count4]=3; count4++; } }

void key_manage5() { tab_key[n]=4; n++; if(xiugaiflag==1) { mima[count4]=4;

24 count4++; } }

void key_manage6() { tab_key[n]=5; n++; if(xiugaiflag==1) { mima[count4]=5; count4++; } } void key_manage7() { tab_key[n]=6; n++; if(xiugaiflag==1) { mima[count4]=6; count4++; } } void key_manage8() { tab_key[n]=7; n++; if(xiugaiflag==1) { mima[count4]=7; count4++; } }

void key_manage9() { tab_key[n]=8; n++; if(xiugaiflag==1) { mima[count4]=8;

25

count4++; } } void key_manage10() { tab_key[n]=9; n++; if(xiugaiflag==1) { mima[count4]=9; count4++; } } //**********************************确认键**************************************************************

void key_manage11() { enterflag=1;

//确认键按下

if(n==4)

//只有输入4个密码后按确认才做比较

mimaflag=mimacmp(); else

mimaflag=0;

if(enterflag==1)

{

enterflag=0;

n=0;

//用FFFF清除已经输入的密码

for(count3=0;count3

{

delay(5);

tab_key[count3]=0x0f;

}

TR1=1;

//打开计数器1

count1=0;

//定时器1由50MS累计到1S所用的计数器

if(mimaflag==1)

{

a=0;

write_com(0x01);

write_com(0x80);

for(count3=0;count3

26

{

write_date(table4[count3]); //密码正确,显示RIGHT,绿灯亮

delay(5);

}

}

else

{

n=0;

red=0;

bell=0;

a++;

if(a==1)

{

for(count3=0;count3

{

delay(5);

tab_key[count3]=0x0f;

}

write_com(0x01);

write_com(0x80);

for(count3=0;count3

{

write_date(table5[count3]); //密码错误,显示

error,红灯亮

{ alarm_out=0; //报警灯亮

pw_error=0; //密码错误指示灯亮

audio_out=0; //长鸣声报警

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

audio_out=1;

//-------------

TR1=1;

//打开定时器计时

cnt_state=2; //下一状态处于15秒计时的状态

}

delay(5);

27

}

TR1=0;

}

} } } void key_manage12() { tab_key[n]=11; n++;

//密码计数清零

} //****************************************************取消键********************************************

void key_manage13() {

n=0;

//密码计数清零

write_com(0x80);

//指针所指位置 for(count3=0;count3

//用FFFF清楚已经输入的密码 }

} //*******************************************修改密码键********************************** void key_manage14() { uchar aa=0; n=0; xiugaiflag=1;

28

write_com(0x01); write_com(0x80); for(count3=0;count3

//用FFFF清楚已经输入的密码 } write_com(0x80+0x40); for(count3=0;count3

//用FFFF清楚已经输入的密码

} write_com(0x01); write_com(0x80); for(count3=0;count3

write_date(table11[count3]);

delay(100); } TR1=1; count1=0; } } void key_manage16()

29

{ tab_key[n]=15; n++; }

//****************************************定时器1的50MS,共延时1秒***************************** void time_1() interrupt 3 {

TH1=(65536-50000)/256; TL1=(65536-50000)%256; if(count1

count1++; } else

//计时到1S {

TR1=0;

count1=0;

mimaflag=0;

red=1;

bell=1;

//显示FFFF

write_com(0x01);

write_com(0x80);

for(count3=0;count3

{

write_date(table1[count3]); //显示PASSWORD A OR B KEY

delay(5);

}

write_com(0x80+0x40);

for(count3=0;count3

{

write_date(table2[count3]); //开机显示FFFF

delay(5);

} } } //***********************************************定时0**********************************************

30

void time_0() interrupt 1 {

TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(count4

//初始化函数 void init() {

uchar i; lcden=0; write_com(0x38);

//打开显示模式设置

write_com(0x0c);

//打开显示,光标等等设置未零

write_com(0x06);

//当读或写一个字符后地址指针加一,且光标加一,当写一个字符后整频显示左移,

write_com(0x01);

//清零指令

write_com(0x80);

//指针所指位置

//定时器初始化

TMOD=0x11;

//T0,T1工作方式1 TH0=(65536-2000)/256; TL0=(65536-2000)%256;

//T0初始化2MS

TH1=(65536-50000)/256; TL1=(65536-50000)%256;

//T1初始化50MS

TR1=0; ET1=1; EA=1; TR0=0; ET0=1;

31

count0=0;

//初始没有密码输入,故为零

enterflag=0;

//没有确认键按下

mimaflag=0;

//密码正确与否键先置零

red=1;

//红灯不亮

//************密码存入EPROM中********************************** sda=1; delay(5); scl=1; delay(5); for(i=0;i

write_add(i,8);

delay2(100); } for(i=0;i

mima[i]=read_add(i);

delay(5); } } void main() { rw=0;

init(); write_com(0x80);

//指针所指位置

for(count3=0;count3

write_date(table1[count3]); //第一行显示INPUT THE PASSPORD:

delay(5); } write_com(0x80+0x40); for(count3=0;count3

write_date(table2[count3]); //开机显示FFFF

delay(5); } while(1) {

key_scan();

//调用键盘扫描函数

lcd_display();

32

}

} //**************************************************键盘扫描函数开始******************************** void key_scan() { //**********扫描第一行********* P1=0xfe; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { temp=P1; switch(temp) { case 0xee: key_manage1(); break;

case 0xde: key_manage2(); break;

case 0xbe: key_manage3(); break;

case 0x7e: key_manage4(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } }

33

//**************************************************扫描第二行*********************************** P1=0xfd; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { temp=P1; switch(temp) { case 0xed: key_manage5(); break;

case 0xdd: key_manage6(); break;

case 0xbd: key_manage7(); break;

case 0x7d: key_manage8(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } //*********************************************扫描第三行*********************************** P1=0xfb; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100);

34

if(temp!=0xf0) { temp=P1; switch(temp) { case 0xeb: key_manage9(); break;

case 0xdb: key_manage10(); break;

case 0xbb: key_manage11(); break;

case 0x7b: key_manage12(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } }

//***************************************************扫描第四行**************************************** P1=0xf7; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { temp=P1; switch(temp) {

35

case 0xe7: key_manage13(); break;

case 0xd7: key_manage14(); break;

case 0xb7: key_manage15(); break;

case 0x77: key_manage16(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } }

** 0 ** 1 **2 ** 3**

** 4** 5** 6 **7 ** **8** 9**

第五章、调试连接与测试

硬件调试方案:在设计平台中,将单片机的P1.01-P1.7分别与8个独立式键盘通过插线连接起来,将P3.0-P3.3分别与LCD液晶显示器的4引脚连接起来,P3.4与蜂鸣器的输入连接起来。将编程输入软件调试。

第六章、小结

通过这两周的学习,我感觉有何人能打的收获:首先通过学习使自己对对课本是上的知识可以应用于实际,使得理论与实际相结合,加深自己对课本知识的更好理解,同时锻炼了我个人的动手能力;并且在图书馆和网络中查阅资料,增加了许多课外知识。能对所学的软件学以致用。在整个设计过程中懂得了许多东西,也培养了独立思考和设计的能力,树立了对知识的运用信心,并且提高了自己的动手实践操作能力,相信

36

会对以后的学习工作有很大的帮助!虽然本次设计做的不是很顺畅,但是设计过程中所学到的东西是这次最大的收获和财富,是我终身受益!!

参考文献

【1】 胡汉才,单片机原理及接口技术,北京:清华大学出版社2008.【2】 张齐,单片机应用系统设计技术-基于c语言编程.北京:机械工业出版社2006.【3】 赵常德,MCS-51/98单片机原理及应用.北京:机械工业出版社.1997.【4】 曹巧媛,单片机原理及应用.北京:电子工业出版社1998

37

第20篇:单片机课程设计

武汉理工大学单片机实训报告

第一章 绪论 .....................................................................................................................................2 1.1概述 ....................................................................................................................................2 1.2课程设计任务 .....................................................................................................................2 第二章硬件系统设计 .......................................................................................................................3 2.1单片机最小系统 .................................................................................................................3 2.1.1 STC89C52的介绍 .....................................................................................................3 2.1.2 stc89c52系列单片机最小系统的介绍 ...................................................................4 2.2矩阵键盘模块 .....................................................................................................................5 2.3数码管显示单元 .................................................................................................................5 2.4 LCD1602液晶显示电路 .....................................................................................................6 2.5蜂鸣器单元 .........................................................................................................................7 第三章 软件设计 .............................................................................................................................8 3.1数码管实验 .........................................................................................................................8 3.1.1循环数码管显示0—F程序设计结构图: ............................................................8 3.1.2 59秒倒计数流程图 ..............................................................................................9 3.2 矩阵键盘流程图 ..............................................................................................................10 3.3 LCD1602滚动显示年月日时分秒....................................................................................11 3.4 AD转换, .........................................................................................................................12 3.5家电遥控器 .......................................................................................................................13 第四章调试结果分析 .....................................................................................................................14 4.1数码管调试及分析 .........................................................................................................14 4.1.1循环数码管显示0—F ...........................................................................................14 4.1.2数码管59秒倒计数 ............................................................................................15 4.2矩阵键盘...........................................................................................................................15 4.3 LCD1602滚动显示年月日时分秒....................................................................................16 4.4 AD转换 .............................................................................................................................16 4.5家电遥控器 .......................................................................................................................17 第五章小结.....................................................................................................................................17 参考文献:.....................................................................................................................................18

武汉理工大学单片机实训报告

第一章绪论

1.1概述

随着我国工业技术和电子技术的发展和进步,自动控制技术也已经得到了极大的普及和应用,而这些自动控制技术的核心技术就是单片微型计算机,简称单片机。它以其高可靠性、高性价比、低电压、低功耗等一系列优点,被广泛应用于控制系统、数据采集等领域。而51单片机系列以其超高的性价比深受广大电子爱好者和开发者以及大学生群体的欢迎。故而本次课程设计采用STC89C52单片机。

1.2课程设计任务

必做项目(这是每个学生必做的任务):

1. 基本系统:在51单片机开发系统PCB电路板上完成电子元器件的焊接、调试、程序下载,并实现数码管显示、矩阵键盘扫描、中断程序、定时器程序、串口通讯等基本功能; 2. 显示功能:焊接电路并实现对1602液晶屏的显示功能,要求能滚动显示字符;

3. 输出控制:焊接电路并实现对继电器的控制功能;

4. 数据采集:焊接电路并实现对AD0832的数据采集功能; 选做项目(以下任选一):

1. 家电遥控器:实现对红外接收管和发射管的控制功能,要求能够学习遥控器的红外码,并能发射相应的编码,实现红外遥控器的功能。

2. 增强显示:实现光魔方的功能,要求搭建不少于8*8*4单元的光魔方,能够动态显示字符。

3. 空气质量监测:实现对室外空气PM2.5浓度测量,要求能够实时读取PM2.5模块数据计算浓度,并将结果显示在屏幕中,或者通过无线方式发送到PC机中显示,或者超过设定值启动电机模拟开关窗。

4. 入侵在线报警:要求通过采集远红外传感器数据,自动触发相机模块抓拍,照片发至PC或网络中。

5. 穿戴式设备控制:对陀螺仪传感器的数据采集和处理,要求能根据采集到的数据计算出传感器加速度值,识别基本动作触发继电器开合,模拟启动外部设备。

6. 智能台灯:根据环境光强度自动调节LED亮度,通过光敏元器件采集环境亮度,通过PWM方式控制LED灯亮度。定时自动开灯,设定开灯时间,到时间由暗逐渐变亮。通过门控检测夜晚有人回家时自动开启LED灯等功能。

7. 火灾在线探测:采集烟感/异味传感器数据,并进行判断有无火情,继而控制继电器动作同时通过无线发送信息到PC或网络中。

8. 智能门磁:设计门磁开关,一端安装门上,另一端安装在门框。读取霍尔传感器输出,确定门开合状态,并在门状态变化时发送提示信息到PC或者网络中。

9. 智能窗帘:根据光强变化、夜晚休息、人离开等多种条件自动开闭窗帘。可以设计导轨及电机控制机构。 10. 智能信息提示:每天早上自动搜集门户网站头条新闻、当天天气情况等,

武汉理工大学单片机实训报告

滚动显示在屏幕中。也可以将用户设定的提醒信息从PC机推送至单片机系统显示;也可以若置于门背,开门时显示重要提示信息。

上述无线方式包括WIFI,蓝牙,Zigbee,433M等多种

第二章硬件系统设计

2.1单片机最小系统 2.1.1 STC89C52的介绍

STC89C52是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制作技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。其引脚图如下图所示。

图2.1 STC89C52单片机

STC89C52RC引脚功能说明:

VCC(40引脚):电源电压 VSS(20引脚):接地

P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。

P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。

P2端口(P2.0~P2.7,21~28引脚):P2口的基本功能和P1端口相同。 P3端口(P3.0~P3.7,10~17引脚):P3口的基本功能和P1端口相同。

ALE/(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。

武汉理工大学单片机实训报告

2.1.2 stc89c52系列单片机最小系统的介绍

单片机最小系统是单片机工作的最简单电路,它由单片机、电源、晶体振荡器、复位电路等构成。它是本系统的处理单元也是控制单元,负责处理信号、外设的接口与控制,同时它也是所有软件的载体。对52单片机来说,最小系统一般应该包括:单片机、时钟电路、复位电路、输入/ 输出设备等。52单片机最小系统见下图。

图2.1.2 STC89C52单片机最小系统

(1)时钟电路:

XTAL1(19 脚) :芯片内部振荡电路输入端。

XTAL2(18 脚) :芯片内部振荡电路输出端。

XTAL1 和XTAL2 是独立的输入和输出反相放大器,它们可以被配置为使用石英晶振的片内振荡器,或者是器件直接由外部时钟驱动。图2-2 中采用的是内时钟模式,即采用利用芯片内部的振荡电路,在XTAL

1、XTAL2 的引脚上外接定时元件(一个石英晶体和两个电容),内部振荡器便能产生自激振荡。

(2)复位电路:

在单片机系统中,复位电路是非常关键的,当程序跑飞(运行不正常)或死机(停止运行)时,就需要进行复位。

5l 系列单片机的复位引脚RST( 第9 管脚) 出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST 持续为高电平,单片机就处于循环复位状态。

武汉理工大学单片机实训报告

2.2矩阵键盘模块

矩阵键盘的工作原理是:从0行开始,顺序行扫描,即该行输出为0。每扫描一行,读入列线数据,从0开始,列检查,找该行输出为0的列,若无,则顺序扫描下一行,并检查其各列;若找到某列线为0,则该列与检查行交叉的按键为被按下的键。从0行0列开始,顺序将按键编号,就可以按扫描的值得到按键的值。此外还要消除按键在闭合或断开时的抖动。消除抖动的方法可采用消抖电路(RS触发器闩锁电路硬件消除抖动),也克采用延时方式软件消除抖动(延时后再重读,以跳过抖动期)。在矩阵键盘中,通常采用软件消除抖动。

本设计中主要使用了独立键盘,故电路图中简要的画出了4*4的矩阵键盘,其电路原理图如图2.2所示

图2.2矩阵键盘

2.3数码管显示单元

本次设计的显示单元是由4个共阴的7段LED数码管组成的显示电路。原理电路图见图2.3所示:

图2.3数码管显示单元

如上图所示,4个数码管的段选和位选分别由单片机的不同IO口控制,此图用

武汉理工大学单片机实训报告

了一个锁存器74HC573来实现数码管的段选,而其位选则由单片机的其他IO口控制。

2.4LCD1602液晶显示电路

本次课程设计采用的液晶显示屏是LCD1602,其具有体积小、功耗小、显示操作简单LCD1602主要技术参数: 显示容量:16×2个字符 芯片工作电压:4.5—5.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V

字符尺寸:2.95×4.35(W×H)mm

LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表所示:

引脚功能说明: 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。

第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

武汉理工大学单片机实训报告

第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 其原理图如图2.4所示:

图2.4LCD1602接口电路

2.5蜂鸣器单元

本次课程设计采用的蜂鸣器为电磁式蜂鸣,其采用直流供电,其可分为两种类型:有源式和无源式。本次课程设计采用的为无源蜂鸣。其原理图如图2.5所示:

武汉理工大学单片机实训报告

图2.5蜂鸣器

第三章 软件设计

3.1数码管实验

3.1.1循环数码管显示0—F程序设计结构图:

实验要求:能循环数码管显示0—F

武汉理工大学单片机实训报告

图3.1.1循环数码管显示0—F

3.1.2 59秒倒计数流程图

实验要求:能用定时器循环显示59秒倒计时。

武汉理工大学单片机实训报告

图3.1.2 数码管59秒倒计数

3.2 矩阵键盘流程图

实验要求:实现按键检测能用按键控制数码管加减,控制定时器的启动和停止

1 0

武汉理工大学单片机实训报告

图3.2矩阵键盘

3.3 LCD1602滚动显示年月日时分秒

实验要求:要求用1602滚动显示年月日时分秒,并可发送到上位机,上位机可修改1602上显示的时间

1 1

武汉理工大学单片机实训报告

3.4 AD转换,

实验要求:实现AD采集电阻的电压,并把采集到的数据通过串口传送给上位机。

1 2

武汉理工大学单片机实训报告

3.5家电遥控器

实验要求:实现对红外接收管和发射管的控制功能,要求能够学习遥控器的红外码,并能发射相应的编码,实现红外遥控器的功能。

图3.5家电遥控器接收红外数据

1 3

武汉理工大学单片机实训报告

第四章调试结果分析

4.1数码管调试及分析

4.1.1循环数码管显示0—F 数码管位选接单片机的P2口,段选接+5V电压。当用KEIL软件把程序编号以后点击编译按钮,程序便编译好了,然后通过数据线把生成的HEX文下载进单片机,其实验现象如图4.1.1所示为数码管循环显示的部分图片。

4.1.1数码管循环显示 由其现象可知其程序调试成功。

1 4

武汉理工大学单片机实训报告

4.1.2数码管59秒倒计数

数码管的段选端接单片机的P2口,四个位选端接单片机P0端口,当编译好后,并把线路连接好后,数码管变开始从60开始每隔一秒倒计数,当记到0时,数码管的值便又变成60,如此开始循环。其部分实验现象图如图4.1.2所示:

图4.2.1数码管59秒倒计数

4.2矩阵键盘

矩阵键盘的接口接单片机的P1口,数码管的段选端接单片机的P2口,四个位选端接单片机P0端口。当开始运行程序时矩阵键盘从0行开始,顺序行扫描,即该行输出为0。每扫描一行,读入列线数据,从0开始,列检查,找该行输出为0的列,若无,则顺序扫描下一行,并检查其各列;若找到某列线为0,则该列与检查行交叉的按键为被按下的键。通过赋予相应按键++或——或停止数码管中断的功能并对相应按键进行编程即可实现数码管++、——、让定时器停止的功能。其实验现像如下:

图4.2矩阵键盘控制数码管加数字加减及定时器开启及停止

1 5

武汉理工大学单片机实训报告

4.3 LCD1602滚动显示年月日时分秒

本次设计的程序的LCD数据端接单片机的P0口,E,RW,RS分别接P3.7,P3.6,P3.5。矩阵键盘接单片机的P1口。当程序正确运行时应该可以在LCD1602上看到年月日,和时分秒的时间,且此时正在计时。其实验现象如下图所示:

图4.3LCD1602滚动显示年月日时分秒

由实验现象可知程序调试成功。

4.4 AD转换

本次实验采用的AD是ADC0832,它是一款8位AD。其各控制引脚接线如下Cs= P1^0; Clk= P1^1; Di=P1^7;Do= P1^7;其通道1接可调电阻,通道应为不用顾不接。当程序正确运行时可以在LCD1602上看到通道1所测试的电压值。并可以通过串口调试助手看到单片机发送到串口调试助手的电压值。其实验现象如图4.4所示:

1 6

武汉理工大学单片机实训报告

图4.4 AD转换

由以上实验现象可知和预测的功能相同顾本次实验调试成功。

4.5家电遥控器

本次遥控器实验采用的是NEC编码方式对遥控器的键值进行编码,以及对遥控器发送的红外线进行解码。其编码图如图4.5所示

图4.5 红外编码时序图

由次时序图可见,本次红外编码成功。

第五章小结

经过这次为期一周的单片机实训,让我受益匪浅。通过这次实训,使我不仅对单片机的各个模块更加的了解了,而且加深了我对于单片机这门课程知识的理解。这次实训不仅提高了我的编程能力,同时也提高了我的动手能力。在刚开始拿到单片机最小系统板的硬件时,面对这那些细如针眼芯片引脚和及其微小的贴片电阻,我感到了十分的无助,然而通过学长的演示和询问其他同学焊接方法,渐渐的我逐渐掌握了方法。焊接贴片电阻和芯片的速度也逐渐变快,然而当

1 7

武汉理工大学单片机实训报告

焊完芯片和贴片电阻后却发现下载不来程序,经过我用万用表对每个部件的电位进行检查后发现,原来焊接的下载芯片的引脚有些部位是虚焊,因而下不进程序,当我对虚焊部位重新焊了一遍后,单片机才可以下载程序。然而在后来的编程过程中我也遇到了许多小问题,让我调了很久的程序,比如把变量的的类型定义错误,该定义为全局变量的变量我定义成了局部变量等等,总之这一次实训让我受益匪浅,使我认识到了自身知识的匮乏,督促我去提升自己。

参考文献:

[1] 李群芳,张士军等.《单片微型计算机与接口技术》(第三版).电子工业出版社.出版年份:2008年。

[2] 杨路明《.C语言程序设计教程》.北京邮电大学出版社.出版年份:2005年。

[4] 赵亮,侯国锐.《单片机C语言编程与实例》.人民邮电出版社.出版年份:2007年 。

[5] 彭虎, 周佩玲, 傅忠谦.《单片机原理与接口技术》(第二版).电子工业出版社.出版年份:2008年。

[5] 郭天祥,《新概念51单片机C语言教程》,电子工业出版社,出版年份:2010年.

1 8

武汉理工大学单片机实训报告

实验5家电遥控器程序:

红外编码程序:

#include "reg52.h" #define uchar unsigned char #define uint unsigned int uchar key,key1,key2,key3,key4; sbit IR_OUT=P1^0 ; void delay_ms(uint ms) {

uint i,j;

for(i=0;i

{

for(j=0;j

} } //T1 13us产生一次中断 用于产生38K载波((1/26)*1000000 //T0 方式1 16位 用于定时

void Init_Timer(void)//初始化定时器1方式2 {

TMOD=0x21; //T0 mode 1 ,T1 mode 2(8位自动重装初值)

TH1=256-(1000*11.0592/38.0/12)/2+0.5; //(0.5为误差)

//特殊

TL1=256-(1000*11.0592/38.0/12)/2+0.5;

ET1=1; //开定时器中断1

EA=1;//开总中断 }

//发送引导码(9ms) 发送方:4.5ms高电平+4.5ms低电平.void Send_Start_Bit(void) //TR1的值=发送的电平{ //4.5ms 1

TH0=(65536-8295)/256;

TL0=(65536-8295)%256;

TR0=1;// 启动定时器0;

TR1=1;

while(!TF0);

TR1=0;

TF0=0;//定时器0溢出标志位。

TR0=0; //关闭定时器0.

武汉理工大学单片机实训报告

IR_OUT=0;

//4.5ms 0

TH0=(65536-4146)/256;

TL0=(65536-4146)%256;

TR0=1;

TR1=0;

while(!TF0);//等待定时器0产生中断。

TR1=0; TF0=0; TR0=0;

IR_OUT=0; }

//发送二进制0(0.565us载波+0.565us空闲) void Send_Bit_0(void) { //0.565us 1 载波

TH0=(65536-521)/256;

TL0=(65536-521)%256; TR0=1; TR1=1;

while(!TF0);

TR1=0; TF0=0; TR0=0;

IR_OUT=0; //0.565us 0 空闲

TH0=(65536-521)/256;

TL0=(65536-521)%256; TR0=1; TR1=0;

while(!TF0);

TR1=0; TF0=0; TR0=0;

武汉理工大学单片机实训报告

IR_OUT=0; }

//发送二进制 1 (0.565us载波+1.685ms空闲) void Send_Bit_1(void) { //0.565us 1 载波

TH0=(65536-521)/256;

TL0=(65536-521)%256; TR0=1; TR1=1;

while(!TF0);

TR1=0; TF0=0; TR0=0;

IR_OUT=0; //1.685ms 0 空闲

TH0=(65536-1563)/256;

TL0=(65536-1563)%256; TR0=1; TR1=0;

while(!TF0);

TR1=0; TF0=0; TR0=0;

IR_OUT=0; /*****************************************/ }

void Send_over(void) //发送一个结束码,因为最后一个位只有遇到下降沿才能读取(发射端的上升沿) { //0.565us 1

//小于0.5us 接收端很难识别到

TH0=(65536-521)/256;

TL0=(65536-521)%256; TR0=1; TR1=1;

武汉理工大学单片机实训报告

while(!TF0);

TR1=0; TF0=0; TR0=0;

IR_OUT=0; //0.565us 0 TH0=(65536-521)/256;

TL0=(65536-521)%256; TR0=1; TR1=0;

while(!TF0);

TR1=0; TF0=0; TR0=0;

IR_OUT=0; } //发送一字节 8位 void Send_Char() { unsigned char i,j1,j2,Key3,Key33,Key4,Key44; j1=0xBE;//用户码

j2=0x41;//用户反码

Key3=0xDE;//key1 键值码

Key33=0x20;//key1 键值反码

Key4=0x30;//key2 键值码

Key44=0xc0;//key2 键值反码

Send_Start_Bit();//发送引导码

Send_Bit_0();//

for(i=0;i

if(j1&0x80)

Send_Bit_0();

else

Send_Bit_1(); j1=j1

武汉理工大学单片机实训报告

//先发射低位

}

j2=0; for(i=0;i

if(j2&0x80)

Send_Bit_0();

else

Send_Bit_1();

j2=j2

//先发射低位

}

for(i=0;i

{

if(key3&0x80)

Send_Bit_0();

else

Send_Bit_1();

key3=key3

}

for(i=0;i

{

if(Key33&0x80)

Send_Bit_0();

else

Send_Bit_1();

Key33=Key33

//先发射低位

}

//}

for(i=0;i

{

if(Key4&0x80)

Send_Bit_0();

else

Send_Bit_1();

武汉理工大学单片机实训报告

Key4=Key4

}

for(i=0;i

{

if(Key44&0x80)

Send_Bit_0();

else

Send_Bit_1();

Key44=Key44

//先发射低位

}

//} Send_over();//结束符

}

void T1_ISR(void) interrupt 3 { IR_OUT=!IR_OUT; }

void main(void) { Init_Timer(); while(1) {

Send_Char();//发送8位数据

delay_ms(1000); } }

武汉理工大学单片机实训报告

红外解码程序:

#include"reg52.h" #define LCD P0 #define uchar unsigned char #define uint unsigned int sbit IR_INPUT = P3^2;//红外接收引脚 sbit E=P2^7;

sbit RW=P2^5; sbit RS=P2^6; sbit int0=P3^2; uchar code tab1[11]={"key value:"}; uchar code tab2[13]={"

-H"}; uchar hongwaivalue[6]; uchar Time; void IrInit();

void delay(uint x)

//10us { unsigned char i; while(x--) {

for (i = 0; i

{} } }

void write_com(uchar cmd)//写指令函数 { RS=0; RW=0; LCD=cmd; delay(1); E=1; delay(5);

E=0; } void write_data(uchar dat)//写数据 { RS=1; RW=0; LCD=dat; delay(1); E=1; delay(10);

武汉理工大学单片机实训报告

E=0; }

void lcd_init() { write_com(0x38); write_com(0x0c);

write_com(0x06); write_com(0x01); write_com(0x80); }

void hongwai_init()//7./* 初始化红外接收功能 */ {

IT0=1;//下降沿触发

EX0=1;//打开中断0允许

EA=1; //打开总中

int0=1;//初始化端口 }

void lcd_display() {

hongwaivalue[4]=hongwaivalue[2]>>4;

//高位

hongwaivalue[5]=hongwaivalue[2]&0x0f; //低位

if(hongwaivalue[4]>9)

{

write_com(0xc0+0x09);

//设置显示位置

write_data(0x37+hongwaivalue[4]); //将数值转换为该显示的ASCII码

}

else

{

write_com(0xc0+0x09);

write_data(hongwaivalue[4]+0x30); //将数值转换为该显示的ASCII码

}

if(hongwaivalue[5]>9)

{

write_com(0xc0+0x0a);

write_data(hongwaivalue[5]+0x37); //将数值转换为该显示的ASCII码

}

武汉理工大学单片机实训报告

else

{

write_com(0xc0+0x0a);

write_data(hongwaivalue[5]+0x30); //将数值转换为该显示的ASCII码

} }

void main() {

uchar i;

hongwai_init();

lcd_init();

write_com(0x80);

for(i=0;i

{

write_data(tab1[i]);

}

write_com(0x80+0x40);

for(i=0;i

{

write_data(tab2[i]);

}

while(1)

{

lcd_display();

} }

void Read() interrupt 0 { uchar j,k; uint n; Time=0;

delay(70);

if(int0==0) //确认是否真的接收到正确的信号

{

n=1000;

//1000*10us=10ms,超过说明接收到错误的信号

//当两个条件都为真则循环,如果有一个条件为假的时候跳出循环,免

武汉理工大学单片机实训报告

//程序出错的时侯,程序死在这里

while((int0==0)&&(n>0)) //等待前面9ms的载波低电平过去

{

delay(1);//10us

n--;

}

键码反码)

过去

if(int0==1)

//如果正确等到9ms低电平{ n=500; while((int0==1)&&(n>0))//等待4.5ms的空闲起始高电平过去

{

delay(1);//10us

n--; } for(k=0;k

for(j=0;j

{

n=60;

while((int0==0)&&(n>0))//等待信号前面的560us低电平

{

delay(1);//10us

n--;

}

n=500;

while((int0==1)&&(n>0)) //计算高电平的时间长度。

{

delay(1);

Time++;

n--;

if(Time>30)

{

EX0=1;

return;

}

}

hongwaivalue[k]>>=1; //k表示第几组数据

if(Time>=8)

//如果高电平出现大于565us,那么

武汉理工大学单片机实训报告

是1

{

hongwaivalue[k]|=0x80;

}

Time=0; //用完时间要重新赋值

} }

} } } if(hongwaivalue[2]!=~hongwaivalue[3]) { return; }

《单片机课程设计心得体会.doc》
单片机课程设计心得体会
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

相关推荐

工作心得体会先进事迹心得体会读后感观后感学习培训心得体会作风建设心得体会党员心得体会其他心得体会
下载全文