基于51单片机的音乐播放器制作(共32页).doc

上传人:飞****2 文档编号:13651235 上传时间:2022-04-30 格式:DOC 页数:32 大小:371KB
返回 下载 相关 举报
基于51单片机的音乐播放器制作(共32页).doc_第1页
第1页 / 共32页
基于51单片机的音乐播放器制作(共32页).doc_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《基于51单片机的音乐播放器制作(共32页).doc》由会员分享,可在线阅读,更多相关《基于51单片机的音乐播放器制作(共32页).doc(32页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上的简介:AT89C51:是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

2、AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。主要功能特性:1) 与MCS-51 兼容;2) 4K字节可编程FLASH存储器;3) 全静态工作:0Hz-24MHz;4) 1288位内部RAM;5) 两个16位定时器/计数器;6) 5个中断源;7) 可编程串行通道;8) 低功耗的闲置和掉电模式;9) 片内振荡器和时钟电路。AT89C52:是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统

3、,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。主要功能特性:1) 兼容MCS51指令系统;2) 8kB可反复擦写(大于1000次)Flash ROM;3) 32个双向I/O口;4) 256x8bit内部RAM;5) 3个16位可编程定时/计数器中断;6) 时钟频率0-24MHz;7) 2个串行中断,可编程UART串行通道;8) 2个外部中断源,共8个中断源;9) 2个读写中断口线,3级加密位;10) 低功耗空闲和掉电模式,软件设置睡眠和唤醒功能。1.1.1 结论我们通过集成电路和2款单片机的属性和优缺点对比,我们觉得AT89C51单片机芯片更加

4、适合本次实验的中心控制芯片。专心-专注-专业第2章 硬件设计2.1 硬件结构图3-1是以AT89C51单片机为核心的音乐播放器系统硬件设计结构框图。该系统主要是由复位电路、按键电路、时钟电路、中心模块、扬声器驱动等组成。其工作原理为:此音乐播放器,有三个按键及控制按钮:播放/暂停、下一曲、上一曲;通过控制按钮控制单片机,播放所要求的音乐,并通过放大电路和喇叭输出声音。图3-1 硬件结构图2.2 中心控制模块 中控采用的是AT89C51芯片,下面是AT89C51的引脚图:图3-2 AT89C51引脚图各端口作用: P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻

5、辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输

6、入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。 引脚号第二功能 l P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出 l P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) l P1.5 MOSI(在系统编程用) l P1.6 MISO(在系统编程用) l P1.7 SCK(在系统编程用) P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流

