《毕业设计(论文)-单片机虚拟仿真实验室的建设(软件部分)(40页).doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-单片机虚拟仿真实验室的建设(软件部分)(40页).doc(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-毕业设计(论文)-单片机虚拟仿真实验室的建设(软件部分)-第 33 页本 科 毕 业 设 计单片机虚拟仿真实验室的建设(软件部分)The construction of single-chip computer virtual simulation lab学 院: 电子工程学院 专业班级: 电子信息工程 电子092班 学生姓名: 学 号:指导教师: 2013年 6 月毕业设计中文摘要摘 要:本设计是单片机虚拟仿真实验室的建设(软件部分)。为了解决单片机教学成本高,理论多,实验少的教学状况。本设计着重讨论单片机虚拟实验室的建设(软件部分)。主要使用proteus和keil软件来仿真,通过pro
2、teus设计连接电路图,用keil编译软件,从而实现虚拟仿真的功能。本设计进行了许多实验,运用proteus的电路设计功能和keil的软件编译功能,先从设计电路图开始,然后编写程序,主要使用容易移植的C语言,最后仿真,成功地仿真了许多实验,并列出了电路图,流程图,程序和仿真结果。我们能不用实物进行许多实验,达到节约成本的目的。仿真功能使学生摆脱了只学习理论知识,没有机会动手实践的学习窘境。操作简单,便于修改和操作起来几乎零成本的单片机虚拟仿真试验室给学生和工程师们提供了经济实惠而且实用的练习和实验平台。关键词: 单片机;proteus; keil;仿真。毕业设计外文摘要Abstract: Th
3、is is a design about construction of virtual simulation lab for SCM (software).In order to solve the problems of single chip microcomputer teaching.For example,too much theory teaching,too less experimental teaching and very highly cost.This design focuses on the software of construction of the virt
4、ual simulation lab for SCM. In this design, I uses proteus and keil to simulate.I use proteus to design the electric circuit and connect wires, use keil to compiler program, so as to achieve the goal that I can suimulate the experiment.This design has many experiments based on circuit design functio
5、n of proteus and software compiler function of keil .I design circuit diagram firs,then compile program.I use C language easy to transplant because C language is easy to transplant.At lastI simulation the experiments, many simulation are successful.In the design I list the circuit diagram, flow diag
6、ram, program and the simulation results.We can do many experiments without physical laboratory,so we can achieve the purpose of saving cost.Simulation function let many students get rid of the condition that learning too much theory knowledge and haveno opportunity to do experiments.The virtual simu
7、lation lab for single-chip computer which is easy to modify and operate,almost zero cost provides students and engineerswith a economical practice and experimental platform.Keywords: SCM;proteus;keil;simulation目 录1绪论11.1引言11.2可行性分析12软件及其功能22.1 proteus介绍22.2 Proteus的智能原理图设计22.3 Proteus中编辑编译源代码52.4 Pr
8、oteus系统调试窗口的使用83. 单片机虚拟实验室例程103.1 流水灯实验103.1.1 流水灯原理103.1.2 流水灯右移电路图103.1.3 流水灯右移流程图103.1.4 流水灯右移主程序113.1.5 流水灯右移仿真结果123.2 数码管显示123.2.1数码管显示原理123.2.2 数码管显示原理图123.2.3 数码管循环显示0F流程图133.2.4数码管循环显示0F主程序133.2.5 数码管循环显示0F仿真结果143.2.6 数码管动态显示原理153.2.7 数码管动态显示原理电路图153.2.8 数码管动态显示03流程图163.2.9 数码管动态显示03主程序163.2
9、.10 数码管动态显示03仿真结果173.3 矩阵按键173.3.1 数码管显示4*4矩阵键盘原理173.3.2 数码管显示4*4矩阵键盘原理图173.3.3 4*4矩阵键盘流程图183.3.4 4*4矩阵键盘主程序183.3.5 4*4矩阵键盘仿真结果203.4 蜂鸣器203.4.1 蜂鸣器播放生日歌原理203.4.2 蜂鸣器播放生日歌电路图203.4.3 蜂鸣器播放生日歌流程图213.4.4 蜂鸣器播放生日歌程序223.5 AD转换233.5.1 AD转换原理233.5.2 AD转换原理图233.5.3 AD转换流程图243.5.4 AD转换程序243.5.5 AD转换仿真结果253.6
10、点阵显示263.6.1 滚动点阵显示字符汉字原理263.6.2 滚动点阵显示字符汉字原理图263.6.3 滚动点阵显示字符汉字流程图273.6.4 滚动点阵显示字符汉字程序283.6.5 滚动点阵显示字符汉字仿真结果283.7 步进电机293.7.1 步进电机不断旋转原理293.7.2 步进电机不断旋转原理图293.7.3 步进电机不断旋转流程图303.7.4 步进电机不断旋转程序303.7.5 步进电机仿真结果313.8 lcd1602显示323.8.1 Lcd1602显示原理323.8.2 Lcd1602显示原理图323.8.3 Lcd1602显示流程图323.8.4 Lcd1602显示程
11、序333.8.5 Lcd1602显示仿真结果353.9 串口单向通信353.9.1 单片机通过串口控制另一个单片机LED原理353.9.2 单片机通过串口控制另一个单片机LED原理图363.9.3 单片机通过串口控制另一个单片机LED流程图363.9.4 单片机通过串口控制另一个单片机LED程序383.9.5 单片机通过串口控制另一个单片机LED仿真结果413.10 串口双向通信423.10.1 单片机之间双向通信原理423.10.2 单片机之间双向通信原理图423.10.3 单片机之间双向通信流程图423.10.4 单片机之间双向通信程序453.10.4 单片机之间双向仿真结果48结 论50
12、致 谢511绪论1.1引言单片机自从诞生以来,由于优点众多,被广泛应用于各个领域,包括常见的仪器仪表、普通家电、医疗器械设施的管理实现智能化和对使用过程的控制。毫无疑问,嵌入式系统作为现代电子最炙手可热的一个系统,单片机是其最为主要的部分。各种各样功能的单片机被开发制造出来,灵活性比较高,体积小巧, 也十分轻便,具备逻辑判断和定时计数等常用的功能,加上非常廉价,各个系列的单片机被不断地,大范围地应用在工业,商业,服务业等各个领域。参 考 文 献 徐晓栋等. 利用proteus软件构建单片机虚拟实验室期刊论文. 计算机与数字信息工程,2012年现代人快节奏的生活中几乎离不开电子产品,单片机几乎存
13、在于所有有电子器件的产品中。移动电话、DVD、各种大小家电、电子娱乐产品如游戏主机、电纸书、MP3甚至一些耳机等数码产品中都集成了单片机。一般的小型数码产品可能有几个单片机,较大的工具如家用轿车则有数十个单片机,在工业控制等较大型的系统中则有成百上千的单片机。单片机的数量如此惊人,甚至每年为了各类电子产品制造而生产出来的单片机数量都是亿数量级的。 韩丽娟等. 单片机的开发技巧及其应用研究期刊论文.科技信息,2009年34期单片机由于应用广泛,需要适应不同的功能和工作环境,所以需要很多修改和实验,不断完善设计来更好地实现需要的功能。在科学技术蓬勃发展的当今社会,计算机软件硬件都得到了快速的发展,
14、虚拟实验室技术也应运而生,众多的领域都用上了虚拟实验室这一开放式网络化的虚拟实验教学系统,单片机作为一门工业控制领域广泛应用的技术,单片机虚拟实验室的诞生也是必然的。 李学礼.基于Proteus软件的单片机实验室建设J.单片机与嵌入式系统的应,2005(9):5-6单片机虚拟实验室是基于Web技术,VR虚拟现实技术构建的开放式网络化的虚拟实验教学系统,为各个学科实验课程提供了一种全新的实验方法和教学环境。解决了单片机教学中的很多问题。单片机虚拟实验室在学校教学,工程人员设计开发,以及单片机初学者自学的过程中十分受欢迎,因此被广泛引用,目前国内的多数高校都根据自身教学需求建立了单片机虚拟实验室。
15、由于国内电子产业和计算机行业的飞速发展,逐渐追赶世界领先技术,对单片机等方面的人才需求肯定会增加,学习单片机的人越来越多,以及proteus等软件近几年在国内被认识和普及,单片机虚拟实验室只会朝着使用范围越广,使用越来越人性化,功能越来越多,总体技术日渐成熟的方向发展。总而言之,单片机虚拟实验室的前景广阔。从今往后,单片机虚拟实验室将给越来越多的单片机学习者提供更多的帮助,让越来越多的人更高效地学习单片机。 韩晓春,姜华.单片机虚拟实验室建设探索.科学时代,2006:13-161.2可行性分析理论可行性:Proteus是现今为止世界上最好的单片机仿真工具,是唯一将虚拟模型仿真软件、电路仿真软件
16、和PCB设计软件三合一的设计平台,通过proteus这款功能强大的EDA软件和keil这款适用于C语言的编译软件结合,先用proteus设计连接电路图,在用keil编译程序,使的单片机虚拟仿真试验室的建立变为可能。 刘映群.Proteus与keil整合构件单片机虚拟实验室.中国现代教育装备.2005,8经济可行性:虚拟实验室具有效率高,成本低,协作性和功能全的优点。单片机虚拟实验室也不例外,proteus和keil构建的单片机虚拟实验室,基本可以实现全部软件实验和大部分的硬件实验,硬件使用较少,使用keil软件编译程序,修改简单,可以反复修改,不需要任何成本,排除了元器件损坏和原材料的消耗等问
17、题,特别适合低成本的学校教学,帮助学生简单快速地掌握课堂内容,通过仿真锻炼了学生的动手和创新能力,避免了以往缺少实验,实践学习少的情况。 韩晓春,程明霄.单片机仿真实验平台的设计与开发.徐州工程学院学报,20072软件及其功能本设计重要使用proteus和keil软件结合来建立单片机虚拟实验室。2.1 proteus介绍Proteus是英国Labcenter electronics公司出版的EDA工具软件。是现今为止世界上最好的单片机仿真工具,是唯一将虚拟模型仿真软件、电路仿真软件和PCB设计软件三合一的设计平台。Proteus软件不但具有其它EDA工具软件的原理布图,PCB自动或人工布线和S
18、PICE电路仿真功能。还革命性地增加了互动的电路仿真和仿真处理器及其外围电路的功能。 周润景. PROTEUS入门实用教程.机械工业出版社. 2007,8在互动的电路仿真功能中,我们能实时采用RAM,键盘,ROM, LED,马达,LCD,AD/DA以及部分SPI器件和部分IIC器件。仿真处理器及其外围电路功能中,可以仿真51系列等常用单片机。而且能针对所画的原理图,编写在其基础上的程序,再结合显示输出结果,就能清晰地观察到电路运行之后信号输入输出的结果。甚至可以使用proteus拥有的各种虚拟仪器,比如示波器等,来更加全面的观察。Proteus所构建的设计开发电子的环境已经十分的完善。 乐江波
19、.环境温度机器人的设计与实现学位论文.西华大学,2010Proteus区别于别的单片机仿真软件的地方在于,对于单片机的外围电路的仿真,以及脱离了单片机的电路的仿真,这让学生以及单片机的初学者们在进行仿真调试的时候,不用再像以往一样拘泥于运行程序时,存储器,寄存器的变化这种比较细小的方面,反而能像现实的工程那样来观察程序,电路总体的运行经过和最终成果,更加能在实用的方面来调试程序。通过proteus实现的这种仿真,带来的好处是,解决了以往实验学习空洞效果低下,对实际工程作用不大的尴尬局面。 方怡冰.单片机课程的教学与实验改革期刊论文.电子电气教学学报,20062.2 Proteus的智能原理图设
20、计Proteus在设计方面十分具有优势,主要包括 广州市风标电子有限公司.Proteus电类专业教学实验与电子产品开发的最佳平台. 期刊论文.电子技术应用,2009(1) 丰富的器件库: 超过27000种元器件,可方便地创建新元件;(2) 智能的器件搜索: 通过模糊搜索可以快速定位所需要的器件;(3) 智能化的连线功能: 自动连线功能使连接导线简单快捷,大大缩短绘图时间;(4) 支持总线结构: 使用总线器件和总线布线使电路设计简明清晰;(5) 可输出高质量图纸:通过个性化设置,可以生成印刷质量的BMP图纸,可以方便地供WORD、POWERPOINT等多种文档使用。Proteus是一款非常强大的
21、画电路图的工具,具有非常多的元件,包含数字,模拟,交流,直流各种类型,主要的元件库见图2.2.1。图2.2.1作为一个仿真软件,在测试的仪器仪表的数量、类型和质量方面,proteus都达到了一款优秀仿真软件或者说实验室的条件,proteus的测试仪器仪表见图2.2.2。 朱清慧,张凤蕊.Proteus教程-电子线路设计制版与仿真.清华大学出版社,2008图2.2.2测试仪表是一个特点,另外,proteus库中还有一系列虚拟仪器,比如图形显示,电路运行过程中信号的变化,用图形即时显示出变化情况,类似于示波器,但事实上比示波器具有更多的功能。图形显示模块如图2.2.3。图2.2.3为了解决电路测试
22、问题,Proteus的库中的测试信号非常多样。模拟信号和数字信号都在其中,如图2.2.4。图2.2.4打开isis,进入画图界面后,我们就能通过左边的元件界面选择一些基础的元件了,如图2.2.5。图2.2.5在左侧找不到的元器件,可以在元件模式下调出元件库,输入名字寻找,如图2.2.6。图2.2.6根据不同设计选择需要的元器件,设置元件的属性,再进行连线,就能画出电路图。2.3 Proteus中编辑编译源代码Proteus中可以独立进行代码的编辑和编译,这就使它能够不依靠其他软件编译软件就能进行程序的编写和仿真,非常方便。我们用跑马灯的实验来进行proteus软件的程序编译示范。第一步,点击源
23、代码(英文Source)下的“添加删除源文件”。如图2.3.1。 图2.3.1第二步,选择单片机类型,在弹出的窗口选择所用的单片机类型,如图2.3.2,所用的是AT89C51,如果用的是其他单片机类型,就选择相应的。选择好以后,点新建,进入创建文件界面。图2.3.2 第三步,创建asm文件,在创建界面创建新文件时,asm后缀名必须加上,然后点打开。如图2.3.3。图2.3.3第四步,打开创建的文件,在源代码目录下,可以看到刚刚创建的文件,点击,如图2.3.4。图2.3.4第五步,编写编译程序,在弹出的程序编写窗口编写程序,如图2.3.5。编写完成后存档退出。再点源代码目录下的全部编译,如果没有
24、错误,就会弹出如图2.3.6的编译成功的提示。 图2.3.5图2.3.6第六步,加载运行,双击单片机,在弹出的窗口选择生成的hex文件,如图2.3.7。加载后,点小箭头运行。图2.3.72.4 Proteus系统调试窗口的使用在调试目录下,勾起如图2.3.8所示的四个选项,就能调出四个调试窗口,如图2.3.9,分别是单片机内部数据存储器,单片机寄存器,特殊功能存储器和代码的观察窗口。图2.3.8图2.3.9我们双击代码观察窗口中的程序语句,把它作为断点语句,就能以自己需要的进度来观察程序的运行状况,点代码观察窗口右上的全速运行图标,程序就会运行到断点语句那一步,如图2.3.10,灯到点亮P1.
25、2就停了。其它窗口也会跟着相应变化,只要对内部程序存储器特殊功能寄存器有一个相应的了解,我们就能比较顺利地调试和观察运行过程。图2.3.10由上述可见,proteus自带的编译器可以进行软件的编译,并能很好的观察程序运行时寄存器,存储器等的变化,然而,proteus的自带编译器规模比较小,它只能对一些简单的电路进行简单的程序编译,比如跑马灯,比较适合初学者,而且除了asm语言外不能支持C语言等其他语言的编写编译,于是,在进行较大电路的复杂程序编译的时候,还是需要结合其他编译软件一起使用才能满足用户的需求,即便如此,proteus作为一款EDA工具软件,已经十分强大了。本设计中很多实验prote
26、us自带编译器无法进行编译,所以结合keil来仿真。 马正强.单片机虚拟实验室的建立期刊论文.单片机与嵌入式系统应用,2005,3Keil介绍:Keil是一款51系列单片机软件开发系统,兼容C语言,它的诞生地在美国,由Keil Software公司出品。Keil包含了一个完整开发方案,通过一个集成开发环境将C编译器,连接器,库管理,宏汇编和一个功能强大的仿真调试器组合在一起。现在keil经过不断升级改良,在2009年推出了最新的KeilVision4,这次设计我用的是较老的版本KeilVision2,功能和兼容性完全足够使用。Keil本身也能进行一定程度的调试仿真,但是只能对程序进行调试修改,
27、不能直接看到硬件原理图和运行的结果,不能直观地让我们了解硬件的情况,proteus则刚好相反,只能在仿真调试时修改硬件,不能让我们看到软件程序的运行。而proteus和keil结合则既能观察到硬件的情况,同时还能看见软件程序的运行状况,双管齐下,容易找出设计软件和硬件中的错误,以便进行修改。 孙立香等.Proteus和keil软件在单片机中的应用期刊论文.科技资讯,2009Proteus和keil相结合建立的单片机虚拟实验室,拥有众多优点,成本低,操作简单,仅拥有电脑就能进行仿真实验,使学生摆脱了以往实践学习少,理论学习多的问题。 殷世勇. keil和Proteus在单片机实验教学中的应用期刊
28、论文.重庆大学工商学报(自然科学版),20093. 单片机虚拟实验室例程3.1 流水灯实验3.1.1 流水灯原理流水灯使用AT89C52单片机,在P0口接入排阻和八盏共阳极led灯,通过在P0口加低电平,使led灯发光,P0.0P0.7中某个口为低电平时,所连接的led灯发光,使P0.0P0.7依次为低电平并延迟一段时间,就能实现流水灯。 陈世宁.基于单片机的灯箱设计学术期刊.科技创新导报,2011年12期3.1.2 流水灯右移电路图图3.1.13.1.3 流水灯右移流程图定义j对j赋值1点亮左数第1+j个小灯延时对j赋值图3.1.23.1.4 流水灯右移主程序#include typedef
29、 unsigned char uint8; typedef unsigned int uint16; void delay(uint16 x) /定义延迟函数 uint16 i,j; /定义变量i,j for(i=x; i0; i-) for(j = 114; j 0; j -);void main() /主函数 uint8 j = 0; /定义变量j while(1) /大循环 P0=(0x80 j+); /点亮灯并右移 delay(200); /延时200毫秒 if(j = 8) j = 0;3.1.5 流水灯右移仿真结果图3.1.33.2 数码管显示3.2.1数码管显示原理数码管显示使用
30、AT89C52单片机,在P0口接入排阻和一个共阳极数码管,P0.0P0.6分别接数码管AG管脚,P0.7接H管脚,在P1口加低电平来点亮数码管,P0.0P0.7中哪个为低电平时,所连接的管脚就被点亮,同一时间控制P0.0P0.7中某几个的电平高低,就能显示需要显示的数字或字母。3.2.2 数码管显示原理图图3.2.13.2.3 数码管循环显示0F流程图定义无符号整型数组LED_CODE 对LED_CODE赋值 LED_CODELED_CODELED_CODELED_CODELED_CODELED_CODE1数码管显示定义i对i赋值图3.2.23.2.4数码管循环显示0F主程序#include
31、typedef unsigned char uint8;typedef unsigned int uint16;code uint8 LED_CODE = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E; /定义LED_CODE并赋值void delay(uint16 x) / 延时程序 uint16 i,j;for(i = x; i 0; i -)for(j = 114; j 0; j -);void main() /主程序uint8 i = 0; /定义i并赋值while(1)
32、 /大循环for(i=0;i16;i +) /对i赋值P0 = LED_CODEi; /led显示P0口输入的值delay(500); /延时 3.2.5 数码管循环显示0F仿真结果图3.2.33.2.6 数码管动态显示原理使用AT89C52单片机,在P0口接入4个共阳极数码管,4个数码管的AG和H管脚都接入P0.0P0.7口,四个数码管的公共极分别通过电阻接入P3口的P3.0P3.3,因为是共阳极,所以只有在P3输出是高电平时,对应的数码管才能被点亮,所以通过控制P3.0P3.3口电平的高低,就能控制数码管的位选,加上P1口控制数码管的段选,就能实现数码管动态显示。3.2.7 数码管动态显示
33、原理电路图图3.2.43.2.8 数码管动态显示03流程图定义无符号整型数组LED_CODE 对LED_CODE赋值 LED_CODELED_CODELED_CODELED_CODELED_CODELED_CODE1数码管显示 定义i对i赋值图3.2.53.2.9 数码管动态显示03主程序#include typedef unsigned char uint8;typedef unsigned int uint16;code uint8 LED_CODE = 0xC0,0xF9,0xA4,0xB0; /定义LED_CODE并赋值void delay(uint16 x) /延时程序uint16
34、i,j;for(i = x; i 0; i -)for(j = 114; j 0; j -);void main() /主程序uint8 i; /定义变量iwhile(1) /大循环for(i = 0; i 4; i +) /对i赋值P3 = 0x01 i; /选定第i个灯P0 = LED_CODEi; /显示P0口输出的内容delay(250); /延时3.2.10 数码管动态显示03仿真结果图3.2.63.3 矩阵按键3.3.1 数码管显示4*4矩阵键盘原理使用AT89C52单片机,在P0口通过上拉电阻接入共阴极数码管,P0.0P0.6分别接数码管AG管脚,P1口接入4*4的矩阵键盘,从左
35、到右第1,2,3,4列按键的左引脚分别接P1.0,P1.1,P1.2,P1.3。从上到下第1,2,3,4行按键的右引脚分别接P1.4,P1.5,P1.6,P1.7。通过程序使按下不同键时P0口输出不同的电平来使数码管显示不同字母和数字,从而实现码管显示4*4矩阵键盘。3.3.2 数码管显示4*4矩阵键盘原理图图3.3.13.3.3 4*4矩阵键盘流程图定义k_code1数码管显示判断Key() 延时开始 定义i图3.3.23.3.4 4*4矩阵键盘主程序#include typedef unsigned char uint8;typedef unsigned int uint16;code u
36、int8 LED_CODE = 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71; /定义led显示代码void delay(uint16 x) /延时程序uint16 i,j;for(i = x; i 0; i -)for(j = 114; j 0; j -);uint8 Pre_KeyNO = 16,KeyNO = 16;void Keys_Scan() /键盘扫描程序 uint8 Tmp;P1 = 0x0f; /低四位输入 高四位输出delay(1);Tmp = P1 0x0f;
37、 /异或switch(Tmp) /判断读到的列标,将列标存入KeyNO case 1: KeyNO = 0; break; /00000001 第1列有按键按下case 2: KeyNO = 1; break; /00000010 第2列有按键按下case 4: KeyNO = 2; break; /00000100 第3列有按键按下case 8: KeyNO = 3; break; /00001000 第4列有按键按下default: KeyNO = 16;P1 = 0xf0; /高4位输入,低4位输出delay(1);Tmp = P1 4 0x0f; /高四位读到的值移到第四位再异或 sw
38、itch(Tmp) case 1: KeyNO += 0; break; /若为第1行,则列标即为键值case 2: KeyNO += 4; break; /若为第2行,则列标+4为键值case 4: KeyNO += 8; break; /若为第3行,则列标+8为键值case 8: KeyNO += 12; /若为第4行,则列标+12为键值void main()P0 = 0x00;while(1) P1 = 0xf0; /p1高四位作为输入,低四位输出if(P1 != 0xf0) /读到P1 != 0xf0,即有按键按下Keys_Scan(); /若有键按下,则扫描 if(Pre_KeyNO
39、 != KeyNO) P0 = LED_CODEKeyNO; /判断是否有新的按键按下Beep();Pre_KeyNO = KeyNO; /把新得到的键值赋给先前键值变量delay(10);3.3.5 4*4矩阵键盘仿真结果图3.3.33.4 蜂鸣器3.4.1 蜂鸣器播放生日歌原理使用AT89C52单片机,在P3.0口通过电阻接入一个蜂鸣器,在P1.0接入一个双向开关,一端接地,一段接高电平,通过程序编译生日歌的音符,并使开关接高电平时,蜂鸣器运行播放音乐程序,从而实现蜂鸣器播放生日歌。3.4.2 蜂鸣器播放生日歌电路图图3.4.13.4.3 蜂鸣器播放生日歌流程图位定义K1,BUZZER定义
40、频率表,节拍表yes响起音乐延时开关接高电平no图3.4.23.4.4 蜂鸣器播放生日歌程序#include typedef unsigned char uint8;typedef unsigned int uint16;sbit K1 = P10; /位定义K1sbit BUZZER = P30; /位定义BUZZERcode uint8 SONG_TONE= 212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,129,169,190,119,119,126,159,142,159,0; / 音符频率表,延时不同频率
41、不同code uint8 SONG_LONG= 9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0; /音符节拍表,节拍不同,演奏长短不一void delay(uint16 x) /延时程序uint16 i,j;for(i = x; i 0; i -)for(j = 114; j 0; j -);void PlayMusic() /音乐程序 uint16 i =0,j,k;while(SONG_LONGi!=0|SONG_TONEi!=0) for(j=0;jSONG_LONGi*20;j+) /播放各个音符
42、,SONG_LONG 为拍子长度 BUZZER = BUZZER;for(k=0;kSONG_TONEi/3;k+); /SONG_TONE 延时表决定了每个音符的频率delay(10);i+;void main() /主程序P1 = 0xFF;while(1) /大循环if(K1=1) /判断开关是否接高电平PlayMusic();delay(1000); /延时3.5 AD转换3.5.1 AD转换原理使用AT89C52单片机,在单片机P0口接入一个6位共阳极led数码管,数码管的AG和DP脚接到单片机的P0.0P0.7。数码管的16脚通过施密特触发器接到单片机的P2.0P2.5。单片机的P1.0和P1.1接到一个AD转换器ADC0804的WR和INTR引脚,P3.0P3.7接到ADC0804的DB0DB7,在ADC0804的VIN+接入一个滑动变阻器的滑动端,滑动变阻器的一端接高电平,另一端接地。VIN-通过一个电容接到CLKIN端,CLKR端通过一个电阻也接到CLKIN端,VREF/2端接一个电源,CS,RD,AG