单片机实训报告
单片机综合应用实训报告

一、实训背景与目的随着科技的不断发展,单片机作为嵌入式系统中的核心部件,其在各个领域的应用日益广泛。
为了提高学生的实践能力,培养其动手操作和问题解决能力,本次实训以单片机为平台,通过综合应用实训,使学生深入了解单片机的工作原理,掌握单片机的编程技巧,并能将其应用于实际项目中。
二、实训内容与步骤本次实训内容主要包括以下几个方面:1. 单片机基础原理- 了解单片机的结构、工作原理及常用接口。
- 学习51单片机的指令系统、寄存器及中断系统。
2. 单片机编程- 掌握Keil uVision软件的使用,进行C51语言编程。
- 学习编写简单的单片机程序,如LED流水灯、按键控制等。
3. 单片机硬件电路- 学习绘制电路原理图,了解电路元器件的选用和焊接工艺。
- 实践搭建单片机最小系统,并进行调试。
4. 单片机综合应用- 设计并实现一个基于单片机的交通灯控制系统。
- 设计并实现一个基于单片机的数字时钟显示系统。
三、实训过程与结果1. 单片机基础原理学习- 通过阅读教材、查阅资料,了解单片机的基本知识。
- 在实验室进行实验,验证单片机的基本功能。
2. 单片机编程实践- 使用Keil uVision软件,编写LED流水灯程序,实现LED灯的闪烁效果。
- 编写按键控制程序,实现按键的读取和响应。
3. 单片机硬件电路搭建- 使用Protel软件绘制电路原理图,确定元器件型号和数量。
- 搭建单片机最小系统,包括电源电路、晶振电路、复位电路等。
- 使用焊接工具进行元器件焊接,并进行调试。
4. 单片机综合应用实现- 设计并实现交通灯控制系统,实现红黄绿灯的定时切换和倒计时功能。
- 设计并实现数字时钟显示系统,实现时分秒的显示和调整。
四、实训总结与收获通过本次实训,我收获颇丰:1. 加深了对单片机原理的理解- 通过理论学习、实验操作和项目实践,我对单片机的结构、工作原理和编程方法有了更深入的了解。
2. 提高了编程能力- 通过编写LED流水灯、按键控制等程序,我掌握了C51语言编程技巧,提高了编程能力。
关于单片机实训报告万能【六篇】

关于单片机实训报告万能【六篇】【篇1】单片机实训报告万能通过今次单片机实训,使我对单片机的认识有了更深刻的理解。
系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本设计题目的基本要求和发挥部分。
由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一些具体细节问题需要解决。
例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展功能。
踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。
当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。
我相信其中的酸甜苦辣最终都会化为甜美的甘泉。
但在这次实训中同时使我对汇编语言有了更深的认识。
当我第一次接触汇编语言就感觉很难,特别是今次实训要用到汇编语言,尽管困难重重,可我们还是克服了。
这次的实训使培养了我们严肃认真的做事作风,增强了我们之间的团队合作能力,使我们认识到了团队合作精神的重要性。
这次实训的经历也会使我终身受益,我感受到这次实训是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破。
希望这次的经历能让我在以后学习中激励我继续进步。
【篇2】单片机实训报告万能通过这一个学期的单片机学习,我收获了很多关于单片机的知识,并且这些知识和日常的生活息息相关。
了解了一些简单程序的录入,LED显示器、键盘、和显示器的应用和原理。
LED显示器:LED显示器是由发光二管组成显示字段的器件。
通常的8段LED显示器是由8个发光二极管组成,LED显示器分共阳极和共阴极两种。
有段选码和和位选码。
当LED显示器每段的平均电流位5MA时,就有较满意的亮度,一般选择断码5-10MA 电流;位线的电流应选择40-80MA。
LED显示器的显示方式有动态和静态两种。
7289A芯片是具有SPI串行接口功能的显示键盘控制芯片,它可同时取得8位共阴极数码管和64个键的键盘矩阵。
单片机实训个人报告