7、(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89C52特殊功能(第二功

8、能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。 端口引脚第二功能 l P3.0 RXD(串行输入口) l P3.1 TXD(串行输出口) l P3.2 INTO(外中断0) l P3.3 INT1(外中断1) l P3.4 TO(定时/计数器0) l P3.5 T1(定时/计数器1) l P3.6 WR(外部数据存储器写选通) l P3.7 RD(外部数据存储器读选通) 此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。 RST复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。 ALE/PROG当访问外部程序存储器或数据存

9、储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序

10、存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA/VPP外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。2.3 电源模块对于一个电子系统来说,电源部分的设计越发重要。对于一个实际的电子系统,要认真的分析它的电源需求。

11、不仅仅是关心输入电压,输出电压和电流,还要考虑到总的功率,电源实现的效率,电源部分对负载变化的瞬态响应能力,关键器件对电源波动的容忍范围以及相应的允许的电源纹波,还有散热问题等等。本次设计基于AT89C51功率因数测量系统中使用到咯+5V的电源,电源设计的原理图如下。电路中使用到的芯片是7805,7805是稳压芯片,好处是应用比较简单,只需要接上几个电容就可以使用了。图3-3 电源电路图2.4 控制电路控制电路,键1与P3.2相连、键2与P3.3相连、键3与P3.5相连。当电键按下时接口接低电平,实现对音乐播放器的控制。键1连通实现上一曲更换,键二连通实现下一曲更换,键三连通实现开始暂停操作。

12、2.5 复位电路复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。复位电路采用RC充电电路组成上电复位单片机电路,当系统上电时,在上电初期,电容C充电,使复位脚持续高电平,当C充电到达一定程度复位脚电位会慢慢变低,最后被电阻R完全拉低,高电平复位的时间由充电的时间决定,充电时间又由R与C的阻值和容值之积决定。一旦单片机复位脚拉低后就一直都低电平,只有下电后再上电才重新开始复位过程。电路图如下所示:图3-4 复位电路图2.6 电路设计所需要的器件表3-1 电

13、路设计器件表类别序号型号数量(单位)用途电源178051个系统电源IC芯片2AT89c511片CPU3LM3861片实时时钟日历芯片电容430pF2个单片机时钟震荡电路510F1个复位电路60.1F1个7470F1个822F1个947F1个100.047F1个11100F1个晶振1212MHz1支电阻134.5K1支141K2支复位电路1510K1支限压保护164701支喇叭1774F3781个扬声器硬质板18焊接性1块基础电路二极管191N40011个电源部分20发光二极管1个检测电源第3章 软件设计3.1 音乐发声设计原理3.1.1 发声原理一首乐曲是由多个音符构成的。每个音符都对应着一个

14、确定的频率,乐曲中不同的音符,实质就是不同频率的声音;另外每个音符会根据乐曲的要求设定一个确定的节拍。可以控制单片机产生不同频率不同节拍的脉冲信号,由蜂鸣器发出就产生了美妙和谐的乐曲。 3.1.2 单片机产生不同频率脉冲信号的原理1、要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。 2、利用单片机内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法如下: 例如:频率为52

15、3Hz,其周期天/523 S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。 计数脉冲值与频率的关系公式如下: N=Fi/2/Fr (4-1)其中N表示计数值;Fi表示内部计时一次为1uS,故其频率为1MHz;Fr表示要产生的频率。 3、其计数值的求法如下: T=65536-N=65536-Fi/2/Fr (4-2)计算举例: 设K=65536,F=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、 高音DO(1046Hz)的计数值。 T=65536-N=65536-Fi/2/Fr=65536-/

16、2/Fr=65536-/Fr低音DO的T=65536-/262=63628。 中音DO的T=65536-/523=64580。高音DO的T=65536-/1047=65059。4、每个音符使用1个字节,字节高4位代表音符高低,低4位代表音符 节拍。假设1/4节拍为1DELAY,则1拍应为4DELAY,以此类推。只要求得1/4拍的DELAY时间,其余节拍则为它的倍数,本设计取4/4调值,延时时间为125ms,其中节拍码与实际节拍对照表4-1-1。表4-1 简谱对应的频率、简谱码和计数初值表简谱发音频率(Hz)计数初值简谱码5低音SO3926426016低音LA4406440027低音SI4946

17、452431中音DO5236458042中音RE5876468453中音MI6596477764中音FA6986482075中音SO7846489886中音LA8806496897中音SI98865030A1高音DO104665058B2高音RE117565110C3高音MI131865157D4高音FA139765178E5高音SO156865217F不发音0表4-2 节拍码与实际节拍对照表节拍码实际节拍节拍码实际节拍节拍码实际节拍11/4拍51又1/4拍C3拍22/4拍61又1/2拍F3又3/4拍33/4拍82拍41拍A2又1/2拍建立音乐步骤:(1)先把乐谱的音符找出,然后由上表建立T值

18、表的顺序。 (2)把T值表构成一个编码表,构成发音符的计数值放在计数初值编码表里。 (3)简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的简谱编码表里。 建立编码表具体如下:1)定时值为十六进制4位数,拆分为两组,如5对应的定时值为FD80H,拆分FDH和80H两组.前者装入定时器的高位TH0,后组装入定时器的低位TL0。2)在程序中使用定时器T0方式1来产生来产生歌谱中各音符对应频率的音频脉冲,由P3.7输出,经三极管将信号放大后驱动蜂鸣器发出不同音节的声音。3)程序中的节拍控制是通过调用延时子程序DELAY的次数来实现,1拍为500ms,即需要调用4次DELAY;3/4

