此设计键盘用于弹奏音乐,八个按键8种音符。单片机通过输出各种电脉冲信号开驱动控制各部分正常工作。单片机要产生音频脉冲,主要处理过程是在CPU中完成的,CPU会随时对音符输入信号进行读取数据的操作。在读取了相应的寄存器的值后,CPU将读取的值进行处理,再通过I/O口把音乐通过扬声器播放出来。据设计要求,本系统主要由控制器模块和输入模块构成。

电子琴电路原理图:

电子琴设计元件清单:

1.   8欧0.25w小喇叭

2.   8050三极管*2

3.   10k电阻*2

4.   30欧姆电阻

5.   40脚座

6.   STC89c51

7.   10uf电容

8.   30pf电容*2

9.   小按键*8

10.  自锁开关

11.  DC电源座

12.  12m晶振

13.  7*9万用板

14. 导线若干

15.  焊锡若干

16.  usb电源线或电池盒+DC电源插头

电子琴源程序及仿真图:

部分源程序代码:

#include                  //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

//数码管段选定义 0     1    2    3           4           5        6         7          8           9

uchar code smg_du[]={0x14,0x77,0x4c,0x45,0x27,0x85,0x84,0x57,0x04,0x05,

//                                           A        B         C          D           E   F        不显示

0x06,0xa4,0x9c,0x64,0x8c,0x8e,0xff};         //断码

//数码管位选定义

sbit smg_we1 = P2^0;            //数码管位选定义

sbit smg_we2 = P2^2;

sbit smg_we3 = P2^4;

sbit smg_we4 = P2^6;

uchar dis_smg[8] = {0x14,0x77,0x4c,0x45,0x27,0x85,0x84};

uchar smg_i = 3;    //显示数码管的个位数

sbit dq   = P3^3;        //18b20 IO口的定义

bit flag_wd_z_f;       //正负温度

int temperature ;  //

/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i

for(j=0;j<120;j++);

}

/***********************小延时函数*****************************/

void delay_uint(uint q)

{

while(q--);

}

/***********************数码位选函数*****************************/

void smg_we_switch(uchar i)

{

switch(i)

{

case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;

case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;

case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;

case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;

}

}

/***********************数码显示函数*****************************/

void display()

{

static uchar i;

i++;

if(i >= smg_i)

i = 0;

P0 = 0xff;                         //消隐

smg_we_switch(i);                 //位选

P0 = dis_smg;                 //段选

}

/***********************18b20初始化函数*****************************/

void init_18b20()

{

bit q;

dq = 1;                                //把总线拿高

delay_uint(1);            //15us

dq = 0;                                //给复位脉冲

delay_uint(80);                //750us

dq = 1;                                //把总线拿高 等待

delay_uint(10);                //110us

q = dq;                                //读取18b20初始化信号

delay_uint(20);                //200us

dq = 1;                                //把总线拿高 释放总线

}

/*************写18b20内的数据***************/

void write_18b20(uchar dat)

{

uchar i;

for(i=0;i<8;i++)

{                                         //写数据是低位开始

dq = 0;                         //把总线拿低写时间隙开始

dq = dat & 0x01; //向18b20总线写数据了

delay_uint(5);         // 60us

dq = 1;                         //释放总线

dat >>= 1;

}

}

/*************读取18b20内的数据***************/

uchar read_18b20()

{

uchar i,value;

for(i=0;i<8;i++)

{

dq = 0;                         //把总线拿低读时间隙开始

value >>= 1;         //读数据是低位开始

dq = 1;                         //释放总线

if(dq == 1)                 //开始读写数据

value |= 0x80;

delay_uint(5);         //60us        读一个时间隙最少要保持60us的时间

}

return value;                 //返回数据

}

/*************读取温度的值 读出来的是小数***************/

uint read_temp()

{

uint value;

uchar low;                           //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序

init_18b20();                   //初始化18b20

write_18b20(0xcc);           //跳过64位ROM

write_18b20(0x44);           //启动一次温度转换命令

delay_uint(50);                   //500us

init_18b20();                   //初始化18b20

EA = 0;

write_18b20(0xcc);           //跳过64位ROM

write_18b20(0xbe);           //发出读取暂存器命令

low = read_18b20();        //读温度低字节

value = read_18b20();  //读温度高字节

EA = 1;

value <<= 8;                   //把温度的高位左移8位

value |= low;                   //把读出的温度低位放到value的低八位中

if((value & 0xf000) == 0xf000)

{

flag_wd_z_f = 1;          //负温度

}

else

flag_wd_z_f = 0;          //正温度

value *= 0.625;               //转换到温度值 小数

return value;                   //返回读出的温度

}

/*************定时器0初始化程序***************/

void time_init()

{

EA   = 1;                   //开总中断

TMOD = 0X01;          //定时器0、定时器1工作方式1

ET0  = 1;                  //开定时器0中断

TR0  = 1;                  //允许定时器0定时

}

/****************主函数***************/

void main()

{

P0 = P1 = P2 = P3 = 0xff;

time_init();                    //初始化定时器

temperature = read_temp();                //先读出温度的值

delay_1ms(650);

temperature = read_temp();                         //先读出温度的值

dis_smg[0] = smg_du[temperature % 10];         //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0xfb; //取温度的个位显示

dis_smg[2] = smg_du[temperature / 100 % 10] ;           //取温度的十位显示

while(1)

{

temperature = read_temp();        //先读出温度的值

if(flag_wd_z_f == 1)   //负温度

{

smg_i = 4;

dis_smg[0] = smg_du[temperature % 10];         //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0xfb; //取温度的个位显示

dis_smg[2] = smg_du[temperature / 100 % 10] ;           //取温度的十位显示

dis_smg[3] = 0xef;          //负号

}else

{

if(temperature >= 1000)

{

smg_i = 4;

dis_smg[0] = smg_du[temperature % 10];         //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0xfb; //取温度的个位显示

dis_smg[2] = smg_du[temperature / 100 % 10] ;           //取温度的十位显示

dis_smg[3] = smg_du[temperature / 1000 % 10] ;           //取温度的十位显示

}else

{

smg_i = 3;

dis_smg[0] = smg_du[temperature % 10];         //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0xfb; //取温度的个位显示

dis_smg[2] = smg_du[temperature / 100 % 10] ;           //取温度的十位显示

}

}

delay_1ms(300);

}

}