一、前言随着科技的飞速发展,单片机技术作为电子技术领域的重要分支,已经在众多领域得到了广泛应用。
为了更好地了解和掌握单片机技术,提高自身的实践能力,我在本学期参加了单片机实训课程。
以下是我在实训过程中的心得体会和总结。
二、实训目的1. 熟悉单片机的基本原理和结构;2. 掌握单片机的编程方法;3. 学会使用单片机进行简单的应用系统设计;4. 培养动手能力和团队协作精神。
三、实训过程1. 学习单片机基本原理和结构在实训初期,我们学习了单片机的基本原理和结构,包括中央处理器(CPU)、存储器、输入输出接口等。
通过学习,我对单片机的整体架构有了清晰的认识。
2. 学习单片机编程方法在掌握了单片机基本原理后,我们开始学习单片机编程方法。
主要学习了汇编语言和C语言两种编程方式。
通过编程实践,我逐渐掌握了单片机的编程技巧,能够编写简单的程序实现特定功能。
3. 单片机应用系统设计在实训过程中,我们进行了单片机应用系统设计,如LED流水灯、温度计等。
在设计过程中,我们学习了如何根据实际需求选择合适的单片机型号,如何设计电路图,如何编写程序实现功能。
4. 动手实践和团队协作在实训过程中,我们不仅学习了理论知识,更重要的是动手实践。
在完成每个项目时,我们都要亲自焊接电路、编程调试。
同时,我们还学会了如何与团队成员沟通、协作,共同完成项目。
四、实训收获1. 理论知识方面通过本次实训,我对单片机的基本原理、编程方法和应用系统设计有了更深入的了解。
掌握了汇编语言和C语言两种编程方式,为以后的学习和工作打下了坚实的基础。
2. 实践能力方面在实训过程中,我学会了如何使用焊接工具、编程软件等,提高了自己的动手能力。
同时,通过团队协作,学会了与他人沟通、交流,提高了自己的团队协作能力。
3. 思维方式方面在实训过程中,我学会了如何分析问题、解决问题。
在遇到困难时,我会主动查阅资料、请教老师,不断提高自己的思维能力。
五、实训总结本次单片机实训使我受益匪浅,不仅提高了自己的实践能力,还拓宽了知识面。
单片机实训报告

单片机实训报告一、实训目的本次单片机实训的目的在于通过实际操作和项目实践,深入理解单片机的工作原理和应用开发,提高自身的硬件设计能力、软件编程能力以及解决实际问题的能力。
同时,培养团队合作精神和创新思维,为今后从事相关领域的工作打下坚实的基础。
二、实训设备在本次实训中,我们使用了以下主要设备:1、单片机开发板:用于实验和项目的开发与调试。
2、计算机:安装相关的编程软件和开发工具。
3、示波器:用于观察电路中的信号波形。
4、万用表:用于测量电路中的电压、电流等参数。
三、实训内容1、单片机基础知识学习首先,我们对单片机的基本结构、工作原理、指令系统等进行了系统的学习。
了解了单片机的内部组成,包括中央处理器(CPU)、存储器、输入输出端口等。
通过学习指令系统,掌握了如何使用汇编语言或 C 语言对单片机进行编程控制。
2、硬件电路设计在硬件电路设计方面,我们学习了如何根据实际需求设计单片机的最小系统,包括电源电路、时钟电路、复位电路等。
同时,还掌握了如何扩展外部存储器、输入输出设备等。
通过实际绘制电路图和制作电路板,提高了我们的硬件设计能力和动手实践能力。
3、软件编程在软件编程方面,我们使用了汇编语言和 C 语言两种编程方式。
通过编写简单的程序,如点亮 LED 灯、控制数码管显示、实现按键输入等,逐渐熟悉了单片机的编程方法和技巧。
同时,还学习了如何使用中断、定时器、串口通信等功能,提高了程序的复杂程度和实用性。
4、项目实践在项目实践环节,我们分组完成了一个基于单片机的温度控制系统的设计与实现。
该系统通过温度传感器采集环境温度,经过单片机处理后,控制风扇的转速和加热装置的工作状态,从而实现对环境温度的自动控制。
在项目实践过程中,我们充分运用了所学的知识和技能,从系统方案设计、硬件电路搭建、软件编程调试到系统测试优化,每个环节都进行了精心的设计和认真的实施。
四、实训过程在实训开始阶段,我们首先进行了单片机基础知识的学习和实验。
单片机实训报告范文精选5篇精选

