TX-1B单片机实验板使用手册-good_第1页
TX-1B单片机实验板使用手册-good_第2页
TX-1B单片机实验板使用手册-good_第3页
TX-1B单片机实验板使用手册-good_第4页
TX-1B单片机实验板使用手册-good_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

TX-1B单片机实验板使用手册TX-1B单片机实验板使用手册目录TX-1B单片机实验板使用手册11 WAVE使用说明32 KEIL的使用93 STC-ISP软件的使用。174 Easy 51pro 软件使用235 TX-1B单片机实验板各功能实验详解265.1闪烁灯285.2流水灯295.3单键识别325.4矩阵键盘检测345.5利用定时器和蜂鸣器唱歌425.6模数转换ADC0804的应用465.7 数模转换DAC0832的应用505.8 DS18B20温度测量显示实验525.9 59秒计数器605.10 1602字符液晶显示635.11 12864点阵液晶显示实验665.12 串口通讯实验78联系方式821 WAVE使用说明目前应用在单片机的编程语言主要有汇编语言和C语言,汇编语言相对C语言来说执行效率较高,但编程啰嗦烦杂,程序的可移植性较差,也就是说用户对某个芯片或电路编写的驱动程序只在一套电路板上可使用,而当换个电路后用户又要自己重新编写这套驱动程序。这样就在使用的过程中带来了不少麻烦,其次其指令很多,也不方便记忆,因此我建议初学者直接学习用C语言给单片机编程就可以,无需学汇编语言。从我个人就两种语言都会的角度来看,无需知道一点汇编知识直接学C语言同样完全可以学好单片机。本实验板所配的例程大部分由C语言编写成。因此在本手册中的例程讲解大多采用C语言,有各别几个用汇编语言。下面首先讲解WAVE编译器的使用方法.1. 安装SETUP文件(建议安装在C盘下)。2. 复制光盘:软件编译器下的COMP51整个文件夹到C盘目录下。WAVE编译程序时用的编译器就在这个文件夹里面,这一步务必做。3. 首次启动后,编辑框内会有几个默认的程序加载,大家不用管它,选择“文件-关闭项目”将它们关闭。4. 如果你想用WAVE公司标准的建立工程项目的方法建立你的项目,那么请点击“帮助-WAVE6000使用手册”这里面讲的非常仔细,对于这种标准程序我在这里就不再讲了。5. 但是如果你要用另一种比较简单的方法快速的建立项目呢,可按照我下面的方法来做,我已使用多年,保证没有问题。5.1关闭所有已打开的项目5.2如果你没有硬件仿真器,那只能用软件仿真,请这样设置:点击“仿真器-仿真器设置“分别按以下四幅图设置。5.3点击新建文件图标后会在编译框内出来一个以NONAME为标题的空文本,如下图: 此时的保存按钮为灰色,原因是文本框内没任何字符,所以无法保存任何东西,接下来我就TX-1B单片机开发板上点亮与单片机P1.0口相连的一个发光二极管为例,详细介绍WAVE的使用方法:在上图新建的NONAME1编辑框内输入以下字符:/本程序为点亮与单片机P1.0口相连的发光二极管注意:/后面的字符在C语言中为注释,不参与编译,在C语言中注释有两种方法:一种方法是加“/“,如果有多行注释,每行都需要加/;第二种方法用“/*这里为注释.*/”,不加双引号,两个*中间为注释。 此时再查看保存按钮已变成可点击状态,我们点击保存按钮,弹出如下对话框,你可以自己先建立一个你自己的文件夹,将刚才建立的文件命名为test1.c,如下图所示。test1这个名字你可以自己取,但是后面必须要以.c结束,因为我们写的是C语言程序,(汇编语言,以*.asm为名)。 写好文件名字后点SAVE保存文件,此地会发现编译框内的文字颜色发生了变化,这说明此时的文字内容已经变成可以被编译器所识别的字符。5.4 接着在文本框内再输入以下信息#include sbit light1=P10;void main() light1=0;注意:(1)#include 意思是将reg51.h头文件的内容全部放到本行处,该文本内容是51单片机各引脚地址及其内部寄存器地址定义,若要看详细的内容请打开C:COMP51 下reg51.h文件查看,该文件夹下还有其他常用到的头文件。 (2)sbit light1=P10; 把单片机的P1.0口定义成light1,你可以自己随便取你喜欢的名字,但sbit *=P10;格式不可变。 (3)void main() 无返回值型主函数,如果还不懂那请自己回去看C语言吧。 (4) light1=0; 将P1.0口置为低电平,在单片机的C语言中,高电平用“1“来表示,低电平用”0“来表示。输入完上面的文字后点击编译快捷按钮,如果输入没有错误则会在下面的信息窗口中显示若干个对勾,如下图所示:注意:编写程序时必须是严格的C语言格式,在编辑框中不能有多余的字符出现,建议初学者从一开始就要差成一个好的编程习惯和自己的编程风格,要及时的为每一模块函数加上注释说明,不该多写的地方不要多写,不能少写的地方不要少写,这样对将来编写大规模程序有会有很好的帮助。当点击完编译按钮后若出现上图信息窗口中显示的信息,那说明你写的程序已经成功编译,并且已经在你保存文件的目录下面生成了可往单片机内下载的BIN和HEX文件。2 KEIL的使用 2.1 安装,请自己仔细看配套光盘里的安装说明。 2.2 安装成功后,首次启动界面如下图:2.3 我们先新建一个工程文件,点击“Project-New Project”.选择工程文件要存放的路径,并且输入工程文件名,这里我们用test2作为工程文件名,这里就不用在后面加.c了。图片如下:2.4 点击Save 后弹出选择CPU及型号的对话框:2.5 由于本实验板所配的单片是STC公司的,而KEIL中并没有STC公司的产品,不过STC公司的单片机和传统的51单片机是兼容的,所以这里我们就选择Atmel公司的AT89C52。2.6 新建一个C51文件,单击左上角的New File 如下图所示:2.7 保存新建的文件,单击保存按钮。2.8 输入文件名test2.c,这里必须以*.c为文件名。2.9 保存好后我们还需要把文件加入到工程项目中,如下图所示在Source Group1 上单击右键,选择Add Files to Group Source Group12.10 然后选择刚才建立的test2.c文件,单击Add。这时我们看左边工程信息窗口中的Source Group1 下面多了test2.c文件,这说明添加文件成功了。2.11 在编辑框内输入下列字符2.12 接着我们编译工程项目,如下图点击编译如果在下面的信息窗口中显示0 Error(s),0 Warning(s).则说明没有错误,已经成功编译。2.13 接下来我们生成.HEX文件,如下图点击Option for Target.2.14 在下图我们单击Output 选中Create HEX File,再单击OK。2.15 再次点击编译按钮就会在文件目录下生成test2.hex文件。到此为止,您已经学会了如何使用WAVE和KEIL编译文件并生成能够往单片机中烧写的BIN和 HEX文件了,下面我们讲解如何使用STC-ISP和easy 51 Pro给单片机下载程序。3 STC-ISP软件的使用。3.1安装光盘软件目录下的stc_isp_3.1文件夹中的安装文件注意:有些用户无法正常安装此程序,这可能跟你的系统中原来安装的某些程序有冲突,你可以按照以下的方法来安装。1.打开光盘软件目录下的STC解压版将里面所有的以DLL和OCX为后缀名的文件复制到系统windowssystem32下面. 替换此目录下原来有的,但大小为0的文件.如果没有就直接复制那里.如果复制的时候说*文件正在被使用,那就把电脑重起一下再重新复制一次。(如果你的系统没有显示后缀名,请先在文件夹选项中选中显示文件后缀名,这我就不教你了),如果还不能成功,那最后最绝的一招,重装系统。如下图类似这样的文件即为DLL和OCX为后缀名的文件1. 然后直接双击该目录下的STC-ISP V29 Beta5 可执行文件,如图:3.2安装完软件后,启动,首次设置时只需注意芯片的选择,在左上角下拉框中选择STC89C52RC,一般的台式机大多只有一个串口,所以COM栏就选择COM1,如果使用别的串口那就选择相应的串口号,其它全部使用默认,不明白时最好不要乱改,不然可能会把芯片锁死,以后就用不了了。总体设置如下图: 注意:使用笔记本的用户如果笔记本没有串口,那请你去电子市场购买USB转串口线,一般价格是五六十元,但往往便宜的东西总是不太好用,我建议你买的时候向商家问问,要好点的那种,因为STC公司下载软件对这种虚拟的串口比较挑剔,使用这种线的时候建议用户把波特率改为9600.3.3软件安装设置完后,接下来我们讲如何连接硬件实验板,先看下面的连接图,用手机照的不是非常清楚,清注意下面的讲解。首先要保证实验板上插的是STC89C52RC单片机,左上方的USB数据电缆线一定要与计算机相连,它一方面实现USB通信,更重要的是给整块电路板提供电源。当连好USB线后,按下左上方的开关,会看到开关右边有个电源指示灯会亮。左下方的九孔串口线与计算机串口相连,(上图板上串口旁边有个指示灯是亮的,但这并不能说明你的计算机串口是好的或是串口线已经成功连接,这个指示灯的作用主要是下载程序的时候指示正在下载,或是单片机与计算机进行双向串行通信的时候小灯会不停的闪烁,告诉用户通信正在进行。若为单向只发送数据或只接收数据,小灯不一定会亮,这里请用户注意)3.4连接好了硬件也设置好了软件,下面就要下载程序了, 如下图点击软件界面上的Open File 打开对话框,将刚才我们用WAVE编译生成的test1.hex文件选择,大家注意下图中选择框内第一个文件没有后缀名,它实际上是test1.bin,这两个文件是一样的,只是后者比前者要小的多,在下载比较大的程序时我们常用后者。选择好后点击Open 3.5选择好后,要先把实验板上的电源关掉,因为STC的单片机内有引导码,在上电的时候会与计算机自动通讯,检测是否要执行下载命令,所以要等点完下载命令后再给单片机上电。然后点击如下图的Download/下载钮,接着按下实验板上电源给单片机上电,上电后的图片如下所示:若也现上述图片,则说明已经给单片机成功下载了程序,并且已经加密,别人无法破解。成功下载程序后实验板如下图所示,注意左上方八个流水灯中最上方那个点亮了。4 Easy 51pro 软件使用这款软件是专门针对产品附件中附带的AT89S52单片机下载程序的软件,其实如果你不想用这块片子也可以,STC的下载软件可在任何一台电脑上使用,可这款软件就没那么乖了,原来设计产品的时候也没想着用STC的芯片,后来发现这款芯片非常的好用,就换了这款,AT89S52也就一起送给用户了,如果你的电脑经过我下面讲的这些步骤后仍然无法使用,你也别难过,这款芯片就这样,反正也是我送你的,你就安心用STC单片机吧。4.1进入电脑主板BIOS,将并口模式设置为ECP模式,如果没有ECP模式那就不用更改了。确保实验板上的单片机是AT89S52。4.2接好USB电缆线和ISP下载线(电脑端为并口25针,单片机实验板上为白色六针插座)这时连不连串口线都没关系。4.3打开附件光盘中软件目录下的ISP下载器文件夹下的easy 51pro.exe,首次设置如下,每次更改设置后都要把软件关闭,再重新打开更改才能生效。4.4打开单片机开发板上的电源,如果电源接通电源指示灯会亮,这时有可能连复位指示灯也会亮,这是由计算机并口的电流反窜到实验板上的原因。我们不用理它,对下载程序没有影响,但是当成功下载完程序后最好把实验板上的ISP下载线与计算机断开,不然程序可能会运行不正常。点击检测器件,如果你的计算机并口正常,那么会显示如下图所示信息。如果没有检测到器件,那你就省点心,还是使用STC89C52吧!4.5在检测到器件的前提下,接下来先擦除器件,再选打开文件,将你用WAVE或KEIL编译好的BIN或HEX文件选中,点击写器件,完成烧写。到此为止已经非常详细的讲述了如何用WAVE、KEIL编译源程序生成下载文件,如何使用STC-ISP、Easy 51pro 下载bin和hex文件。5 TX-1B单片机实验板各功能实验详解注意:在我要讲具体实验之前这里有必要先介绍一下本实验板上用到的一些元件的操作方法,对于一个电子制作者或者是爱好者来说学会怎么样搜索自己需要元件的资料是非常重要的,现在市场上各种各样的芯片非常的多,能实现同一个功能的芯片也有很多种,世界各大芯片制造公司(除了中国)都有生产。所以我们不可能把芯片的功能、名称及详细使用方法都记全,也没有这个必要,但是必须要知道在你需要实现某个功能的时候怎么样才能找到合适的芯片,下面先给大家推荐两个搜索网站:中国最大的搜索网站和世界最大的搜索网站,上面几乎可以搜到你需要的任何信息,大家一定要充分利用身边可利用的资源,问别人是最没有办法的办法,也是最无能的体现。闲谈:我常在QQ群里碰到问类似这样问题的人“谁有AD590的资料?”一看就知道是个非常菜的鸟,遇到这种问题我理解当事人当时的心情,所以很热情的告诉他“上下载”,大约半个小时后刚才提问题的那位菜先生又来一句“终于找到了,不过全是英文的,谁有它的中文资料啊?”,我只好告诉他“什么时候中国能制造自己的芯片了就有中文资料了,你加油吧!”现在可以明确的告诉大家,芯片的资料基本全是英文的,大家学了这么多年英文,现在正是你用它的时候了,对于电子爱好者看芯片的英文介绍就应该达到看汉语一样的水平,建议大家以后装软件全装英文版的,看电影全看国外原声的,最好连自己的电脑操作系统也装英文版的。 说正事,给大家介绍两个查芯片资料的网站: 这里的芯片资料相当的全,如果没要找到你要的那请看下面这个网站,这里有世界上所有的芯片资料,并且每天更新一次。 锁存器(74HC573):顾名思义,就是把输入端的数据锁存(或送)到输出端,请看下图中的U3元件,第11角(锁存端)为高电平的时候,右边D0-D7的输入与左边Q0-Q7的输出是直通的,就是说,右边是什么电平,左边就是什么电平,可以把它当作不存在。当第11角为低电平的时候,左右两端就被断开了,无论输入端怎么变化,输出端都不会变化,当第11角由低电平变为高电平的一瞬间,输入端的数据会被立即送到输出端,如果此时我们再次把第11角设置为低电平,那么以后当输入端无论再怎么变化,输出端都不会变化而是保持刚才下降沿时输入端的值,这样就达到了锁存数据的目的,这也就是所谓的总线设计思路,一个8位的数据线加一个锁存器后就可以接多个元件,当选通哪个元件的片选,就送数据给那个元件。先说这个元件吧,以后用到别的元件我们再解释。下面开始讲解例程。5.1闪烁灯实验要求点亮与单片机P1.0口相连的发光二极管,延时0.2S,然后熄灭,延时0.2S,再点亮,如此循环下去。实验目的 初步了解单片机IO口输出高低电平的作用,延时函数的时间估算。硬件电路源代码#include/* 上面这行是一个文件包含处理。所谓文件包含是指一个文件将另外一个文件的内容全部包含进来这里的程序虽然只写了一行,但C编译器在处理的时候却要处理几十或几百行,这里包含reg51.h的目的在于本程序要使用P1这个符号,而P1是在reg51.h这个头文件中定义的。大家可以在编译器目录下面用记事本打开这个文件看看。*/sbit P1_0=P10; /定义IO口这步的目的是让编/译器知道P1_0代表的就是单片机的P1.0口void delay02s(void) /延时0.2秒子程序 unsigned char i,j,k; /定义3个无符号字符型变量。 for(i=20;i0;i-) /三个FOR循环用来延时,这里为 for(j=20;j0;j-) /什么是0.2S大家可以用WAVE for(k=248;k0;k-); /高断点仿真一下,就可知道大概 /是0.2S了。 void main(void) /每一个C语言程序有且只有一个主函数, while(1) /循环条件永远为真,以下程序一直执行下去。 P1_0=0; / I/O口P1.0输出低电平,小灯被点亮。 delay02s(); /延时经过0.2秒。 P1_0=1; / I/O口P1.0输出高电平,小灯熄灭。 delay02s(); /延时经过0.2秒。 5.2流水灯实验要求单片机P1口相连的8个发光二极管中的一个循环移位点亮,同时蜂鸣器发出滴滴的响声。蜂鸣器用一PNP三极管驱动,集电极(C极)通过蜂鸣器线圈接5V电源,基极(B极)是控制端,发射极(E极)接地,当三极管C,B极PN结正偏时,PN结导通,即B极为低电平时,三极管导通,蜂鸣器响。再不明白去看模电书。实验目的 掌握循环移位的工作原理,学会使用封装好的函数库,延时函数的时间估算。硬件电路源代码/flow light and beep #include #include /后面要用到它里面的_crol_(k,l)函数/这个函数的意思是把一个字符变量k循环左移l位,关于它的说明/请查看安装KEIL目录下的E:Program FilesKeilC51HLP文件夹/里面的c51lib,这个文件里面有各种用C语言封装好的函数库,我/们在以后使用其中某些函数时可以直接使用而自己不必再写。unsigned char a,b,k,j; /定义四个字符变量sbit beep=P23; / 定义蜂鸣器的接口void delay10ms() /延时字程序,大约延时10ms for(a=100;a0;a-) for(b=225;b0;b-); void main() k=0xfe; /先给k一个初值11111110等待移位 while(1) delay10ms(); beep=0; /打开蜂鸣器 delay10ms(); /让它响10ms beep=1; /关闭蜂鸣器 j=_crol_(k,1); /把k循环左移一位 k=j; /把移完的值再送给k P1=j; /同时把值送到P1口点亮发光二极管 5.3单键识别实验要求每按一次独立键盘的S2键,与P1口相连的一个发光二极管往下移动一位。注意:关于按键去抖动的解释,我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms左右,如果我们再首次检测到键被按下后延时10ms左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认。以上为按键识别去抖动的原理。实验目的 独立按键的识别。硬件电路源代码#include sbit BY1=P34; /定义按键的输入端S2键unsigned char count; /按键计数,每按一下,count加1unsigned char temp;unsigned char a,b;void delay10ms(void) /延时程序unsigned char i,j;for(i=20;i0;i-)for(j=248;j0;j-);key() /按键判断程序if(BY1=0) /判断是否按下键盘,当单片机上电时所有IO口为/高电平,S2键一端接地另一端接P3.4,所以当键被按下时P3.4口/直接接地,此时检测P3.4肯定为低电平。 delay10ms(); /延时,软件去干扰 if(BY1=0) /确认按键按下 count+; /按键计数加1 if(count=8) /计8次重新计数 count=0; /将count清零 while(BY1=0);/等待按键释放,如果键未释放则一直在此等待。 move() /广告灯向下移动移动函数a=temp(8-count);/ _crol_()函数P1=a|b;main() count=0; /初始化参数设置 temp=0xfe; P1=0xff; P1=temp; while(1) /永远循环,扫描判断按键是否按下 key(); /调用按键识别函数 move(); /调用广告灯移动函数 5.4矩阵键盘检测实验要求依次按下4*4矩阵键盘上从第1到第20个键,同时在六位数码管上依次显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。说明:本实验板上数码管为共阴极。静态数码管显示原理:这里就共阴极数码管显示原理进行讲解,一位数码管内一共有8个发光二极管,对共阴极来说其8个发光二极管的阴极在数码管内部全部接在一起,也就是“共阴”说法的来源,阳极是独立的,设计电路时一般把阴极接地,当我们从外部给任一个阳极加一个高电平时这个发光二极管就亮了,如果想要出一个8字,并且把右下角的小数点也点亮的话,那可以给8个阳极全总送高电平,想出几就给相对应的发光二极管送高电平,因此我们在显示数字的时候首先做的就是给0-9十个数字编好码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。另外说一下,一般的数码管每一段亮至少需要10个毫安的电流,而单片机的IO口送不出如此大的电流,所以我们需要加数码管的驱动电路,可以用上拉电阻的方法,也可以使用专门的驱动芯片,本实验板使用的74HC573,它最大可以输出500毫安的电流,足够让数码管点亮了。本实验板上的六位数码管上相同段(段指a,b,c,d,e,f,g,h)全部是接在一起的,其中每一个位(阴极)是独立的,所以在做静态显示的时候所有的数码管只能显示相同的数字,当然你可以控制显示几位,如果你让它们静态不同的数字那就得给每一个数码管加一套驱动电路了。但这样做是没有必要的,后面我们会讲到关于数码管动态显示原理。 下面给出本实验板共阴极数码管数字编码 矩阵键盘的四行分别与P3.0-P3.3连接,四列分别与P3.4-P3.7连接。实验目的 学会矩阵键盘的检测,掌握数码管静态显示原理。硬件电路 键盘电路见5.3源代码/4*4键盘检测程序,按下键后相应的代码显示在数码管上#includesbit beep=P23; /蜂鸣器接口sbit dula=P26; /控制数码管段选的锁存器锁存端sbit wela=P27; /控制数码管位选的锁存器锁存端unsigned char i=100;unsigned char j,k,temp,key;void delay(unsigned char i) /可自定义延时长短的延时函数 /当i=10时大约为10毫秒 for(j=i;j0;j-) for(k=125;k0;k-);unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; / 0-F编码display(unsigned char num) / 显示子函数 P0=tablenum; /将第num个显示编码送P0口 dula=1; /一个下降沿将数据锁存 dula=0; P0=0xc0; /位选通全部的数码管 wela=1; /一个下降沿将数据锁存 wela=0;void main() dula=0; /使两个锁存器不可直通 wela=0; while(1) /进入检测总循环 P3=0xfe; /给P3.0送低电平,其余为高电平 temp=P3; /把P3口数据读回来 temp=temp&0xf0; /把P3口与11110000相与 if(temp!=0xf0) /如果有键按下刚一定不相等,于是进入/下一步检测 delay(10); /延时去抖动 if(temp!=0xf0) /再次判断是否有键按下 temp=P3; /判断为有,再次读P3口数据 switch(temp) /因为我们刚才是将第一行置的低 /在这里再判断是第几列 case 0xee: /如果temp=0xee则为第一行和第一列 key=0; /的交叉点,由此我们知道是矩阵键盘 break; /上的第一个键被按下,我们给key=0。 case 0xde: /以后依此类推 key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; while(temp!=0xf0) /这段程序是检测按键是否被释放 temp=P3; /如果没有释放就一直等待并且 temp=temp&0xf0; beep=0; /蜂鸣器一直响 beep=1; /释放后关闭蜂鸣器 display(key); /显示按下相应键值的数据 P1=0xfe; /将第一个发光二极管点亮(我写 /程序的时候测试用的) P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; display(key); P1=0xfc; P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; display(key); P1=0xf8; P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; display(key); P1=0xf0; 5.5利用定时器和蜂鸣器唱歌实验要求用单片机的P2.3口输出不同占空比的方波来控制与它相连的蜂鸣器,当方波的占空比不同时蜂鸣器发出的音调就不同,由此根据歌曲的音调编程实现让蜂鸣器唱歌。占空比:一个周期中,高电平的长度比上总周期的长度的值再乘上100%。标准方波的占空比为50%.实验目的 学会利用单片机的定时器,掌握蜂鸣器的发声操作。硬件电路源代码#include reg51.hunsigned char Count;sbit _Speak =P23 ;/蜂鸣器控制脚unsigned char code SONG = /祝你平安0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,/路边的野华不要采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() /定时器0初始化函数TMOD = 0x01; /工作模式选择IE = 0x82; /中断设置TH0 = 0xD8; /装初值TL0 = 0xEF; /12MZ晶振,10msvoid Time0_Int() interrupt 1 /定时器0中断子函数TH0 = 0xD8;TL0 = 0xEF;Count+;/长度加1/*-功能:1MS延时子程序-*/void Delay_xMs(unsigned int x) unsigned int i,j; for( i =0;i x;i+ ) for( j =0;j3;j+ ); /*-功能:歌曲播放子程序i为播放哪一段曲目-*/void Play_Song(unsigned char i)unsigned char Temp1,Temp2;unsigned int Addr;Count = 0;/中断计数器清0Addr = i * 217;while(1)Temp1 = SONGAddr+; if ( Temp1 = 0xFF ) /休止符 TR0 = 0; Delay_xMs(100); else if ( Temp1 = 0x00 ) /歌曲结束符 return; else Temp2 = SONGAddr+; TR0 = 1; while(1) _Speak = _Speak; Delay_xMs(Temp1); if ( T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论