/*************定时器0中断服务程序***************/

void time0_int() interrupt 1

{

TH0 = 0xf8;

TL0 = 0x30;     //2ms

display();                //数码管显示函数

}

单片机多功能电子琴课设_基于51单片机的电子琴设计相关推荐

  1. 单片机多功能电子琴课设_基于51单片机的多功能电子琴设计.doc

    基于51单片机的多功能电子琴设计 基于51单片机的多功能电子琴的设计 摘要 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器.它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编 ...

  2. 单片机多功能电子琴课设_基于51单片机设计的简易电子琴

    基于51单片机设计的简易电子琴 下面直接给出proteus仿真电路 代码如下:#include #define uint unsigned int #define uchar unsigned cha ...

  3. 单片机多功能电子琴课设_基于51单片机的简易电子琴课程设计

    1.本设计采用51单片机作为主控制器 2.外部加上放音设备如喇叭等,来实现音乐演奏控制器的硬件电路 3.用8个手工的按键发出八个音阶 制作出来的电子琴实物图如下: 仿真原理图如下(proteus仿真工 ...

  4. 单片机多功能电子琴课设_基于51单片机电子琴的设计(附源码及论文)

    单片机最小系统 单片机最小系统 单片机最小系统说明: 时钟信号的产生:在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2.而在芯片的外部,XTAL1和 ...

  5. 单片机多功能电子琴课设_基于单片机的多功能电子琴设计

    基于单片机的多功能电子琴设计 程家勤 ; 刘强强 ; 张阳熠 ; 周海军 ; 欧美英 ; 董可秀 [期刊名称] <电子制作> [年 ( 卷 ), 期] 2017(000)011 [摘要] ...

  6. 单片机多功能电子琴课设_基于单片机的简易电子琴课程设计.doc

    基于单片机的简易电子琴课程设计.doc 还剩 16页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 15 14可在实际的应用时这些是不能被忽略的,我们不 ...

  7. 单片机多功能电子琴课设_基于单片机的电子琴设计(最终版)最新版

    <基于单片机的电子琴设计.doc>由会员分享,可免费在线阅读全文,更多与<基于单片机的电子琴设计(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里 ...

  8. 单片机多功能电子琴课设_单片机电子琴课程设计

    单片机技术及系统设计 题 目 : 基于单片机的电子琴制作 专 业 : 自动化 班 级 : 姓 名 : 学 号 摘要 : 随着电子技术的发展,尤其是大规模集成电路的出现,给人类生活带来 了根本性的改变. ...

  9. 单片机c语言篮球比分_基于51单片机的篮球记分牌设计

    1 摘 要 单片机,亦称单片微电脑或单片微型计算机.它是把中央处理器( CPU ).随机存 取存储器( RAM ).只读存储器( ROM ).输入 / 输出端口( I/0 )等主要计算机功能部件 都集 ...

最新文章

  1. 通风与防排烟工程电子书_暖通、通风、防排烟风管如何做抗震设计呢?
  2. 对图像进行二维离散Fourier变换
  3. JVM监控及诊断工具-命令行篇一
  4. 饿了么研发总监马尧:外卖推荐算法中有哪些机制与手段?
  5. Form表单中的元素 控件集
  6. TCP queue 的一些问题
  7. win7 php mysql扩展名_Win7 配置Apache+PHP+Mysql环境
  8. iphone mac地址是否随机_iOS8随机MAC地址功能:需要满足前提要求
  9. 海升集团数据上云 走出智能农业的新路子
  10. unzip 报错error [clas.zip]:  missing 1844 bytes in zipfile
  11. hibernate优化笔记(随时更新)
  12. python实现单链表快速排序升序linkedqueue_数据结构1
  13. Mybatis There is no getter for property named 'XXX' in 'class java.lang.XXX
  14. 计算机绘图员 机械 实训二,计算机绘图员[机械]实训形考.doc
  15. 【Mavne】log4j-slf4j-impl cannot be present with log4j-to-slf4j
  16. 快速入门linux(收藏版)
  17. Excel基础知识(10):多工作簿数据的引用与更新
  18. win7无法连接打印机拒绝访问_小编告诉你打印机拒绝访问无法连接
  19. php 磁盘配额,samba服务器安装+磁盘配额笔记
  20. gps wgs84坐标与高德gcj02坐标互转

热门文章

  1. python海龟怎么隐藏_Turtle库学习--海龟可见性与外观
  2. Github Copilot 和 Github Copilot Nightly 的区别
  3. 全网最详细,手把手教你如何参与Harmony(ONE)Staking质押,以BitMax节点为例
  4. Gtk Label设置字体颜色
  5. Web Services 应用开发学习笔记(三):XML模式定义
  6. 智能导购系统设计与实现
  7. 工行接收外汇汇入,短信提示需要“信息确认后方可入帐”,应外管政策要求(因私涉外收入申报)
  8. zbar下条形码和二维码的识别与解码Ⅰ|2021SC@SDUSC
  9. Failed to connect to raw.githubusercontent.com port 443 处理方法
  10. 计算机基础知识--基础知识