单片机实训报告范文精选5篇实训报告是展示本身实训收获成长的重要报告,那么实训报告该如何写呢?小编精选了一些关于实训报告的优秀范例,一起来看看吧。
单片机课程设计心得体会在学校学习期间我有幸的参加了学校的单片机学习小组,在小组里我理解了什么是单片机,单片机有哪些用途,利用单片机可以实现哪些功能来方便人们的生活如交通灯,时钟,还有中,电子玩具等等,它们里面都有单片机的存在来实现某种功能。
通过在单片机小组里的学习我简单总结了几点心得和体会:第一:万事开头难,要英勇的迈出第一步,不要总找借口说没有学习过就总推脱。
凡事都有第一步可以先可简单的来,然后可以逐步的向深层次学习。
可以从建工程开始,然后可以找一个简单的小程序先把它敲进单片机内然他运转起来,感受一下单片机的运转,让本人理解单片机整个运转。
第二:关于知识点,学过的要掌握结实,关于没有学的和临时用不到的先不用学习。
比方:小灯得点亮就没有用到中断可以先不用看。
如此可以防止知识过多记不住的苦恼。
关于程序这里的知识点不能只停留在理论层次上,一定要结合着程序进展学习如此才能掌握的特别牢靠,当用到哪里的知识点不记得了可以去看书,关于用不到的可以不去看。
第三:程序不要只是看别人得,一定要本人写过才是本人的。
开始不明白可以参考别人的,看看每一句代表着什么意思,可以实现什么现象。
明白之后本人再重新写一遍,你会觉观察别人的能明白到本人写的时候特别困难。
当你本人能写出来的时候说明你真明白了。
第四:一定要学会程序调试的方法。
有时候把程序写完了然后运转时不能实现理想的现象。
这时有人就晕了不知该如何办,然后就去征询别人。
当别人找出征询题出在哪里时就会恍然大悟。
事实受骗遇到征询题一定要本人尝试着处理,不能遇到征询题就去征询别人。
本人一定要掌握处理征询的方法和思路。
第五:在学习初期看别人的代码,学习别人的思路这个特别有用。
通过看别人的代码特别是有多年编程经历的人的程序,可以迅速提高本人的编程水平。
单片机实训报告【三篇】

【导语】实训报告是展⽰⾃⾝实训收获成长的重要报告。
以下是⽆忧考整理的单⽚机实训报告,欢迎阅读!更多相关⽂章请关注⽆忧考报告频道!单⽚机实训报告篇⼀ 通过为期⼀周的单⽚机实训,是我们对这门课有了许多新的了解,弥补了在课堂上学习的不⾜。
相信这对我们以后的学习和⼯作都会有很⼤的帮助。
我们⼀定要在最短的时间⾥对这些不⾜加以改正! ⾸先,在这次试训中我被单⽚机强⼤的功能所震撼,以前在课堂上完全没有能理解可编程单⽚机的优越性。
这次通过实体仿真软件等辅助软件的共同效果,是这次试训有了鲜明的活⼒。
换是我们认识到这次试训不仅仅是⼀个软件的应⽤,更多的是使我们认识到学习到很多在课堂上⽆法得到的东西。
特别是protues软件的功能是我们了解了当今开发系统的新⽅向,简直太不可思议啦! 单⽚机作为⼀种最简单的软件,与我们的⽇常⽣活息息相关,了解⼀些单⽚机程序的简单录⼊是⾮常必要的。
如:LED显⽰器、键盘和显⽰器的应⽤和原理。
在被刺实训中我们每个⼈通过⼀个⼋位流⽔灯的制作,使我们深深地体会到了单⽚机在现实⽣活中的⼩⼩应⽤,既增强了我们的好奇⼼,⼜巩固了我们的理论知识。
更让我们体会到了单⽚机⼿动的开始平台的完善与成熟。
只要你有想法,单⽚机就有可能让他成为现实。
这⾥我学习完protues软件后的第⼀感觉是,虽然这软件⼯作不稳定,但是会有相当不错的效果出来。
这对我以后的⼯作⼀定会有帮助的。
在这次试训中不仅只对单⽚机编程有了新的认识,还对整个单⽚机的开发平台都有了⼀厅的了解,这是⼀笔不错的收获。
通过这⼏天的试训,使我的感触很深,真实“条条⼤路通罗马”,要达到⽬的,不同的⼈就有不同的⽅法。
只要你的⽅法不错!五花⼋门都可以,⽽且是各有特⾊。
⾛出来的结果都有各⾃的独到之处。
在编程中“简”字贯穿于整个程序设计中,越简单越好,毕竟单⽚机留给⽤户的资源是有限的,所以我们要充分利⽤这些资源,达到更好的效果,这些是我们在以后的学习⽣活中应值得注意的地⽅。
单片机实训报告优选范文5篇分享