19、拍需要调用3次DELAY;2/4拍需要调用2次DELAY。 4)节拍的控制码在表TABLE中位于音符码的后面。5)当一个音符的发音时间到时,再查下一个音符的定时常数和延时常数。依此进行下去,就可演奏出悦耳动听的乐曲。程序流程图如图所示:图4-1 主程序流程图如图4-3所示,开始播放自定义音乐程序时,指针指向乐谱第一个字节,将第一字节拆分为高低字节,其高字节即为音符中音高对应定时器定时常数,低字节即为音符中节拍对应的1/4节拍的次数,同时启动中断定时器0工作在方式1,由定时器定时常数得到相应音高,通过延时子程序设定1/4节拍的时间,由节拍次数得到节拍,再读取下一个乐谱字节,循环下去则演奏出美妙和

20、谐的乐曲。3.1.3 键控子程序键控子程序主要由播放/暂停子程序、上一曲子程序、下一曲子程序组成,分别由一个计数器中断和两个外部中断实现。3.1.4 播放/暂停子程序播放/暂停在程序利用内部中断T0口。将T0口设为计数中断并工作在方式2下。标识符初值赋值为R1=00H,计数初值设为TH0=0FFH,TL0=0FFH。当按键第一次产生中断信号时,播放/暂停子程序改变标志符R1,将其赋值为01H。此时播放器由暂停状态进入播放状态。当按键第二次产生中断信号时,播放/暂停子程序判断R1是否为02H后,将R1再次赋值为00H。此时,播放器由播放状态进入暂停状态。 3.1.5 曲目选择子程序图4-2 曲目

21、选择子程序流程图开始程序 指向乐谱第一个字节 拆分字节的高低字节 由高字节得音高对应定时器定时常数 由低字节得到节拍对应节拍次数 启动定时器0 延时节拍时间 关闭定时器0 读取下一个乐谱字节 字节是00H吗? 程序循环YESNO图4-3 程序播放过程3.2 音乐播放程序设计音乐程序根据上面的音调节拍编码方案用第一首歌劳动最光荣为例编码如下: uchar code ldzgr =0x52,0x82,0x82,0x52,0x62,0x62,0x54,0x32,0x52,0x12,0x32,0x28, 0x52,0x84,0x52,0x62,0x62,0x54,0x52,0x81,0xA1,0x92

22、,0x52,0x88, 0x83,0x91,0x82,0x52,0x62,0x62,0x54,0x33,0x81,0x62,0x52,0x12,0x32,0x24, 0x12,0x11,0x21,0x32,0x51,0x51,0x62,0x52,0x84,0x82,0x51,0x61,0x84,0xA4,0x92, 0x52,0x86,0x02, 0x52,0x81,0x81,0x82,0x52,0x62,0x61,0x81,0x54,0x32,0x51,0x61,0x53,0x31,0x12,0x32,0x24, 0x52,0x82,0x82,0x52,0x62,0x62,0x54,0x51

23、,0x61,0x81,0xA1,0x92,0x52,0x88, 0x83,0x91,0x82,0x52,0x62,0x62,0x54,0x33,0x81,0x62,0x52,0x12,0x32,0x24, 0x12,0x11,0x21,0x32,0x52,0x82,0x52,0x68,0x52,0x61,0x61,0x84,0xA4,0x92,0x52, 0x84,0xff ;一、键扫描函数void scankey()unsigned int keydata;keytmp=p1&0x01;if(keytmp= =0)keydata=0;else if(keytmp= =1)keydata=1;

