单片机交流
登录
直播中
熊本熊
8年用户
1372经验值
擅长:处理器/DSP
私信
关注
[问答]
怎样去设计一种基于51单片机的液晶显示电子琴?
开启该帖子的消息推送
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; //喇叭引脚取反,产生频率的音乐 }
通过矩阵键盘,放大威廉希尔官方网站 ,复位威廉希尔官方网站 ,晶振威廉希尔官方网站 ,功能选择威廉希尔官方网站 ,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; //喇叭引脚取反,产生频率的音乐 }
举报
更多回帖
rotate(-90deg);
回复
相关问答
51单片机
液晶显示
代码
如何利用
51
单片机
制作
液晶显示
的
电子琴
?
2021-10-28
1259
如何利用
51
单片机
实现
电子琴
系统的设计?
2022-01-17
1219
怎样
去
设计
一种
基于
51
单片机
的甲醛浓度
显示
及报警系统
2021-10-19
1464
怎样
连接
单片机
与
电子琴
~~~~~
2013-04-02
4292
基于
51
单片机
的16键
电子琴
程序
2018-06-29
5301
求基于
51
单片机
的
电子琴
程序
2021-10-18
1608
怎样
去
设计
一种
基于
51
单片机
的遥控音乐系统
2021-11-09
1607
如何利用atmega128
单片机
实现玩具
电子琴
的设计?
2022-01-24
1030
怎样
去
设计
一种
基于
51
单片机
的
电子
密码锁威廉希尔官方网站
2021-08-31
1441
电子琴
2016-07-29
3530
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分