单片机交流
直播中

熊本熊

8年用户 1372经验值
擅长:处理器/DSP
私信 关注
[问答]

怎样去设计一种基于51单片机的液晶显示电子琴?

怎样去设计一种基于51单片机的液晶显示电子琴?
基于51单片机的液晶显示电子琴的威廉希尔官方网站 是如何去设计的?

怎样去编写基于51单片机的液晶显示电子琴的代码?

回帖(1)

张倩

2021-7-6 12:54:44

通过矩阵键盘,放大威廉希尔官方网站 ,复位威廉希尔官方网站 ,晶振威廉希尔官方网站 ,功能选择威廉希尔官方网站 ,LCD显示威廉希尔官方网站 构成
以下是部分代码 。
void main(void) //主函数 { LED1=0; LED2=0; IE=0x87; //定义外部中断控制器 TMOD=0x01; //定义定时器0工作方式1 IT0=1; IT1=1; lcd_init(); init_play(); while(1) { P1=0xf0; if((P1&0xf0)!=0xf0) //判断 P1 口是否有变化 { anjian(); //读取键值 if(Mode==0) //如果是弹奏模式 { S_TH0 = tab[k]/256; S_TL0 = tab[k]%256; //根据 k 的值赋初值给 T0 TR0 = 1; //打开定时器用于定时产生频率发生 wr_com(0x89); wr_dat(0x30+k/10); wr_dat(0x30+k%10); while ((P1&0xf0)!=0xf0); //按键不松开的话, T0 就一直产生频率 TR0=0; //按键松开后关闭 T0 计时,频率停止 } else //如果是播放模式(上面的 if 语句不成立就执行 else) { while (Mode==1) //进入播放模式 { if(Song[k][Tone_Number]==-1) { Tone_Number=0; break; } wr_com(0x89); wr_dat(0x30+Song[k][Tone_Number]/10); wr_dat(0x30+Song[k][Tone_Number]%10); S_TH0=(tab[Song[k][Tone_Number]])/256; S_TL0=(tab[Song[k][Tone_Number]])%256; TR0 = 1; //打开定时器定时开关 delay1(300*Beat[k][Tone_Number]); //节拍数组延 Tone_Number++; //变量加准备播放下一个音符 TR0 = 0; //停止定时器 anjian(); //扫描按键 while((P1&0xf0)!=0xf0); } } } } } void EXO_IXT() interrupt 0 //外部中断 0 { unsigned char j; Mode=0; //弹奏模式 LED1=1; LED2=0; //点亮弹奏模式指示灯 Tone_Number=0; wr_com(0x01); wr_com(0x80); for(j=0;j《16;j++) { wr_dat(num_1[j]); } } void EX1_INT() interrupt 2 //外部中断 1 { unsigned char j; Mode=1; //播放模式 LED1=0; LED2=1; wr_com(0x01); wr_com(0x80); for(j=0;j《16;j++) { wr_dat(num_2[j]); } } void time0_int(void) interrupt 1 using 0 //定时器 0 { TH0 = S_TH0; //定时器赋初值 TL0 = S_TL0; SPKER=!SPKER; //喇叭引脚取反,产生频率的音乐 }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分