AT89C51单片机的多音阶电子琴培训课件方案研究.ppt

AT89C51单片机的多音阶电子琴培训课件方案研究.ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AT89C51单片机的多音阶电子琴培训课件方案研究.ppt

;设计方案;;多音阶电子琴的主要电路主要由4 X 4按键矩阵电路、蜂鸣器、LED显示、复位电路、晶振电路、电源电路几部分组成。;;工作原理:;三、各模块的简单介绍 ;AT89S51单片机及其引脚的简单说明; P3口的详细介绍;电源电路;时钟电路;时序概念有4个,分别为:;节拍 ;RST(pin 9)引脚是复位信号的输入端。 此引脚高电平有效, 其有效时间应为二个机器周期。 ;复位操作 ;上电自动复位;;按键电平复位 通过RST端经电阻与电源Vcc接通而实现的;利用RC微分电路产生的正脉冲 来实现按键脉冲复位;本系统的复位电路采用的是按键方式。 电阻为10K,电容为10uF、晶振为12MHz,如下图:;矩阵式键盘的概述;(一):4*4矩阵键盘原理接线图;void saomiao() { uchar Key_Temp1, Key_Temp2; /*读出的键值*/ ?Key_Temp1 = Keyscan(); /*读入按键*/ ? if(Key_Temp1 != 16) /*有键按下*/ { delay_ms(5); /*延时消抖*/ ?Key_Temp2 = Keyscan(); /*再读一次*/ ?if (Key_Temp1 == Key_Temp2) /*两次相等*/ ? { Key_Value = Key_Temp1; /*就确认下来*/ ? FreqTemp = Freqtab[Key_Value]; /*根据键值,取出定时半周期的初始值*/ TR0 = 1; /*启动定时器,发音*/ ? while (Keyscan() 16); /*等待释放*/ ? SPK = 1; } /*停止发音* }? TR0 = 0; /*暂不发音*/ ?} ;数码管简介;显示模块工作过程;数码管显示原理接线图;74als573芯片说明;显示模块程序;发声系统;达林顿管简单介绍;达林顿管引脚图;达林顿管引脚功能介绍;蜂鸣器接线图;四、软件设计;音乐发声程序流程图 ;#include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char sbit SPK = P3^7; /*P3.7外接扬声器*/ sbit shiwei = P2^6; sbit gewei = P2^7; uint FreqTemp; char Key_Value=-1; uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned int code Freqtab[] = { /*定时半周期的初始值*/ 64021,64103,64260,64400, /*低音3 4 5 6*/ 64524,64580,64684,64777, /*低音7,中音1 2 3*/ 64820,64898,64968,65030, /*中音4 5 6 7*/ 65058,65110,65157,65178}; /*高音1 2 3 4*/; /*函数功能 : 用扫描法读 P1 外接 4×4 键盘*/ /*函数返回 : 有按下键:返回1~15、如无键按下:返回00*/ uchar Keyscan(void) { uchar i, j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7}; for(j = 0; j 4; j++) /*循环四次,扫描四行*/ { P1 = Buffer[j]; /*在低四位分别输出一个低电平*/ _nop_(); temp = 0x80; /*计划先读出P1.7位*/ for(i = 0; i 4; i++) /*循环四次,检查四列*/ { if(!(P1 temp)) /*从高四位,截取1位*/ { return (i +

文档评论(0)

youngyu0329 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档