单片机实训报告优选范文5篇分享单片)是一种集成电路芯片,是具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
下面就是小编给大家带来的单片机实训报告优选范文5篇分享,希望大家喜欢!单片机实训报告范文(一)前言一周的单片机实训很快就结束咯,在这一周的时间里,我学到了很多关于单片机各方面的知识。
老师在实训课中也教会咯我们很多关于单片机软件编程与硬件设施的知识。
一周的实训中我们一共实训咯好几个项目,通过这几个项目的实训,我们掌握咯一些单片机的汇编语言和硬件调试,达到了很好的效果。
一周时间实训过后,我把之前在课堂上不懂的知识点,通过实际操作的练习,我都搞明白咯。
当然在实训过程中也遇到咯很多问题,就是有时在调试方面不能调试成功,有时程序是没有错误,但是就是调试不好,一直找原因也找不出是什么原因。
希望以后能够拥有更多的实训时间和机会学习单片机。
实训任务一一、实验目的熟悉Keil C51集成开发环境的使用方法二、实验设备及器件IBM PC机三、实验内容按照本书的第2章的2.1节到2.4节内容进行Keil C51集成开发环境的安装和使用练习。
然后按照以下内容建立文件并编译产生HEX文件。
ORG 8000HLJMP MainORG 80F0HMain:MOV R7,#0LOOP:MOV R6,#0DJNZ R6,$DJNZ R6,$DJNZ R6,$DJNZ R6,$DJNZ R7,LOOP ;延时一台CPL P1.0CPL P1.1CPL P1.2CPL P1.3CPL P1.4CPL P1.5CPL P1.6CPL P1.7SJMP MainEND ;P1.0取反 ;P1.1取反 ;P1.2取反 ;P1.3取反 ;P1.4取反 ;P1.5取反 ;P1.6取反 ;P1.7取反通过该程序实现八盏灯的同时亮和同时灭的功能,更好的掌握汇编指令。
单片机实训工作报告【三篇】

