




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子琴设计报告摘要功能:本作品是基于单片机控制系统的简易电子琴,有各种友好的菜单界面和显示界面,可实现通过按键控制,发出1、2、3、4、5、6、7、i……等二十一个音符。该电子琴亦能够自动演奏三首乐曲,且其演奏方式(点播、顺序播放和随机播放)可以通过按键选择(其中点播模式还可以点播之前的录音,可以播放掉电之前保存的录音)。操作者还可以在电子琴演奏时对电子琴进行音调(按键控制)、音量(电位器)的调节,并能以发光二极管显示播放音量的大小。同时在设置模式下能调节音阶和拍长,音阶和拍长在掉电后仍然保存。另外,它可以对手动编奏的乐曲进行录音,在按下放音键时能演奏出来,同时贮存在eeprom里面,掉电不丢失。还有一键关机功能,一键按下关闭整个电路板的电源。方案的设计和论证电源控制控制模块方案(1):采用继电器来控制电源的关断,其优点是电路设计比较简单,但是由于继电器的体积偏大,如果以后要做出易于携带的产品的话,不是很方便;方案(2):运用晶体管的开关功能设计电源开关控制电路,通过向单片机输入外部中断来使得单片机自动控制电源的关断。主控模块这模块主要实现的功能有:=1\*GB3①接收由键盘输入的信号并输出相应的操作信号;=2\*GB3②控制菜单操作显示器基于以上标示,可考虑采用51系列单片机、AVR单片机,或者ARM等都可以实现,但是从性价比考虑,AVR系列优势比较明显,因此选用之作为主控芯片。至于菜单显示部分可以采用以下两种方案:(1)1602液晶:它能显示16X2个数字或英文字符,信息量较大,用串行通讯可减少I/O口的占用量。1602的成本中等,是值得考虑的选择。(2)12864是带中文字库的液晶显示屏,可以显示4X16个汉字,甚至可以显示图案,显示功能较为强大。使用12864可以提供大量信息,但是其价格比较1602液晶要贵几倍。考虑到成本因素,决定采用1602液晶来实现该显示功能。掉电保护电路:(1)使用外部存储器不过得加入外部电路,既加大成本又加大功耗。(2)使用AVR单片机自带的EEPROM不用增加器件,操作简单。综上所述,我们采用第(2)种掉电保护方案。音量调节模块方案(1):采用数字电位器对音量进行调节,这样做的好处是便于数字控制,可以选择的音量大小不多。方案(2):采用可变电阻进行音量调节,这样可实现音量连续可调。另外,在如何显示音量大小的问题上,我们采用的是以数字芯片TA6777来驱动发光二极管,当音量比较大时,发光二极管亮的个数比较多。功放模块方案(1):采用LM386芯片对对输出的音乐信号进行放大,其优点是电路简单,稳定性强;方案(2):采用TDA2822芯片放大音乐信号,但是TDA2822在单电源供电下,工作不是很稳定。考虑到稳定性因素,选用方案(1)。键盘输入模块方案(1):采用矩阵键盘(N×M),每个按键占据行列的一个交点,需要的I/O口数目是N+M,容许的最大键数是N×M。方案(2):新型键盘,用N个I/O口以及一个中断口,可以实现N×N个按键,比较节省I/O资源,故采用之。系统框图基于AtmelMega16L电子琴系统的硬件总体结构图如图1所示,主要包括中央处理器MCU、单键开关机电路,1602显示模块、功放模块、键盘模块、电平灯频谱显示模块等。各模块的设计与论证中央处理器MCU中央处理器选用的是ATMega16l,ATmega16是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。具体的电路连接图如图2所示。PB0~PB7用于连接键盘输入(INT2用于键盘的中断输入);PD0用于连接单键开关电路的续电;PD2(INT0)用于连接单键开关电路按键的检测;PD5用于音律PWM的输出;PC0~PC7用于连接LCD1602显示输出,其中PC0~PC2用于控制1602的选通、读写控制等的操作,PC3~PC7连接74HC595,实现串行数据转并行数据。单片机输出频率CTC不同的信号来产生各种音符,将歌曲各个音符的转化成相应的数字信号,存放在单片机程序寄存器中,当播放音乐时,程序从该寄存器里读取数据,然后以CTC信号的模式传给功放电路,实现放音乐的功能。当要向单片机录入音乐时,通过键盘上的按键,输入不同的音符,接下来单片机可以记录下音符以及其持续的时间,然后存入程序寄存器中,当录音结束,按下“录入确认键”,按下来就可以从菜单里选择播放刚才录入的音乐。单键开关机模块该电路的工作原理是:接通K1(总电源开关,外电源接到P0)后,按动轻触开关S2,三极管Q29012导通,VCC输出高电平,单片机接通电源工作后,第一时间给P_OUT一个高电平,三极管Q19013导通,这样,即使按键S2松开了,Q2也依然导通,电路依然接通。当按键S2再次按下时,单片机检测到P_IN为低电平,这是单片机可以延时一段时间后,将P_OUT置为低电平,Q1截止,Q2也同时截止,电路断开。3、电平灯频谱显示模块为了显示的效果更炫,本硬件电路特意增加了一个电平灯频谱显示模块,该模块采用的是一块TP7666芯片,该芯片在老式收音机上非常常见,现在已经很难买到。该芯片具有双路5点电平显示,而且外围电路原件很少。4、6×6键盘模块该电路的工作原理是:待机时,PORT1~PORT6输出高电平;当某个键按下时,PORT7由高电平变为低电平,由此产生一个中断;MCU启动按键扫描,如按下的是K30时,置PORT1=H,扫描PORT2~6的输入结果为LLLL,没有扫描到所需的结果;继续置PORT2=H,扫描PORT1、PORT3~6的输入结果为HLLL,按键S30就被唯一确定了。5、LCD1602液晶显示模块该模块的连接比较简单,但是若直接使用并行数据传送的话要用到11个IO口,这里为了节省IO口资源,使用也一片74HC595串行数据转并行数据芯片,该芯片与单片机连接最多只需要5个IO口,这样连接一片1602只需要8个IO口,节省了3个IO口。具体的硬件连接图如下图5所示。电位器RW1可用于调节背光的亮度,RW2可用于调节液晶的对比度。6、小功率功放模块这里的功放模块采用了传统的LM386芯片,采用该芯片是因为LM386具有自身功耗低,电压增益可调整,电源电压范围大,外接元件少和总谐波失真小等优点,尤其是在增益为20DB时使用的外围原件极少。具体的单路连接如下图6所示。软件程序流程图测量与分析1(do)2(re)3(mi)4(fa)5(sol)6(la)7(si)降C131Hz147Hz165Hz174.5Hz196Hz220Hz音符音符音阶中央C261.5Hz293.5Hz329.5Hz349Hz392Hz440Hz494Hz升C523Hz587Hz659Hz698Hz784Hz880Hz988Hz输出音调对应的频率表按C调来说1=261.5HZ2=293.5HZ3=329.5HZ4=349HZ5=392HZ6=440HZ7=494HZ低7个音调后1=131Hz2=147Hz3=165Hz4=174.5Hz5=196Hz6=220Hz7=247Hz高7个音调后1=523Hz2=587Hz3=659Hz4=698Hz5=784Hz6=880Hz7=988Hz总结 经过一翻辛苦努力,终于搞定了电子琴了。这个过程中团队合作让我们收获很多。三个同学一起做,不可能每个同学对每项内容都了解得很透彻,需要知识互补。另外,遇到困难的时候不能指望让一个同学独自解决,团队合作不崇尚单打独斗。源程序主文件go.c://主文件,包含主函数#include<iom16v.h>#include<macros.h>#include<eeprom.h>#defineucharunsignedchar#defineuintunsignedint#definevucharvolatileunsignedchar#definevuintvolatileunsignedint#definerecord_max160//变量定义vucharkey_int=0,mode_fr=0,counter_en_fr=0,pop_en_fr=0;vucharrow=0,scrollbar=1,volume,temp,delayMs,tonality,tone;vucharinttemp;ucharmusicLength,recordLength;uintbell_standard_time;vuintcounter_ms=0;vucharcounter_record;vucharsong_4[record_max][2];//包含头文件//子函数清单#include"function_list.h"//数据#include"data.h"//延时#include"delay.h"//键盘中断#include"int2.h"//液晶#include"ts1620.h"//发声部分#include"bell.h"//功能函数1#include"fun.h"//功能函数2#include"fun_need_check.h"voidmain(){ power_init();//一键关机初始化 while(1) { ts1620_init();//液晶初始化 welcome();//欢迎界面 all_init();//各类变量初始化 int2_init();//键盘中断初始化 mode_fr=0;//极其的关键变量,记录状态 while(key_int!=keyreset) { if(mode_fr==0)menu();//主菜单 if(mode_fr==1)manul();//模式1,手动弹奏初始化 if(mode_fr==1)manul_check();//模式1,手动弹奏 if(mode_fr==20)autoplay();//模式20,自动弹奏主菜单 if(mode_fr==210)demand_menu();//模式210,点播菜单 if(mode_fr==211)demand_play(key_int);//模式211,点播演奏初始化 if(mode_fr==211)demand_play_check(key_int,211);//模式211,点播演奏 if(mode_fr==212)demand_play(keyfun4);//模式212,点播演奏初始化(录音部分) if(mode_fr==212)demand_play_check(keyfun4,212);//模式212,点播演奏(录音部分) if(mode_fr==22)order_play();//模式22,顺序弹奏 if(mode_fr==23)outorder_play();//模式23,乱序弹奏 if(mode_fr==31)record();//模式31,录音初始化 if(mode_fr==31)record_check();//模式31,录音 if(mode_fr==32)replay();//模式32,放音 if(mode_fr==50)settings();//模式50,设置菜单 if(mode_fr==51)settings1();//模式51,设置拍长 if(mode_fr==52)settings2();//模式52,设置音阶 } }}以下是function_list.h//各子程序清单voiddelay_nop(void);voiddelay(uint/*_delay_ms*/);voidint2_init(void);ucharkey_line(uchar);ucharkey_search(uchar);ucharkey_find(void);voidkey_int2(void);voidwrite_com(uchar);voidwrite_data(uchar);voidclear(void);voidcursor_return(void);voidentry_mode_set(uchar,uchar);voiddisplay_on_off(uchar,uchar,uchar);voidshift(uchar,uchar);voidset_function(uchar,uchar,uchar);voidset_address(uchar,uchar);voidts1620_init(void);voidscreen_same(uchar,uchar,uchar);voidscreen_one(uchar,uchar);voidscreen_sleep(void);voidshow_menu(constuchar*,constuchar*);voidshow_vol(void);voidshow_screen(constuchar*,uchar,constuchar*,uchar);voidshow_saving(void);voidmenu_move(uchar);voidwelcome(void);voidall_init(void);voidmenu(void);voidmanul(void);voidmanul_check(void);voiddelay_check(uint);voidtonality_c(uchar);voidbell_init(void);voidautoplay(void);voiddemand_menu(void);voiddemand_play(uchar);voiddemand_play_check(uchar,uchar);voidbell_music(uchar,uchar);voidrecord(void);voidrecord_check(void);voidreplay(void);voidsettings(void);voidsettings1(void);voidsettings2(void);voidorder_play(void);voidoutorder_play(void);ucharout_order(void);voidpower_init(void);voidpower_off(void);以下是delay.h#define_nopdelay_nop()voiddelay_nop()//微妙级别延时函数{asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");}voiddelay(uint_delay_ms)//毫秒级别延时函数{uint_delay_i,_delay_j;for(_delay_i=0;_delay_i<_delay_ms;_delay_i++)for(_delay_j=0;_delay_j<1711;_delay_j++);}以下是data.h//此头文件包含各类数据,data(存放在程序存储区)#pragmainterrupt_handlerkey_int2:iv_INT2#pragmainterrupt_handlerpower_off:iv_INT0#defineINTPORT10#defineINTPORT21#defineINT_22#defineINTPORT33#defineINTPORT44#defineINTPORT55#defineINTPORT66#defineton10x16#defineton20x26#defineton30x36#defineton40x46#defineton50x56#defineton60x66#defineton70x13#defineton80x15#defineton90x25#defineton100x35#defineton110x45#defineton120x55#defineton130x65#defineton140x23#defineton150x14#defineton160x24#defineton170x34#defineton180x44#defineton190x54#defineton200x64#defineton210x33#definekeysleep0x61#definekeyreturn0x51#definekeymenu0x52#definekeyreset0x62#definekeyvolOn0x11#definekeyvolDn0x12#definekeymenuUp0x41#definekeymenuDn0x42#definekeyfun10x21#definekeyfun20x31#definekeyfun30x22#definekeyfun40x32#definekeyreplay0x63#definekeypause0x53#definekeyres0x43#pragmadata:codeconstucharwelcome_0[]="Welcome...";constucharpower_0[12]="GOODBYE";constucharpower_1[15]="poweroff:3s";constucharwelcome_1[]="madByBinFenLinYe";constucharmanul_0[14]="ManulModeton";constucharmanul_1[9]="Tonality:";constucharrecord_0[14]="Recordington";constucharreplay_0[14]="Replayington";constucharsaving[9]="Saving...";constucharIc_0[][15]={{"WhichmodedoU"}, {"wanttochoose?"}, {"1.Manualplay"}, {"2.Autoplay"}, {"3.Recordmode"}, {"4.Setting"}};constucharIc_20[][15]={{"1.Playmusicon"}, {"demand"}, {"2.Playinorder"}, {"3.Playoutof"}, {"order"}};constucharIc_210[][16]={{"1.Welcometo"}, {"Beijing"}, {"2.Legend"}, {"3.Myth"}, {"4.PlaybyMyself"}};constucharIc_50[][16]={{"1.Beatlength"}, {"2.Toneselection"}};constucharIc_51[][15]={{"1.1200ms/Beat"}, {"2.1100ms/Beat"}, {"3.1000ms/Beat"}, {"4.900ms/Beat"}, {"5.800ms/Beat"}, {"6.700ms/Beat"}, {"7.300ms/Beat"}};constucharIc_52[][15]={{"1.Ctone"}, {"2.Dtone"}, {"3.Etone"}, {"4.Ftone"}, {"5.Gtone"}};constucharbjhyn_title[]="WelcomeToBjt";constuchardemand_title[]="OnPlay";constucharlegend_title[]="Legendt";constucharmyth_title[]="Mytht";constucharplayBm_title[]="PlayByMet";constucharsongs[][2]={{10,0x84}, {16,0x84},{10,0x84},{9,0x84},{10,0x84},{9,0x84}, {10,0x88},{10,0x86},{9,0x82},{6,0x84},{8,0x84}, {10,0x84},{9,0x8c},{9,0x84},{8,0x84},{6,0x84}, {8,0x84},{9,0x84},{10,0x84},{12,0x84},{9,0x84}, {10,0x84},{13,0x84},{12,0x84},{5,0x84},{9,0x88}, {8,0x88},{9,0x84},{8,0x84},{6,0x84},{8,0x84}, {9,0x84},{10,0x84},{12,0x84},{9,0x84},{10,0x84}, {13,0x84},{12,0x84},{10,0x90},{9,0x84},{10,0x84}, {9,0x84},{8,0x84},{12,0x86},{13,0x82},{10,0x88}, {6,0x84},{10,0x84},{9,0x84},{9,0x84},{8,0x8c}, {0,0x84},{10,0x84},{12,0x84},{15,0x84},{12,0x84}, {13,0x8c},{12,0x84},{13,4},{12,0x84},{10,0x84}, {10,0x84},{12,0x84},{12,0x8c},{10,0x84},{12,0x84}, {13,0x84},{15,0x84},{16,0x84},{15,0x84},{12,0x84}, {10,0x84},{9,0x84},{12,8},{10,0x84},{10,0x90},//76 {10,0x84},{12,0x84},{15,0x84},{12,0x84},{13,0x8c}, {15,0x84},{16,0x86},{15,0x82},{12,0x84},{10,0x84}, {12,0x84},{15,0x84},{13,0x8c},{10,0x84},{9,0x84}, {10,0x84},{13,0x84},{17,0x84},{16,0x8c},{16,0x84}, {15,0xa0},{10,0x84},{12,0x84},{15,0x84},{12,0x84}, {13,0x8c},{15,0x84},{16,0x86},{15,0x82},{12,0x84}, {10,0x84},{12,0x84},{15,0x84},{13,0x8c},{10,0x84}, {9,0x84},{10,0x84},{13,0x84},{17,0x84},{17,0x84}, {17,0xb0},{15,0x84},{0,0x84},{15,0xc0},{0x8f,0x84},//121个音符,北京欢迎你 {8,0x82},{8,0x82},{8,0x84},{8,0x82},{10,0x82}, {9,0x86},{9,0x82},{9,0x82},{8,0x82},{8,0x84}, {8,0x82},{9,0x84},{9,0x82},{9,0x84},{9,0x82}, {8,0x82},{6,0x8f},{7,0x82},{7,0x82},{7,0x84}, {8,0x84},{9,0x84},{7,0x84},{6,0x82},{5,0x86}, {3,0x92},{10,0x82},{9,0x82},{10,0x82},{10,0x81}, {9,0x84},{9,0x84},{9,0x82},{8,0x82},{8,0x88}, {9,0x84},{6,0x84},{6,0x82},{6,0x82},{9,0x84}, {8,0x8f},{7,0x82},{7,0x82},{7,0x84},{8,0x82}, {9,0x82},{9,0x84},{9,0x84},{6,0x82},{5,0x86},//50 {3,0x92},{12,0x88},{9,0x84},{10,0x84},{12,0x88}, {9,0x86},{8,0x82},{6,0x92},{9,0x88},{0,0x82}, {6,0x84},{10,0x82},{9,0x88},{8,0x84},{8,0x84}, {5,0x92},{12,0x88},{9,0x84},{10,0x84},{12,0x88}, {9,0x84},{8,0x84},{6,0x92},{9,0x88},{6,0x84}, {10,0x84},{9,0x88},{8,0x84},{9,0x84},{9,0x92}, {8,0x82},{8,0x82},{8,0x84},{5,0x82},{8,0x82}, {8,0x84},{12,0x84},{11,0x84},{10,0x84},{9,0x88}, {8,0x8f},{0,0x82},{8,0x82},{10,0x82},{12,0x82}, {13,0x86},{12,0x82},{13,0x84},{12,0x84},{0,0x82},//100 {13,0x84},{12,0x82},{0,0x82},{10,0x82},{10,0x82}, {12,0x82},{10,0x92},{0,0x84},{8,0x82},{8,0x82}, {8,0x84},{5,0x82},{8,0x82},{8,0x84},{13,0x84}, {11,0x84},{10,0x84},{9,0x86},{8,0x82},{8,0x8f}, {0,0x82},{8,0x82},{10,0x82},{12,0x82},{13,0x86}, {12,0x82},{13,0x84},{12,0x84},{0,0x82},{13,0x84}, {12,0x82},{0,0x82},{10,0x82},{12,0x84},{12,0x92}, {0,0x84},{8,0x82},{8,0x82},{8,0x84},{8,0x82}, {10,0x82},{9,0x86},{9,0x82},{9,0x82},{8,0x82}, {8,0x84},{8,0x82},{9,0x84},{9,0x82},{9,0x84},//150 {9,0x82},{8,0x82},{6,0x8f},//153个音符,传奇 {10,0x88},{9,0x84},{8,0x84},{9,0x88},{8,0x84},{7,0x84},{8,0x88},{7,0x84}, {6,0x84},{5,0x8f},{6,0x88},{8,0x88},{7,0x88},{5,0x88},{3,0x8f},{0,0x88}, {8,0x84},{9,0x84},{10,0x88},{9,0x84},{8,0x84},{9,0x88},{8,0x84},{7,0x84}, {8,0x88},{7,0x84},{6,0x84},{5,0x8f},{6,0x88},{10,0x88},{7,0x88},{8,0x84}, {9,0x84},{8,0x92},{0,0x88},{6,0x8b},{8,0x84},{7,0x88},{8,0x84},{9,0x84}, {10,0x8b},{12,0x84},{10,0x8f},{6,0x8b},{8,0x84},{7,0x88},{8,0x84},{9,0x84}, {8,0x92},{8,0x84},{9,0x84},{10,0x88},{9,0x84},{8,0x84},{9,0x88},{8,0x84}, {7,0x84},{8,0x88},{7,0x84},{6,0x84},{5,0x8f},{6,0x88},{8,0x88},{7,0x88}, {8,0x84},{9,0x84},{10,0x8f},{9,0x88},{8,0x84},{9,0x84},{10,0x88},{9,0x84}, {8,0x84},{9,0x88},{8,0x84},{7,0x84},{8,0x88},{7,0x84},{6,0x84},{5,0x88}, {7,0x84},{5,0x84},{6,0x88},{10,0x88},{7,0x88},{8,0x84},{9,0x84},{8,0x92}, {10,0x84},{12,0x84},{13,0x8b},{13,0x84},{12,0x84},{9,0x88},{12,0x88},{10,0x88}, {8,0x88},{6,0x88},{10,0x84},{9,0x84},{8,0x88},{10,0x84},{9,0x84},{9,0x88}, {10,0x84},{6,0x84},{6,0x8f},{10,0x84},{12,0x84},{13,0x8b},{13,0x84},{12,0x84}, {9,0x84},{9,0x84},{12,0x84},{10,0x88},{8,0x88},{6,0x88},{10,0x84},{9,0x84}, {8,0x88},{10,0x84},{9,0x84},{9,0x88},{12,0x84},{10,0x84},{10,0x8f},{10,0x84}, {12,0x84},{13,0x8b},{13,0x84},{12,0x84},{9,0x84},{9,0x84},{12,0x84},{10,0x88}, {8,0x88},{6,0x88},{10,0x84},{9,0x84},{8,0x88},{10,0x84},{9,0x84},{9,0x88}, {10,0x84},{6,0x84},{6,0x8f},{10,0x84},{12,0x84},{13,0x8b},{13,0x84},{12,0x84}, {9,0x84},{9,0x84},{12,0x84},{10,0x88},{8,0x88},{6,0x88},{6,0x84},{7,0x84}, {8,0x88},{9,0x84},{10,0x84},{9,0x88},{10,0x88},{6,0x92}//166个音符 }; #pragmadata:data以下是int2.h//键盘中断voidint2_init(){//中断初始化 DDRB=0x7b; PORTB=0x7b; MCUCSR&=~BIT(ISC2); SREG|=BIT(7); GIFR|=BIT(INTF2); GICR|=BIT(INT2);}ucharkey_line(ucharINTPORT){//检测键盘按键的行值 ucharINT2TEMP=0; _nop; PORTB=0; DDRB=0; _nop; DDRB=(1<<INTPORT); PORTB=(1<<INTPORT); _nop; if((PINB&(1<<INT_2))==0) { switch(INTPORT) { case0:INT2TEMP=0x10;break; case1:INT2TEMP=0x20;break; case3:INT2TEMP=0x30;break; case4:INT2TEMP=0x40;break; case5:INT2TEMP=0x50;break; case6:INT2TEMP=0x60;break; } } returnINT2TEMP;}ucharkey_search(ucharport_sure){//检测键盘按键的列值 ucharkey_temp,key_sure=0; port_sure-=(port_sure<3); PORTB=0; DDRB=(1<<port_sure); PORTB=(1<<port_sure); for(key_temp=1;key_temp<port_sure+(port_sure<3);key_temp++) { if(key_sure==0) { if(PINB&(1<<key_temp-(key_temp<3)))key_sure=key_temp; } } for(key_temp=port_sure+(port_sure<3)+1;key_temp<=6;key_temp++) { if(key_sure==0) { if(PINB&(1<<key_temp-(key_temp<3)))key_sure=key_temp; } } if(key_sure==0)key_sure=port_sure+(port_sure<3); returnkey_sure;}ucharkey_find(){//获取按键值 ucharint2Temp=0; delay(10); if((PINB&BIT(2))==0) { if(int2Temp==0)int2Temp=key_line(INTPORT1); if(int2Temp==0)int2Temp=key_line(INTPORT2); if(int2Temp==0)int2Temp=key_line(INTPORT3); if(int2Temp==0)int2Temp=key_line(INTPORT4); if(int2Temp==0)int2Temp=key_line(INTPORT5); if(int2Temp==0)int2Temp=key_line(INTPORT6); if(int2Temp)int2Temp+=key_search(int2Temp/0x10); } returnint2Temp;}voidkey_int2(){//中断函数 GICR&=~BIT(INT2); key_int=key_find(); //mode_fr:0.menu1.manul20.autoMenu210.demandMenu //211.demandPlay31.record32.replay //4.volumeSet DDRB=0; PORTB=0x7b; DDRB=0x7b; pop_en_fr=0; if(mode_fr==0)//0.menu { pop_en_fr=1; switch(key_int) { casekeyfun1:mode_fr=1;break; casekeyfun2:mode_fr=20;break; casekeyfun3:mode_fr=31;break; casekeyfun4:mode_fr=50;break; //casekeysleep:GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; casekeymenuUp:break; casekeymenuDn:break; casekeyreset:break; default:key_int=0; } } if(pop_en_fr==0)//1.manul { if(mode_fr==1) { pop_en_fr=1; switch(key_int) { //casekeysleep:GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; caseton1: { screen_one(0x2a,''); write_data('1');delay(2); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton2: { screen_one(0x2a,''); write_data('2');delay(2); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton3: { screen_one(0x2a,''); write_data('3');delay(2); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton4: { screen_one(0x2a,''); write_data('4');delay(2); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton5: { screen_one(0x2a,''); write_data('5');delay(2); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton6: { screen_one(0x2a,''); write_data('6');delay(2); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton7: { screen_one(0x2a,''); write_data('7');delay(2); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton8: { screen_one(0x2a,''); write_data('');delay(2); write_data('1');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton9: { screen_one(0x2a,''); write_data('');delay(2); write_data('2');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton10: { screen_one(0x2a,''); write_data('');delay(2); write_data('3');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton11: { screen_one(0x2a,''); write_data('');delay(2); write_data('4');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton12: { screen_one(0x2a,''); write_data('');delay(2); write_data('5');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton13: { screen_one(0x2a,''); write_data('');delay(2); write_data('6');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton14: { screen_one(0x2a,''); write_data('');delay(2); write_data('7');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton15: { screen_one(0x2a,''); write_data('');delay(2); write_data('');delay(2); write_data('1'); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton16: { screen_one(0x2a,''); write_data('');delay(2); write_data('');delay(2); write_data('2'); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton17: { screen_one(0x2a,''); write_data('');delay(2); write_data('');delay(2); write_data('3'); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton18: { screen_one(0x2a,''); write_data('');delay(2); write_data('');delay(2); write_data('4'); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton19: { screen_one(0x2a,''); write_data('');delay(2); write_data('');delay(2); write_data('5'); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton20: { screen_one(0x2a,''); write_data('');delay(2); write_data('');delay(2); write_data('6'); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } caseton21: { screen_one(0x2a,''); write_data('');delay(2); write_data('');delay(2); write_data('7'); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0))_nop; break; } casekeyvolOn: { tone++;if(tone>4)tone=4; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeyvolDn: { tone--;if(tone>16)tone=0; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeymenu:mode_fr=0;break; casekeyreturn:mode_fr=0;break; casekeyreset:mode_fr=9;break; default: key_int=0; } } } if(pop_en_fr==0)//20.autoMenu { if(mode_fr==20) { pop_en_fr++; switch(key_int) { casekeyreturn:mode_fr=0;break; casekeymenu:mode_fr=0;break; casekeyfun1:mode_fr=210;break; casekeyfun2:mode_fr=22;break; casekeyfun3:mode_fr=23;break; //casekeysleep:GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; casekeymenuUp:break; casekeymenuDn:break; casekeyreset:mode_fr=9;break; default:key_int=0; } } } if(pop_en_fr==0)//210.demandMenu { if(mode_fr==210) { pop_en_fr++; switch(key_int) { casekeyreturn:mode_fr=20;break; casekeymenu:mode_fr=0;break; casekeyfun1:mode_fr=211;break; casekeyfun2:mode_fr=211;break; casekeyfun3:mode_fr=211;break; casekeyfun4:mode_fr=212;break; //casekeysleep:GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; casekeymenuUp:break; casekeymenuDn:break; casekeyreset:mode_fr=9;break; default:key_int=0; } } } if(pop_en_fr==0)//211.demandPlay { if(mode_fr==211) { pop_en_fr++; switch(key_int) { //casekeypause:screen_sleep();GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; //casekeysleep:GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; //casekeyvolOn:pro1=vol_c;break; //casekeyvolDn:pro1=vol_c;break; casekeyvolOn: { tone++;if(tone>4)tone=4; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeyvolDn: { tone--;if(tone>16)tone=0; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeyfun3:break; casekeyfun4:break; casekeyreturn:mode_fr=210;break; casekeymenu:mode_fr=0;break; casekeyreset:mode_fr=9;break; //case:;break; default:key_int=0; } } } if(pop_en_fr==0)//212.demandPlay { if(mode_fr==212) { pop_en_fr++; switch(key_int) { //casekeypause:screen_sleep();GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; //casekeysleep:GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; //casekeyvolOn:pro1=vol_c;break; //casekeyvolDn:pro1=vol_c;break; casekeyvolOn: { tone++;if(tone>4)tone=4; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeyvolDn: { tone--;if(tone>16)tone=0; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeyfun3:break; casekeyfun4:break; casekeyreturn:mode_fr=210;break; casekeymenu:mode_fr=0;break; casekeyreset:mode_fr=9;break; //case:;break; default:key_int=0; } } } if(pop_en_fr==0)//22.orderPlay { if(mode_fr==22) { pop_en_fr++; switch(key_int) { //casekeypause:screen_sleep();GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; //casekeysleep:GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; //casekeyvolOn:pro1=vol_c;break; //casekeyvolDn:pro1=vol_c;break; casekeyvolOn: { tone++;if(tone>4)tone=4; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeyvolDn: { tone--;if(tone>16)tone=0; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeymenuUp:break; casekeymenuDn:break; casekeyfun3:break; casekeyfun4:break; casekeyreturn:mode_fr=20;break; casekeymenu:mode_fr=0;break; casekeyreset:mode_fr=9;break; //case:;break; default:key_int=0; } } } if(pop_en_fr==0)//23.outorderPlay { if(mode_fr==23) { pop_en_fr++; switch(key_int) { //casekeypause:screen_sleep();GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; //casekeysleep:GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; //casekeyvolOn:pro1=vol_c;break; //casekeyvolDn:pro1=vol_c;break; casekeyvolOn: { tone++;if(tone>4)tone=4; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeyvolDn: { tone--;if(tone>16)tone=0; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeymenuUp:break; casekeymenuDn:break; casekeyfun3:break; casekeyfun4:break; casekeyreturn:mode_fr=20;break; casekeymenu:mode_fr=0;break; casekeyreset:mode_fr=9;break; //case:;break; default:key_int=0; } } } if(pop_en_fr==0)//31.record { if(mode_fr==31) { if(counter_record>record_max-2) { mode_fr=32; return; } counter_ms=0; switch(key_int) { //casekeyvolOn:pro1=vol_c;break; //casekeyvolDn:pro1=vol_c;break; //casekeypause:GIFR|=BIT(INTF2);GICR|=BIT(INT2);MCUCR|=BIT(6);asm("SLEEP");break; casekeyvolOn: { tone++;if(tone>4)tone=4; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeyvolDn: { tone--;if(tone>16)tone=0; screen_one(0x0f,0x43+tone); key_int=0;break; } casekeyreturn:mode_fr=0;break; casekeyreplay:mode_fr=32;break; casekeyreset:mode_fr=9;break; casekeymenu:mode_fr=0;break; caseton1: { screen_one(0x21,'1'); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0)) { delay(1); counter_ms++; } break;} caseton2: { screen_one(0x21,'2'); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0)) { delay(1); counter_ms++; } break;} caseton3: { screen_one(0x21,'3'); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0)) { delay(1); counter_ms++; } break;} caseton4: { screen_one(0x21,'4'); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0)) { delay(1); counter_ms++; } break;} caseton5: { screen_one(0x21,'5'); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0)) { delay(1); counter_ms++; } break;} caseton6: { screen_one(0x21,'6'); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0)) { delay(1); counter_ms++; } break;} caseton7: { screen_one(0x21,'7'); write_data('');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0)) { delay(1); counter_ms++; } break;} caseton8: { screen_one(0x21,''); write_data('1');delay(2); write_data(''); tonality_c(key_int); _nop; while(((PINB&BIT(2))==0)) { delay(1); counter_ms++; } break;} caseton9: { screen_one(0x21
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023-2024学年湖北省武汉市新洲区高二下学期6月期末考试数学试题(解析版)
- 2023-2024学年广东省肇庆市高要区高二下学期期中调研测试数学试题(解析版)
- 芬兰和中国科技合作协议
- 佛山机关休假管理制度
- 佛山集体宿舍管理制度
- 供应公司薪酬管理制度
- 供水企业卫生管理制度
- 供水公司水库管理制度
- 供水设备日常管理制度
- 供热客户服务管理制度
- 大学生心理健康教育导论
- 河南省洛阳市2024-2025学年高二下学期6月期末质检物理试卷(含答案)
- 浙江理工大学《统计学与R语言》2023-2024学年第二学期期末试卷
- 2025年广西壮族自治区林业局直属事业单位笔试题库带答案分析
- 公司社保挂靠管理制度
- 市政道路施工的安全措施与管理
- 2024年江苏理工学院招聘专职辅导员真题
- 小学英语教育教学论文大全
- 2025年全省民政行业职业技能大赛(孤残儿童护理员)备考试题库(含答案)
- 食堂保温箱管理制度
- 风电场预警管理制度
评论
0/150
提交评论