24、二、键延时函数void keydelay(void)uchar i;for(i=300;i=0;i-)三、延时函数void delay(unsigned char time)unsigned char t1;unsigned char t2;for(t1=0;t1t;t1+)for(t2=0;t28000;t2+)四、定时器0中断服务子程序void time0_int() interrupt 1 using 0TR0=0;P00=P00; TH0=BTH0; TL0=BTL0;TR0=1;五、赋T0计数初值,开始计数void sing()TH0=BTH0;TLO=BTL0;TR0=1;dela

25、y(time);第4章 系统调试4.1 软件调试结构化软件的调试一般可以将重点放在分模块调试上,通调是最后一环。软件调试可以采取离线调试和在线调试两种方式。前者不需要硬件仿真器,借助于软件仿真器即可;后者一般需要仿真系统的支持。在本次设计中利用的是KEIL C51软件仿真器,其评估版本可以免费获取,只是有2KB代码限制。4.2 KEIL开发系统使用Keil软件建立一个工程: Keil是目前进行51单片机开发最常用的编译软件。关于Keil的使用,有很多的资料介绍,这里只介绍其整个编译过程。在Keil里,每一个完整的程序,都是以一个工程的形式建立的。一个工程里可以有一个或多个*.c文件和*.h文件

26、,但只可以有一个main()函数。一般的做法是将包含main()函数的C文件加入到工程中,其他文件以#include头文件的形式加到这个C文件里。这样,在编译的时候,其他的文件会被自动的导入到工程里来。打开Keil软件后,出现(图5-1)所示界面。当然,如果Keil在上次关闭时有打开的工程,再一次打开时它会自动加载上一次的工程文件。图5-1 Keil软件主界面4.3 调试中遇到的问题及解决1、编程时要注意,在程序开始时,要写入各定时器中断的入口地址。2、有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确

27、格式书写。3、程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。4、编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。5、开始时候没有将单片机的第31号引脚接到高电平,结果使MP3播放器的播放性能不稳定(有时候能工作,有时候却工作不了),当接一高电平以后,播放器能正常工作了。6、开始没有考虑键盘的消抖,造成的按键工作紊乱,具体的现象是:按1次键却被要机器认为是按了1次或多次,这就使播放器有时候可以正常工作,有时候却不可以。给键盘程序加了消抖呼程序以后,按键就工作正常了。7、两个定时器同时工作,存在中断时序问题

28、,刚开始时我们把定时器1设定在方式3,计250us,由于定时中断过于频繁,使CPU负载过大,导致音乐不能正常播放,时间不能正常显示。解决办法:将定时器1设定在工作方式1,16位计数,计50ms,效果有很大改观。4.4 仿真结果我在keil软件中建立工程,连接,编译后生成了.hex文件,在proteus中在单片机中加载.hex文件仿真中遇到了以下问题。蜂鸣器不能正常播放音乐,在protues仿真中的蜂鸣器老是不能正常响,会断断续续地播放,经过我几天的调试,我发现应该是电平驱动的问题,是由于三极管的失真造成的。最后终于能播放音乐了。最终仿真结果如图5-2所示:图5-2 仿真结果图4.5 误差分析1

29、、有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发行是因为程序中有的指令书写得不规范导致的,例如有的返回指令一定要按正确格式书写或在两行指令间最好不要留空行。2、程序中的跳转指令的运用很重要,为保险起见,都必须要反复检查,我们就遇到过跳转指令用错程序无法正常运行的现象。当用修改指令时,跳转范围比较少,这时要用一个标号中转。 3、编程时要注意,在程序开始时,要写入各定时器中断的入口地址。 4、编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。 5、程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。第5章 结论原本对单片机的硬件

