




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2016年小学期单片机设计实验报告题目:红外遥控音乐播放器班级:班内序号:实验组号:学生姓名:指导教师:期中检查教师评语指导教师签字:注:本实验报告为北京邮电大学通信工程2016年小学期(电路综合实验电子工艺实习)的实验报告。报告完满是自己写的;代码也是自己敲的,我负责的是整个红外模块和MAIN程序的一部份,这些部份我都有超级详细的注释。LCD显示屏是另外一个人负责。实验成效专门好,最后得分也很高(90+,不透露了),可是事实上还有问题:那个程序读取并存储红外接收头的码字,和事实上的码字并非相符,通过示波器就能够够很清楚地看到。例如我按下红外遥控器的1,遥控器发射码11010010,在那个程序
2、操纵下,单片机存储的码字不是那个。只是,咱们取得的码字和遥控器上的按键一一对应,如此我只要全依照错的码字来就好了。当不时刻紧迫,我查了好几遍也不明白自己代码错在哪儿,就将错就错了。另外要注意的是,咱们是去外面随意买的遥控器,咱们遥控器不一样,对应的码字需要你们自己测量。本文尽管给了详尽的说明,不用再像我一样查N多资料了。只是讲义必需好好看。教师对咱们组印象很深刻,若是只是照抄这份报告,确信拿不到好成绩。希望学弟学妹们能在这基础上把码字测量准确,而且加一些新功能吧,比如用盒子里的键盘、比如操纵音长等等;认真完善这份报告,比如排版啥的。红外遥控音乐播放器班组实验摘要本次咱们制作的基于红外通信的音乐
3、播放器。咱们将红外遥控器发出的红外信号进行解码,并将解码后的信号发送至单片机进而使喇叭发声、LCD显示屏显示相应界面。目前,红外光通信应用普遍,咱们小组也充分利用这一模块增加实验的创新性。整个系统中,微操纵器采纳了Microchip公司的PIC16F877A。本实验用单片机的红外接收模块接收来自红外遥控器信息,利用PIC单片机的中断,对红外码进行引导码查验、32位码接收并解码、特点查验及数据查验的功能,实现了对不同的红外码的区分,并最后将所得的数据码寄存到单片机的RAM中;然后,咱们利用红外解码后的8位数据码,实现了在主程序中对按键循环检并识别,进而播放对应歌曲或音符、存储所按音符、显示所按按
4、键对应界面、并同时点亮对应彩灯。AbstractInthisexperiment,wemadeamusicplayerbasedoninfraredcommunicationtechnology.Wedecodedtheinfraredsignalfromtheinfraredrayremotecontroller,thenwetransmittedthedecodedsignaltothePICMCUtomaketheloudspeakerplaymusicandcontroltheLCDtodisplaythecorrespondinginterface.Nowadays,theappli
5、cationofinfraredcommunicationiswidespread,andourgrouphasmadefulluseofthismoduletoincreasetheinnovationofexperiments.Inthesystem,weusedtheMicrochipPIC16F877Aasthemicrocontroller.Weusedtheinfraredmoduletoreceivethesignalfromtheremotecontroller.WiththeinterruptofPICMCU,wecheckedthebootcodesanddecodedth
6、eusefuldatainordertodistinguishdifferentinfraredsignals.Afterwards,wesavedthedecodeddataintheRAMoftheMCU.Circularlydetectingthedatainmainprogrammakesthemusicplaying,thesongsaving,LCDdisplayingandLEDlighteningpossible.关键字单片机microcontroller芯片一一CMOSchip红外探测infrareddetector脉宽调制pulsewidthmodulation一.实验论证
7、与比较1 .红外通信原理红外通信是利用950nm近红外波段的红外线作为传递信息的媒体,即通信信道。发送端将基带二进制信号调制为一系列的脉冲串信号,通过红外发射管发射红外信号。接收端将接收到的光脉转换成电信号,再通过放大、滤波等处置后送给解调电路进行解调,还原为二进制数字信号后输出。经常使用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM和通过脉冲串之间的时刻距离来实现信号调制的脉时调制(PPM两种方式。2 .红外接收模块利用一体化接收头,内部电路包括红外监测二极管,放大器,限副器,带通滤波器,积分电路,比较器等。红外监测二极管监测到红外信号,然后把信号送到放大器和限幅器,限幅器把脉冲幅度操纵在
8、必然的水平,而不论红外发射器和接收器的距离远近。交流信号进入带通滤波器,带通滤波器能够通过30khz到60khz的负载波,通过解调电路和积分电路进入比较器,比较器输出高低电平,还原动身射端的信号波形。注意输出的高低电平和发射端是反相的,如此的目的是为了提高接收的灵敏度。现在输出的为解调好的信号,通过串口通信rb0接入到单片机,存储,送显。3 .音乐播放器和电子琴对红外解码后的数据码进行循环检测,直到测到某一按键。通过预设按时器TMR制值改变音符的频率,预设按时器循环的次数改变音长,并将所得固定音符存储。用简谱将音符录入曲目。当用户按下遥控器相应按键,别离将所需的曲目的音符信息送入扩音器,达到音
9、乐播放。4 .发光二极管用八个发光二极管模拟钢琴上的八个琴键,播放某一音符的同时点亮对应琴键。二.系统整体设计1 .系统模块整体框图2 .软件流程图2.1 整体流程图2.2整体流程图定义寄存器、参数初始化进入主程序MAIN调用音乐播放器子程序或EEPROMF程序当按键检测为SAVE_START或SAVE_PLA附,按顺序继续运行此部分2.2中断程序流程图以下图中的*为标注,后面会详细说明其思路中断返回注*1的思路:抽样检测,假设每次检测均为低电平/高电平,那么以为这段时刻内全为低电平/高电平;假设有一次不同那么以为是错误信号,退出中断。假设13.5ms内检测通过,那么以为是正确的红外信号,进入
10、以后的32位码接收并存储的时期。框图:注*2的思路:因为0和1的区别仅体此刻高电平的长度,因此第一等待前面的低电平过去,然后延时0.9ms,依照现在的高低电平判定是0仍是1,然后存入RAM。循环此进程即可取得32位码。流程图以记录系统码前8位为例,记录系统码后8位、数据码、数据反码均与此类似。另外,为避免误操作,在存储完数据后随即将其另存到另外四个内存单元中,以后的查验进程利用的是那个地址的4个内存单元。5ms框图:计数器COUNT8=8等待低电平过去延时当前电平是高电平吗?存储单元带1循环左移存储单元带0循环左移4RLF延时等高电平过去计数器-1送回计数器=0?更改存储单元,准备记录系名码后
11、8位注*3的思路:通过调取View->FileRegisters注*4的思路:对照数据码和数据反码,假设不相反那么以为收到的信号有误,回到,假设相等那么继续。2.2EEPROMT符存储子程序流程图三.硬件连接1 .单片机端口连接至RB0红外接收模块RB7喇叭RE0LCD_RSRE1LCD_RWRE2LCD_ERD卜RE7LCD_DALCD_D7RC4RC7LED_L0LED_L3RB1RB4LED_L4LED_L72 .硬件模块连接图3 .芯片的底层电路连接图3.1单片机+51RI41KRlrSLI_JZZ_LoMHRH7FUMVAN0比所RA1/ANIMl?EtA2/AN2kB4tuv
12、/心3RB3RA4/AN4KH2RA5/AN5RBIRE(VmA«RBtJNTREI/*RANB0RFl/eS/ANTVSSVTX1ktn耕强RD&06C1/CLKINRD6<KC2LKDtTRMRCPKt7nm后Rdm5R£3RC+RDORD3RFHRTO4ukitVHAU2039KBbR.WT"38RB5KV437啊R35林R用RU6RHRV7MRBI也REO1四RJil932RE;103t30KITSU1239RDhEl132KRD5CJ8C214例用152TRIMi加HUKCIthHl3Rt21721豆5R<JH23RCARDO1922
13、RDJM9mrikPit:6tS773.2红外模块3.3电源U13.4发光二极管R147Ohm_5%9V电源2RL«vRLIR4l<<57R-R65RLs<R4hm_5%LED1喇叭LED3LED4LED5LED6LED7LEDVCC5V四.调试进程1. 正确选择中断输入端口关于“单片机随时对红外接收头输入的信息进行处置”这一进程,中断显然是最好的选择。开始在选择中断输入端口时,尚未真正的明白得中断这一概念,因此选择了RB7。在调试时却发觉完全得不到正确的信号。在反复看书后才发觉,由于RB4-RB7共用一组中断标志位和屏蔽位,因此它们之间容易彼此阻碍。而INT(RB
14、。只有一个引脚,而且还能够自主选择触发信号边沿,因此改用了INT端口。2. 正确接收红外信号在中断程序的调试进程中,我面临着两个困难:第一,完全找不到参考代码;第二,由于中断进程要求在一个红外信号的时长(约108ms)内接收并存储信号,一旦暂停,红外信号就已经消失,因此无法进行单步伐试,所有的问题都只能靠观看最终取得的结果来判定。通过反复试探和调试考试,最终在引导码检测部份利用了抽样检测法,在接收信号部份利用了延时检测法,通过认真分析,中断程序及其每一个子程序所历时刻远小于红外信号的时刻,最终结果也证明对应不同的按键,我的程序能够分析并存储取得不同的红外码。另外,由于每一个内存地址只能记录8位
15、数,最初我打算像C+诩言那样利J用两个for循环嵌套来完成存储,但实际进程中发觉,汇编语言要想实现类似的结构实在太难,而时刻又紧,因此只得舍弃利用嵌套循环了。3. 正确存储与读取EEPROM在编写完中断、扬声器、LCD部份后还有一段时刻,我和XXX打算再添加EEPROMI块,即实现掉电依旧能存储的功能。程序的编写由XXX完成,同一时刻我负责将之前的三个模块进行整合、整理、简化,以后一起进行调试。然后就显现了许许多多的看起来无法说明的现象:执行XORW指令后STATUS勺Z位不管如何都不变;存储红外码的地址莫名其妙被突然清零,而在单步执行时就可不能被清零;明明应从子程序FANGB饭回原处却无穷循
16、环咱们反反复复画框图,看书,看代码,怎么也没有发觉有哪一步是错误的,在时刻的压力下咱们只好临时舍弃,打算假设焊接完后还有时刻的话再来研究。于是在最后一天我突然发觉,其实每一步都确实没有错,只是咱们忽略了正确设置体!检查了一遍程序,纠正了这一点以后功能就立刻实现了。4. 焊接进程中的调试在进行了认真的计划后咱们开始了焊接,由于计划的十分合理,因此整体很顺利,要紧问题有:第一,不警惕焊错要重焊,结果将电路板上用来将竖排的三个孔连接起来的焊锡也熔掉了,只得在再次焊接时用焊锡将孔再连起来,在美观性上有些损失;第二,焊接完后完全没有成效,逐点检查电压时发觉了和编写EEPRO喉块时相似的问题:每点的电压完
17、全不合乎常理,有的乃至为负或超过了供电电压,我和XXX都讥讽说这岂不是能够造永动机了。电路的连接也没有问题,最后终于发觉是开关的四个引脚接错了,在改换连接引脚后咱们的音乐播放器顺利的实现了各部份功能。五.参考文献:PIC单片机有效教程一一基础篇李学海北京航空航天大学出版社利用说明:的确是一本不可或缺的教材,本书列举了很多有效的具有实战意义的例子,单片机入门确实是通过把这本书里的好例子一字一行敲进电脑去来实现的。PIC单片机有效教程一一提高篇李学海北京航空航天大学出版社RA TMR2勺禾I用和CCP利用说明:继承了前面基础篇的风格,例子也具有实战意义,要紧讲模块的PWM宽调制功能。六.实验心得体
18、会小学期刚开始时,我对单片机是一窍不通,第一节理论课也是听得云里雾里,看书的感觉就像是“老虎啃天,无从下口”,终于看了一遍基础篇以后仍是感觉自己什么都可不能。而在慢慢伐试书上的实例代码,自己慢慢编写代码的进程中,我才真正明白得了单片机的利用方式,才真正将讲义知识点连成线。我再一次明白了,只有理论与实践相结合,才能真正学到东四。在调试进程中,如EEPROMI块的调试和焊接进程的调试,显现了许多莫名其妙的问题。我和XXX在起初时难以相信这种离奇的结果而一遍又一遍的检测,因此浪费了很多时刻,最后才发觉问题全然就不出在咱们检查的地址。我明白了,当显现这种百思不得其解的问题时,要学会换个角度去试探,或许
19、能更快的发觉解决方法。在咱们小组看完书以后,咱们曾打算每一个部份都是三人一路做,却发觉如此会大大增加工作量,而且会增加很多无心义的讨论,于是打算每一个人负责一个模块的编写与调试。在口作后期又发觉,如此做的坏处是一旦显现问题就只能自己解决,要明白一样他人发觉代码问题的速度是要比编写者快的,因此咱们又采取了每一个模块由一个人要紧负责编写,还有一个人负责协同后期调试的方式。因此我又学到了分工与合作的知识。总而言之,这三周对我来讲是大学入学以来最棒的三周。咱们三个人天天在一路,为了同一个目标而拼命尽力,相互支持鼓舞,我感觉比任何班级活动都更能加深同窗之间的情谊。谢谢教师让咱们拥有那个小学期,谢谢同组的
20、组员们,谢谢教师的指导与鼓舞!七.程序代码PORTCEQU 07H ;C 端连发光二极管.*;RAMTMR0EQUOPTION_REGEQU81HPCLEQUSTATUSEQUPORTBEQU06H概念*特殊功能寄放器01H02H03H;RB0连红外,RB4连扬声器PORTDEQU08H;D端连显示屏的D0-D7PORTEEQU09H;E端连显示屏的特殊功能端TRISBEQU86HTRISCEQU87HTRISDEQU88HTRISEEQU89HADCON1EQU9FHINTCONEQU0bHPIR2EQU0dHEECON1EQU18CH;这四个是EEPRO曝音用EECON2EQU18DHEE
21、ADREQU10DHEEDATAEQU10CH;播放器部份用-RAM通用寄放器COUNT1EQU23H;延时TEMP0EQU24H;频率COUNT2EQU25HCOUNT3EQU26HCOUNT4EQU27HCOUNT10EQU28H;EEPROMf#用ADDR2EQU72HDATA3EQU73HTEQU74HTEMP_SAVEEQU75H;红外部份用COUNT5EQU30H;count都是循环计数用COUNT6EQU31HCOUNT7EQU32HCOUNT8EQU33HCOUNT9EQU34HCODE0EQU35H;记录遥控器发射的32位码的4个地址位CODE1EQU36HCODE2EQU3
22、7HCODE3EQU38HCODE0_TEMPEQU39H;为了避免记录时显现错误,在进行记录动作的时候利用的是这四个,最后将这四个的内容转至上面进行保留CODE1_TEMPEQU3aHCODE2_TEMPEQU3bHCODE3_TEMPEQU3cHW_TEMPEQU3dHSTATUS_TEMPEQU3eHTEMPEQU76H;红外与其它部份的接口,内容是数据码CYCLE1EQU50HCYCLE2EQU51HCOM_REGEQU52HLCD_REG1EQU53HLCD_REG2EQU54HADDREQU55HDATA1EQU56HDATA2EQU57H#DEFINELCD_RSPORTE,0;
23、LCD 部份用延时变量寄放器#DEFINELCD_EPORTE,2#DEFINELCD_RWPORTE,1寄放器单元中位(即数字);STATUS里的CEQU.0ZEQU.2RP0EQU.5RP1EQU.6;INTCON里的GIEEQU.7PEIEEQU.6INTEEQU.4T0IFEQU.2INTFEQU.1;OPTION_RE俚的INTEDGEQU.6;TRISB里RB0EQU0RB2EQU.2RB3EQU.3RB4EQU.4RB5EQU.5RB7EQU.7;PIR2里EEIFEQU.4;EECON1里的EEPGDEQU7HWREQU1H*RDEQU0H;一般数字WEQU.0;指令用符号FE
24、QU.1;指令用符号概念终止*ORG0x0000NOPGOTOSTARTUPORG0x0004GOTOINTERR;*中断程序(接收红外信号)*;现场爱惜及初始化INTERR判定是不是是由RB0(INT)电平转变而引发的中断?MOVWFW_TEMPSWAPFSTATUS,WCLRFSTATUSMOVWFSTATUS_TEMPBTFSSINTCON,INTFGOTOFANHUI;假设否,执行这一步:返回main程序BCFINTCON,GIE;假设是,执行这一步:屏蔽所有中断WRENEQU2H引导码检测部份;思路:先进行低电平检测,因引导码的低电平是9ms,因此我采纳的方式是每隔检测一次,共检测1
25、0次(利用循环方式),只要有某一次不是低电平,那么说明是错误信号,返回main程序。高电平检测同理。;另外,假设接收到的是连发码(由9ms低电平高电平低电平高电平组成),每隔检测一次高电平,因此在也能判定出这不是需要处置的信号。CHECKLOWCALLDELAY0_8BTFSCPORTB,0GOTOFANHUIDECFSZCOUNT5,F;DELAY0_8是延时子程序,即每隔检测一次;判定当前电平是不是为低电平?;假设否,执行这一步:返回main程序;假设是,执行这一步:判定有无循环完9次GOTOCHECKLOW;假设没有循环完,那么返回继续循环检测,共循环9次(9*0.8=7.2<9m
26、s)WAITHIGHNOPNOPNOPNOPNOPBTFSCPORTB,0;假设循环完,那么说明低电平正确,再也不循环,然后等待9ms低电平过去,方式是循环判定目前是不是是低电平。GOTOCHECKHIGH_1假设否,那么说明此刻是高电平,转至检测高电平;GOTOWAITHIGH;假设是,那么继续循环判定CHECKHIGH_1CALLDELAY0_3BTFSSPORTB,0GOTOFANHUIDECFSZCOUNT6,F;DELAY0_3是延时子程序,即每隔检测一次;判定当前电平是不是为高电平?;假设否,执行这一步:返回MAIN程序;假设是,执行这一步:判定有无循环完10次GOTOCHECKH
27、IGH_1假设没有循环完,那么返回继续循环检测,共循环;10次()WAITCODENOPNOPNOPNOPNOPBTFSCPORTB,0;假设循环完,那么说明高电平正确,再也不循环,然后等待高电平过去。方式是循环判定目前是不是是高电平。GOTOWAITHIGH1;假设否,那么说明到了32位码的部份,进行同意并记录GOTOWAITCODE;假设是,那么继续循环判定;接收&记录32位码部份;思路:32位码要利用RAW的四个地址位进行记录。而且,输入信号0和1的区别就体此刻高电平长度的不同,0的高电平长度为,1的高电平长度为,还要注意长度有必然误差,因此判定方式是:;第一,跳太低电平,即像上
28、面的WAITHIGH一样循环检测低电平,到显现高电平的时候跳出循环;;第二,因为高电平信号的长度确信有误差,因此选择延时,再进行一次电平检测。假设为低电平,那么说明之前的高电平长度,显然之前的信号是0,转到记录0的程序;假设为高电平,那么之前的信号是1,转到记录1的程序。;记录方式是令STATUS勺C位为0/1,然后让CODE_TEMP着C左移,左移正好高位保留到高位上。;最后,记录完成以后返回“第一”,检测下一个信号。注意现在不是处在那个“下一个信号”的低电平开始部份,而是在低电平的中间部份。;对一个变量地址循环8次,循环完以后正好记录完成8个信号,然后进入下一个地址继续记录。循环检测32位
29、后跳出循环,转到查对正误的程序。JWAITHIGH1 MOVLWMOVWFLOOP3 BTFSCGOTOGOTOCHECKHIGH1CALLBTFSCGOTOGOTOWRITE1_1BSFRLFCALLDECFSZ0?GOTO录;GOTO完毕,接下来进行系统码WRITE0_1BCFRLFDECFSZGOTOGOTO记录系统码10x08COUNT8;令COUNT8=8利用那个地址来计数循环8次PORTB,0;等待低电平过去CHECKHIGH1;假设变成高电平,转至判定信号部份LOOP3;假设仍是低电平,那么继续循环判定DELAY0_9;延时PORTB,0;检测当前的电平WRITE1_1;假设是高
30、电平,那么转到记录1的子程序;WRITE0_1;假设是低电平,那么转到记录0的子程序。STATUS,C;令C位为1CODE0_TEMP,F着C位循环左移,结果存入FDELAY1_0;等待高电平过去COUNT8,F;记录目前的循环次数,判定此刻COUNT翳不是为LOOP3;假设否,说明系统码1这8位还没记录完,继续记WAITHIGH2;假设是,说明已经循环了8次,那个内存单元记录2的记录。STATUS,C;令C位为0CODE0_TEMP,F着C位循环左移,结果存入FCOUNT8,F;同上LOOP3WAITHIGH2;接下来各步骤意义同上。记录系统码2WAITHIGH2MOVLW0x08MOVWF
31、COUNT8LOOP4BTFSCPORTB,0GOTOCHECKHIGH2GOTOLOOP4CHECKHIGH2CALLDELAY0_9BTFSCPORTB,0GOTOWRITE1_2GOTOWRITE0_2WRITE1_2BSFSTATUS,CRLFCODE1_TEMP,FCALLDELAY1_0DECFSZCOUNT8,FGOTOLOOP4GOTOWAITHIGH3WRITE0_2BCFSTATUS,CRLFCODE1_TEMP,FDECFSZCOUNT8,FGOTOLOOP4GOTOWAITHIGH3记录数据码WAITHIGH3MOVLWMOVWFLOOP5BTFSCGOTOGOTOCH
32、ECKHIGH3CALLBTFSCGOTOGOTOWRITE1_3BSFRLFCALLDECFSZGOTOGOTOWRITE0_3BCFRLFDECFSZGOTOGOTOJWAITHIGH4MOVLWMOVWF0x08COUNT8PORTB,0CHECKHIGH3LOOP5DELAY0_9PORTB,0WRITE1_3WRITE0_3STATUS,CCODE2_TEMP,FDELAY1_0COUNT8,FLOOP5WAITHIGH4STATUS,CCODE2_TEMP,FCOUNT8,FLOOP5WAITHIGH4记录数据反码-0x08COUNT8PORTB,0LOOP6BTFSCGOTOCH
33、ECKHIGH4GOTOLOOP6CHECKHIGH4MOVWFCODE0WRITE1_4CALLBTFSCGOTOGOTOBSFRLFCALLDECFSZGOTOGOTODELAY0_9PORTB,0WRITE1_4WRITE0_4STATUS,CCODE3_TEMP,FDELAY1_0COUNT8,FLOOP6CHECKALLWRITE0_4BCFSTATUS,CRLFCODE3_TEMP,FDECFSZCOUNT8,FGOTOLOOP6GOTOCHECKALL;接下来校验系统码,即确认是不是是该遥控器发出的红外信号;还有校验数据码和数据反码是不是相反,只要有一个不符合就清空所有数据,返回
34、MAIN程序。;存储CHECKALLMOVFCODE0_TEMP,WMOVFCODE1_TEMP,WMOVWFCODE1MOVFCODE2_TEMP,WMOVWFCODE2MOVFCODE3_TEMP,WMOVWFCODE3;32位码已经保留完毕,接下来利用接卜来利用CODE?_TEMP面的数据进行校验。;校验MOVLWB'10000000'对照系统码1XORWFCODE0_TEMP,WBTFSSSTATUS,Z;判定系统码1是不是=00000000?GOTOFANHUI;假设否,执行这一步:返回主程序MOVLWB'01111110'假设是,继续对照系统码2,注
35、释类似上面就不写了XORWFCODE1_TEMP,WBTFSSSTATUS,ZGOTOFANHUICOMFCODE3_TEMP,W;假设是,继续对照数据码和数据反码XORWFCODE2_TEMP,WBTFSSSTATUS,ZGOTOFANHUIMOVFCODE2,WMOVWFTEMPGOTOFANHUI;FANHUI;返回主程序。在这之前需要做一系列工作。MOVLW.9;再次设初值,供下次利用MOVWFCOUNT5MOVLW.10MOVWFCOUNT6CLRFCODE0;清除记录的信号。数据码已经存入CLRFCODE1CLRFCODE2CLRFCODE3CLRFCODE0_TEMPCLRFCO
36、DE1_TEMPCLRFCODE2_TEMPCLRFCODE3_TEMPSWAPFSTATUS_TEMP,W;现场还原,恢复STATUSMOVWFSTATUSSWAPFW_TEMP,F;现场还原,恢复WSWAPFW_TEMP,WBCFINTCON,INTF;清除INT的标志位BSFINTCON,GIE;开启总中断RETFIE;下面是中断程序要挪用的子程序;DELAY0_8(延时子程序)DELAY0_8MOVLW.100MOVWFCOUNT7FANHUITEM呻了。LOOP1NOPNOPNOPNOPNOPDECFSZCOUNT7,1GOTOLOOP1RETURN;DELAY0_3(延时子程序)D
37、ELAY0_3MOVLW.99MOVWFCOUNT9LOOP2DECFSZCOUNT9,1GOTOLOOP2RETURN;DELAY1_0(延时子程序)DELAY1_0MOVLW.100MOVWFCOUNT7LOOP7NOPNOPNOPNOPNOPNOPNOPDECFSZCOUNT7,1GOTOLOOP7RETURNDELAY0_9DELAY0_9MOVLW.100MOVWFCOUNT7LOOP8NOPNOPNOPNOPNOPNOPCOUNT7,1LOOP8DECFSZGOTORETURN*主程序 *STARTUPBSFSTATUS,RP0 ; 选择体 1MOVLWB'00000001
38、'MOVWFTRISBMOVLWB'00000001'MOVWFOPTION_REG发有效;RB0设为输入,RB25、RB7设为输出;TMR0 的分频比设为1: 4,INT 端口的下降沿触MOVLW B'00001111'MOVWF TRISC ;RC47 设为输出MOVLW06HMOVWFADCON1;将RA脚全数设置为数字I/O脚BCFSTATUS,RP0;选择体0BCFPORTB,RB7;初始化端口数据寄放器BCFPORTB,RB2BCFPORTB,RB3BCFPORTB,RB4BCFPORTB,RB5CLRFPORTCCALLLCDINITIAT
39、E;LCD初始化CALLSTART;LCD开机界面BSFSTATUS,RP0;选择体1MOVLWB'00000001';因为LCD相关程序中设置的分频比与播放器设置的分频比不同,因此每次从LCD程序返回后要修改分频比MOVWFOPTION_REG;只说明这一次,以后再也不注释。BCFSTATUS,RP0;选择体0MOVLW.9;所有通用RAMfe址初始化MOVWFCOUNT5MOVLW.10MOVWFCOUNT6CLRFTEMPCLRFCODE0CLRFCODE1CLRFCODE2CLRFCODE3CLRFCODE0_TEMPCLRFCODE1_TEMPCLRFCODE2_TE
40、MPCLRFCODE3_TEMPCLRFADDR2CLRFDATA3CLRFTCLRFTEMP_SAVEMOVLWB'10010000'MOVWFINTCON;只开启总中断和INT的中断MAIN;开机后,通过上面的STARTU陪B份后将在MAIN里无穷循环;;遥控器各按键含义:9/0/下是播放歌曲,0-8是播放音符,+是存储并播放音符(到了另外一个循环里去了),返回是播放。;另外,三角是停止存储,返回MAIN程序。MOVLWB'10101100'XORWFTEMP,WBTFSSSTATUS,Z的值是不是为上面的二进制数。GOTO$+3不是别的值CALLSONGC
41、ALLSONG1MOVLWB'10111000'XORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLSONGCALLSONG2;按键9;通过判定亦或的结果是不是为0,来判定TEMP;假设不相等,那么跳过下面两步,检测TEM加;假设相等,那么LCD显示“正在播放歌曲”,;播放器播放SONG仔程序里的歌。;按键0;含义同上,因此接下来都再也不注释了XORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLSONGCALLSONG3MOVLWB'10000100'按键1XORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALL
42、DZQCALLDOMOVLWB'11000100'按键2XORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLDZQCALLREMOVLWB'10100100'按键3XORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLDZQCALLMIMOVLWB'10010100'按键4XORWFTEMP,WBTFSSSTATUS,ZMOVLWB'11011000'J按键下GOTO$+3CALLDZQCALLFAMOVLWB'11010100'按键5XORWFTEMP,WBTFSSSTATUS,
43、ZGOTO$+3CALLDZQCALLSOMOVLWB'10110100'按键6XORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLDZQCALLLAMOVLWB'10001100'按键7XORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLDZQCALLSIMOVLWB'11001100'按键8XORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLDZQCALLDO_HMOVLWB'10010000'按键“+”XORWFTEMP,WBTFSCSTATUS,ZGOTOSAVE_ST
44、ART;注意那个地址是转到“开始录制”这段程序而不是挪用MOVLWB'10110000'按键“返回”XORWFTEMP,WBTFSCSTATUS,ZCALLSAVE_PLAYGOTOMAIN;在MAIN里无穷循环*EERPOM 存储和读取部份,同时也是MAIN 的子程序 *从MAIN跳入另一个循环判定SAVE_STARTBSFSTATUS,RP0;选择体3BSFSTATUS,RP1CLRFADDR2;ADDR2作转存EEPROMJ地址指针用,本步是将ADDR2青零,即从EEPROMJ00H开始存储CLRFT;T在播放存储的一段音符时有效,因此到那里的时候再说其作用。在那个地址是
45、以防万一,因此每次存储时将它清零在那个地址是以防万一,因此每次存储时将它清零CLRFDATA3;DATA3作转存EEPRO谣前的读写内容用SAVEMOVLWB'10000100'检测是不是是DO以下各段注释类似XORWFTEMP,WBTFSSSTATUS,Z;判定是不是是DO?GOTO$+3;假设不是,那么跳过下面两步,检测不是别的值CALLSAVE_WRITE;假设是,那么挪用存储该音符的子程序CALLDO;并发音TEM呢MOVLWB'11000100'检测是不是是REXORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLSAVE_WRITEC
46、ALLREMOVLWB'10100100'检测是不是是MIXORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLSAVE_WRITECALLMIMOVLWB'10010100'检测是不是是FAXORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLSAVE_WRITECALLFAMOVLWB'11010100'检测是不是是SOXORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLSAVE_WRITECALLSOMOVLWB'10110100'检测是不是是LAXORWFTEMP,WBTFSSSTATUS,ZGOTO$+3CALLSAVE_WRITECALLLAMOVLWB'100
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025智能制造合作合同
- 2025短期合同工聘用合同范本
- 幼儿园常见传染病预防
- 传染病防治工作培训会
- 脊柱围手术期护理
- 2025年植物遗传综合试题
- 审计处工作总结模版
- 僵人综合征的临床护理
- 船厂班组年终总结模版
- 电力设备行业深度报告:欧洲电车趋势已起-从欧洲车企2025Q1财报看电动化趋势151mb
- 2025湖北水发集团园招聘40人笔试参考题库附带答案详解
- 2025年武汉数学四调试题及答案
- 2024年全国高中数学联赛北京赛区预赛一试试题(解析版)
- 紧急填仓换刀及破除孤石技术
- 南瑞科技220kv断路器辅助保护nsr-322an型保护装置调试手册
- 滚筒冷渣机技术协议
- 氨基转移酶检测临床意义和评价注意点
- 中债收益率曲线和中债估值编制方法及使用说明
- 国家开放大学《行政组织学》章节测试参考答案
- 什么是标准工时如何得到标准工时
- 牛津译林版英语八年级下册8B——单词默写(表格版)
评论
0/150
提交评论