【导语】在单⽚机实训教学过程中采⽤教师引导,学⽣主导的教学⽅式,让学⽣掌握技巧,⿎励学⽣独⽴思考。
以下是⽆忧考整理的单⽚机实训⼯作报告,仅供参考! 篇⼀ 1.课程设计⽬的 1)巩固单⽚机基础知识,串联知识点。
2)学会绘制PCB板,学会⼿⼯制板的⼀般⽅法。
3)使⽤Protel等EDA⼯具进⾏单⽚机硬件系统设计的能⼒。
4)基于KeilIDE开发单⽚机应⽤程序的能⼒。
5)写技术报告和编制技术资料的能⼒。
6)独⽴⼯作能⼒和创造⼒。
7)综合运⽤专业及基础知识,解决实际⼯程技术问题的能⼒。
2.课程设计题⽬描述和要求 旋转电⼦时钟的设计与制作 实现的功能要求:(1)实现单⽚机最⼩系统;(2)四只LED数码管显⽰当前时分;(3)每隔⼀秒钟周边的60只LED发光管旋转⼀格,装饰⽤的LED每隔⼀秒旋转⼀次;(4)实现整点报时;(5)实现按键调整;(6)停(掉)电保护,年计时误差⼩于30秒;(7)其他功能。
3.课程设计报告内容 3.1⽅案论证 3.1.1单⽚机定时器做电⼦时钟 优点:考虑到单⽚机货源充⾜、价格低廉,可软硬件结合使⽤,能够⽅便的实现系统的多功能性,故采⽤单⽚机作为本设计的硬件基础。
故其优点是外围电路简单,只需要⼀个单⽚机最⼩系统,和⼀个显⽰模块。
缺点:定时不是很准确,计时误差较⼤,并且程序的编写较繁琐。
3.1.2数字电路做电⼦时钟 优点:具有⾛时准确、显⽰直观、⽆机械传动装置。
与传统的机械钟先⽐,电⼦钟具有更优异的优点。
由于电⼦钟采⽤数字集成电路的发展和采⽤了先进的⽯英技术,使电⼦钟具有⾛时准确、性能稳定、携带⽅便等优点,电⼦钟⽤于定时⾃动报警、按时⾃动打铃、时间程序⾃动控制、定时⼴播及⾃动控制等各个领域。
缺点:因为电⼦钟毕竟是电⼦产品,电⼦产品都有辐射,不过电⼦钟危害极低,对⼈体够不成任何危害,不象⼿机的辐射那么⼤。
应⽤:⽬前,在国内,电⼦钟因数码管数字显⽰效⽤直接有效,所以⼤多运⽤在城市的主要营业场所,以及车站、码头等公共场所。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息工程学院实训报告实训题目:音乐倒数计数器学生姓名:***学号:**********专业:自动化班级:三班指导教师:***实训任务书一、实训目的⑴掌握MCS-51定时器的使用和编程方法。
⑵掌握LCD显示模块的软件设计方法。
(3)掌握单片机控制蜂鸣器发声原理及音乐播放方法。
二、实训内容⑴利用51单片机结合字符型LCD显示器(1602)(或者四位LED显示器)设计一个简易的倒数计数器。
做一小段时间倒计数,当倒计数为0时,则发出一段音乐声响,提醒倒计数时间到了。
⑵定时闹钟的基本功能如下:字符型LCD(1602)显示器(或者四位LED显示器),显示格式为“TIME:分:秒”。
用4个按键操作来设置当前想要倒计数的时间。
一旦按下键则开始倒计数,计数单位为1秒,当计数为0时,发出一阵音乐声。
程序执行后工作指示灯LED闪动,表示程序开始执行,按下操作键K1~K4动作如下: K1—可调整倒计数的时间1~60分钟。
K2—设置倒计数的时间为5分钟,显示“0500”。
K3—设置倒计数的时间为10分钟,显示“1000”。
K4—设置倒计数的时间为20分钟,显示“2000”。
复位后LCD的画面应能显示倒计时的分钟和秒数,此时按K1键,则在LCD上显示出设置画面。
此时,若:a. 按操作键K2—增加倒计数的时间1分钟。
b. 按操作键K3—减少倒计数的时间1分钟。
c. 按操作键K4—设置完成。
三、实训原理本题目最大难点是实现音乐的播放。
利用定时计数器,通过载入不同的计数初值,产生频率不同的方波,输入到蜂鸣器中,使其发出频率不同的声音。
在此基础上,可将乐曲的简谱转化为单片机可以“识别”的“数组谱”,进一步加入对音长、休止符等的控制量后,可以实现音乐的播放。
四、实训电路参考《微型计算机技术及应用实验指导书》实验三、实验十九电路图。
五、实训步骤1、实训连线参考《微型计算机技术及应用实验指导书》实验三、实验十九电路图进行联线。
2、实验步骤(1)编写单片机定时器控制程序,实现倒计数功能。
(2) 编写LCD液晶显示模块控制程序,实现倒计数显示、按键时长设定显示。
(3)编写程序实现音乐播放功能。
(4)完成整个程序编写实现整个题目要求的功能。
3、观察运行结果下载程序到实验箱,以连续方式运行程序,观察实验现象是否实现预期功能单片机自20世纪70年代问世以来,以其极高的性能价格比,收到人们的重视和关注,应用很广、发展很快。
而51单片机是各单片机最为典型和最有代表性的一种。
本实验是DP-51PROC单片机综合仿真实验箱所设计的,可以实现键盘按键与数字动态显示并可以用音乐倒数的计数器。
本设计基于单片机技术原理,以单片机芯片STC89C51作为核心控制器,通过硬件电路的制作以及软件程序的编程,设计制作出一个计数器,包括以下功能:输出时间,按下键就开始计时,并将时间显示在四位LED数码管上。
当倒数计数为0时,蜂鸣器就发出音乐声响等等。
该计数系统主要由计数器模块、四位LED数码管、蜂鸣器模块、键盘模块、复位模块等部分组成。
关键词:STC89C51;键盘;四位LED数码管;蜂鸣器实训任务书 (II)摘要 (IV)一、实训内容 (1)二、系统实现方案 (1)三、硬件电路设计 (2)1.主控制器——AT89S51单片机 (2)2.复位电路 (3)3.音乐倒数计时器原理图 (4)四、系统软件程序设计与分析 (5)1.主程序流程图 (5)2.显示流程图 (6)3.按键流程图 (7)五、实训过程以及实训结果 (8)1.实训连线 (8)2.实训步骤 (9)3.实现功能 (9)4.观察运行结果 (9)六、实训总结 (11)附录1: (12)附录2: (19)附录3: (22)七、参考文献 (30)正文一、实训内容随着科技的发展和社会的进步,人们对数字钟的要求越来越高,多功能数字钟不管在性能还是在样式上都发生了质的变化。
数字钟实际上是一个对标准频率进行计数的计数电路,走时精度高,稳定性好,使用方便,不需要经常调校。
单片计算机即单片微型计算机,是集CPU,RAM,ROM,定时/计数和多种接口于一体的微控质器。
它体积小成本低,功能强,广泛应用于智能产品和工业自动化上。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大地方便,而且大大的扩展了钟表原先报时功能,诸如定时自动报警、0按时自动打铃、定时广播、自动启闭路灯、定时开机烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以数字化为基础的,因此研究数字钟及扩大其应用有着非常现实的意义。
本系统采用单片机作为数字钟的核心控制器,读取时钟的值,并通过LED数码管显示出来,而且可以通过按键电路控制执行信号,给时钟赋初值。
还可以设置闹钟,当计数为0时,发出一阵音乐声。
二、系统实现方案音乐倒数计数器所倒数的时间由数字显示,控制器使用单片机AT89C51。
本设计基于单片机技术原理,以单片机芯片AT89C51作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个计数器,包括以下功能:输出时间,按下键就开始计时,并将时间显示在四位LED数码管上。
当倒计数为0时,蜂鸣器就发出音乐声响等等。
该计数器系统主要由计数器模块、四位LED数码管模块、蜂鸣器模块、键盘模块、复位模块等部分组成。
总体设计方框图如图1-1所示。
三、硬件电路设计1.主控制器——AT89S51单片机AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
●与MCS-51 兼容● 4K字节可编程闪烁存储器●全静态工作:0Hz-24Hz●三级程序存储器锁定● 128*8位内部RAM● 32可编程I/O线●两个16位定时器/计数器● 5个中断源●可编程串行通道●低功耗的闲置和掉电模式●片内振荡器和时钟电路3-1.AT89C51电路原理图2.复位电路给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,这时如果手按着一直不放,系统将一直复位,不能正常工作。
3-2单片机晶振电路与复位电路3.音乐倒数计时器原理图音乐倒数计时器原理图,由复位电路,晶振电路,显示电路,输入电路组成,K1,K2,K3为设置时间开关,上电LED灯亮,进行设置,确认后倒计时开始,LED灯灭,时间到后发出音乐提醒。
图3-3为音乐倒数计时器原理图四、系统软件程序设计与分析1.主程序流程图主程序开始初始化,然后扫描键盘、复位电路和计数器。
当键盘按键有按下时,调整计数器值,LED显示新值。
当复位键有按下时,计数器复位为初值,重新倒计数。
当计数器值倒计为0时,蜂鸣器发出声音,计数器停止倒计,程序结束。
图4-1 主程序流程图2.显示流程图图4-2 LED显示流程图3.按键流程图图4-3 按键流程五、实训过程以及实训结果1.实训连线1.用导线把A2区的P1.0,P1.1,P1.2,P1.3分别连接到A6区的P1_IO1-P1_IO4相连,再用八芯排线把A2区的J57(P3)接口与TinyView电路板的JP1接口相连。
2.将A2区P1.4,P1.5,P1.6用导线分别接到key1,key2,key3上,再把P1.5,P1.6,P1.7分别于SW2,SW3,SW1相接。
3.把蜂鸣器模块B5的beep接口接到 A2区的P1.7上。
2.实训步骤(1)编写LED数码管模块控制程序,实现倒计数显示、按键时长设定显示。
详细程序见附录1(2)编写程序实现音乐播放功能。
详细程序见附录2(3)完成整个程序编写实现整个题目要求的功能。
详细程序见附录33.实现功能K1按下一次—设置倒计数的时间为5分钟,显示“0500”。
K1按下两次—设置倒计数的时间为10分钟,显示“1000”。
K1按下三次—设置倒计数的时间为20分钟,显示“2000”。
K2每按下一次增加一分钟,K3每按下一次减少一分钟,确定初值后保存。
再次按K2开始倒计时,按K3暂停倒计时;若不暂停,倒计时为0时,蜂鸣器开始播放音乐。
4.观察运行结果5.按照仿真实验结果,能够实现上述功能。
实物图如下所示:六、实训总结经过这次的实训,简单带有LED显示的音乐倒数计数器基本完成,系统基本功能基本实现,测试运行也基本正常。
该系统基本上完成了时间的显示与计数的功能。
当然这个系统还存在许多有待完善的地方:(1)功能相对较少,有待于添加,比方按下K3暂停后不能够继续倒计时,需要按下复位键重新设置初值再次倒计时;(2)界面设计得不够精致完美;这次课程设计的时间虽然不算很长,但使我对很多东西有了更深刻的认识。
总结如下:(1)查阅资料和阅读相关文献的重要性。
(2)向同学请教的重要性,团结协作的重要性。
(3)勤动手的重要性,自己动手,丰衣足食!在一次次调试代码的过程中,我才明白“代码不是写出来的,是调出来的”的道理。
(4)对待任何事情都要有耐心和恒心,遇到问题要冷静地思考,积极找出症结所在,逐个解决。
通过本次实训,我更深刻的认识到了教学实践在大学课程中的重要性,同时也发觉到了自己在学习方面存在的许多不足之处,比如在硬件方面有很多欠缺,在以后的学习中我会努力改进这些不足,不但要学习软件编程,而且也要努力提高自己的硬件设计方面的能力,不断提高自己的动手实践能力。
附录1:#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define T0_H (65536-50000)/256#define T0_L (65536-50000)%256sbit Moda1key = P1^4; //she chu zhisbit Moda2key = P1^5; //dao ji shisbit Moda3key = P1^6; // zan tingsbit beep = P1^7;sbit COM1 = P1^0;sbit COM2 = P1^1;sbit COM3 = P1^2;sbit COM4 = P1^3;uint i=5,num=0,num1=0,num2=0;bit bflag=0;bit bflag1=0;bit bflag2=0;uint dis1,dis2,dis3,dis4;static uint dis = 30;uint count=0,count1=0,count2=0;uchar display[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};void Modal2();void Modal3();void jishi();void xianshi();void initSys();void Delay(uint x);void main(){i nitSys();w hile(1){xianshi();i = 5;if(Moda1key == 0){while(i--);if(Moda1key == 0){TR0 = 0; //guan ding shi qinum++;Delay(1000);if(num == 1){dis=5*60;initSys();}if(num == 2){dis=10*60;initSys();}if(num == 3){dis=20*60;initSys();}}}if(Moda2key == 0){i = 5;while(i--);if(Moda2key == 0){dis=dis+60;initSys();Delay(1000);}}if(Moda3key == 0){i = 5;while(i--);if(Moda3key== 0){dis=dis-60;initSys();Delay(1000);}}if(beep == 0){Delay(1000);break;}}while(1){xianshi();Modal2();Modal3();}}void initSys(){P3 = 0xff;T MOD = 0x01;T H0 = T0_H;T L0 = T0_L;E A = 1;E T0 = 1;d is1=dis/60/10;d is2=dis/60%10;d is3=dis%60/10;d is4=dis%60%10;}void Modal2(){i f(Moda2key==0){i=5;while(i--);if(Moda2key==0){TR0 = 0;bflag=1;while(Moda2key==0){xianshi();}}elseModa2key=1;}e lseM oda2key=1;}void Modal3(){i f(Moda3key==0){i=5;while(i--);if(Moda3key==0){TR0 = 1;bflag1=1;while(Moda3key==0){xianshi();}}elseModa3key=1;// bflag1=0;}e lseM oda3key=1 ;// bflag1=0;}void jishi(){i f(count++>5){count=0;if((dis4==0)&&(dis3==0)&&(dis2==0)&&(dis1==0)) {while(1) //yinyue{beep=0;Delay(10);beep=1;Delay(10);}}if(dis4--<1){dis4=9;if(dis3--<1){dis3=5;if(dis2--<1){dis2=9;dis1--;if(dis1<1){dis1=0;}}}}}}void xianshi(){C OM1=0;P3=display[dis1];D elay(5);C OM1=1;COM2=0;P3=display[dis2];D elay(5);C OM2=1;C OM3=0;P3=display[dis3];D elay(5);C OM3=1;C OM4=0;P3=display[dis4];D elay(5);C OM4=1;}void Delay(uint x){u int p,q;f or(p=x;p>0;p--)for(q=110;q>0;q--); }void time0() interrupt 1 {i f(count2++ >= 2) {count2 = 0;TH0 = T0_H;TL0 = T0_L;count1++;jishi();}}附录2:#include<reg51.h>unsigned char Count;sbit _Speak =P1^7 ;unsigned char code SONG[]={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 Time0_Init(){T MOD = 0x01;I E = 0x82;T H0 = 0xD8;T L0 = 0xEF; //12MZ晶振,10ms}void Time0_Int() interrupt 1{T H0 = 0xD8;T L0 = 0xEF;C ount++; //长度加1}void Delay_xMs(unsigned int x){unsigned int i,j;for( i =0;i < x;i++ ){for( j =0;j<3;j++ );}}void Play_Song(unsigned char i){u nsigned char Temp1,Temp2;u nsigned int Addr;C ount = 0; //中断计数器清0A ddr = i * 217;w hile(1){Temp1 = SONG[Addr++];if ( Temp1 == 0xFF ) //休止符{TR0 = 0;Delay_xMs(100);}else if ( Temp1 == 0x00 ) //歌曲结束符 {return;}else{Temp2 = SONG[Addr++];TR0 = 1;while(1){_Speak = ~_Speak;Delay_xMs(Temp1);if ( Temp2 == Count ){Count = 0;break;}}}}}void main(){Time0_Init(); //定时器0中断初始化 while(1){Play_Song(0); //播放}}附录3:#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define T0_H (65536-50000)/256#define T0_L (65536-50000)%256unsigned char Count4;unsigned char code SONG[]={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};sbit Moda1key = P1^4; //she chu zhisbit Moda2key = P1^5; //dao ji shisbit Moda3key = P1^6; // zan tingsbit beep = P1^7;sbit COM1 = P1^0;sbit COM2 = P1^1;sbit COM3 = P1^2;sbit COM4 = P1^3;uint i=5,num=0,num1=0,num2=0;bit bflag=0;bit bflag1=0;bit bflag2=0;uint dis1,dis2,dis3,dis4;static uint dis = 30;uint count=0,count1=0,count2=0;uchar display[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};void Modal2();void Modal3();void jishi();void xianshi();void initSys();void Delay(uint x);void Delay_xMs(unsigned int x);void Play_Song(unsigned char i);void YINYUE();void Time0_Int() interrupt 3{T H1 = 0xD8;T L1 = 0xEF;C ount4++; //长度加1}void Delay_xMs(unsigned int x){unsigned int i,j;for( i =0;i < x;i++ ){for( j =0;j<3;j++ );}}void Play_Song(unsigned char i){u nsigned char Temp1,Temp2;u nsigned int Addr;C ount4 = 0; //中断计数器清0A ddr = i * 217;w hile(1){Temp1 = SONG[Addr++];if ( Temp1 == 0xFF ) //休止符{TR1 = 0;Delay_xMs(100);}else if ( Temp1 == 0x00 ) //歌曲结束符 {return;}else{Temp2 = SONG[Addr++];TR1 = 1;while(1){beep = ~beep;Delay_xMs(Temp1);if ( Temp2 == Count4 ){Count4 = 0;break;}}}}}//void YINYUE()//{// //initSys(); //定时器0中断初始化// while(1)// {// Play_Song(0); //播放// }//}void main(){i nitSys();w hile(1){xianshi();i = 5;if(Moda1key == 0){while(i--);if(Moda1key == 0){TR0 = 0; //guan ding shi qinum++;Delay(1000);if(num == 1){dis=5*60;initSys();}if(num == 2){dis=10*60;initSys();}if(num == 3){dis=20*60;initSys();}}}if(Moda2key == 0){i = 5;while(i--);if(Moda2key == 0){dis=dis+60;initSys();Delay(1000);}}if(Moda3key == 0){i = 5;while(i--);if(Moda3key== 0){dis=dis-60;initSys();Delay(1000);}}if(beep == 0){Delay(1000);break;}}while(1){xianshi();Modal2();Modal3();}void initSys(){P3 = 0xff;T MOD= 0x11;T H0 = T0_H;T L0 = T0_L;TH1 = 0xD8;T L1 = 0xEF;E A = 1;E T0 = 1;d is1=dis/60/10;d is2=dis/60%10;d is3=dis%60/10;d is4=dis%60%10;}void Modal2(){i f(Moda2key==0){i=5;while(i--);if(Moda2key==0){TR0 = 0;bflag=1;while(Moda2key==0){xianshi();}}elseModa2key=1;e lseM oda2key=1;}void Modal3(){i f(Moda3key==0){i=5;while(i--);if(Moda3key==0){TR0 = 1;bflag1=1;while(Moda3key==0){xianshi();}}elseModa3key=1;// bflag1=0;}e lseM oda3key=1 ;// bflag1=0;}void jishi(){i f(count++>5){count=0;if((dis4==0)&&(dis3==0)&&(dis2==0)&&(dis1==0)){while(1) //yinyue{Play_Song(0);//YINYUE();}}}if(dis4--<1){dis4=9;if(dis3--<1){dis3=5;if(dis2--<1){dis2=9;dis1--;if(dis1<1){dis1=0;}}}}}void xianshi(){C OM1=0;P3=display[dis1];D elay(5);C OM1=1;C OM2=0;P3=display[dis2];D elay(5);C OM2=1;C OM3=0;P3=display[dis3];D elay(5);C OM3=1;C OM4=0;P3=display[dis4];D elay(5);C OM4=1;void Delay(uint x){u int p,q;f or(p=x;p>0;p--)for(q=110;q>0;q--);}void time0() interrupt 1{i f(count2++ >= 2){count2 = 0;TH0 = T0_H;TL0 = T0_L;count1++;jishi();}七、参考文献【1】徐爱筠.增强型8051单片机C语言编程与应用 .北京:电子工业出版社,2014 【2】谭浩强.C程序设计(第三版).北京:清华大学出版社,2005【3】王东锋,陈圆圆.单片机C语言应用100例.北京:电子工业出版社,2014 【4】冯博,王丽娜.项目式51单片机技术.北京:电子工业出版社,2014。