30、设计,软件设计掌握的深度不够,但通过此次课程设计,却改变了很多,首先对于硬件电路的工作原理有了进一步的学习,同样就有了进一步的认识;其次软件方面,在程序的设计,程序的调试方面都学到了很多东西,这是第一次编写单片机的大程序,很有成就感。本设计按键分别是A、B、C、D四个功能键和1、2、3、4四个数字键,以及复位键和暂停键,中间芯片为核心部件AT89C51,扬声器控制电路由反向器和喇叭组成。本次设计的音乐播放器最终实现的功能为:1. 音乐播放器按照从头到尾的顺序自动循环播放预先设定的全部乐曲。2. 按下C键,选定某一乐曲,随即输入选定乐曲的序列号(14),音乐播放器对选定的某一乐曲循环播放。3.

31、当用户按下暂停键E时,音乐播放器打断正在播放的某一乐曲,用户再次按下暂停键时,该乐曲继续播放。4. 当用户按下复位键F时。音乐播放器终止正在播放的某一乐曲。参考文献1 黄振杰.基于AT89S52的多功能音乐播放器J.广东:电子设计工程:2009年2月第2期2 吴迅.用单片机设计音乐播放器J.山东:电子世界,2009.63 朱清慧等.Protues教程电子线路设计/制版与仿真M.北京:清华大学出版社,2008.94 侯玉宝,李成群.基于Proteus的51系列单片机设计与仿真M.北京:电子工业出版社,20085 何立民.MCS-51系列单片机应用系统设计M.北京航空航天大学出版社,19906 李

32、华. MCS-51系列单片机应用接口技术M.北京航空航天大学出版,19937 李广弟,朱月秀.单片机基础M.北京:北京航空航天大学出版社,2007.68 张义和,王敏男等.例说51单片机M.北京:人民邮电出版社,2008.49 陈明荧.8051单片机课程设计实训教材M(第一版).北京:清华大学出版社,2004致谢经过几个月的忙碌,本次毕业论文设计已经接近尾声。,由于经验的匮乏,难免有许多考虑不到的地方,在多次的修改和研究之后才写出完成。如果没有导师的督促和指导,以及同学和朋友的支持,想要完成这个毕业论文设计是难以想像的。感谢同学和朋友的及时帮助和教导。在论文的写作过程中,得到了伊学君老师的亲切

33、关怀和耐心的指导。老师严谨的治学态度和科学的工作方法给了我极大的帮助和影响。从课题的选择得到毕业论文设计最终完成,老师都始终给予我细心的指导。在此谨向伊学君老师致以诚挚的谢意和崇高的敬意。同时,也要感谢各位老师,同学和朋友们给我极大的支持,对我的论文提出了宝贵的意见及建议。感谢所有帮助我的老师、同学和朋友们,在此向他们表达我的感激之情。附录附录一:完整的音乐程序#include sbit p00=p00;sbit p10=p10;unsigned char BTH0,BTL0;unsigned char time;unsigned char keytmp;code unsigned char

34、table=6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1, 6,2 4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1, 6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2, 5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0;Code unsigned char TH0=0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8

35、,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,;code unsigned char TL0=0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,;void scankey()unsigned int ke

36、ydata;keytmp=p1&0x01;if(keytmp= =0)keydata=0;else if(keytmp= =1)keydata=1;void keydelay(void)uchar i;for(i=300;i=0;i-)void delay(unsigned char time)unsigned char t1;unsigned char t2;for(t1=0;t1t;t1+)for(t2=0;t28000;t2+)void time0_int() interrupt 1 using 0TR0=0;P00=P00;TH0=BTH0;TL0=BTL0;TR0=1;void si

37、ng()TH0=BTH0;TLO=BTL0;TR0=1;delay(time);void main(void)unsigned char k,i;i=0;TMOD=0x01;EA=1;ET0=1;IE=0x82;while(1)void scankey();if(keydata=0)else if(keydata= =1)keydelay();time=1;while(time)if(tablei= =0)i=0;else if(tablei!=0)k=tablei+7*tablei+1-1;BTH0=TH0K;BTL0=TL0K;time=tablei+2;i=i+3;sing();附录二:原理图附录三:仿真图附录四:PCB图

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com