资源简介
该设计采用AT89C51(AT89C51数据手册)单片机作为主控制芯片,外接灯光闪烁功能和8音调键。

代码片段和文件信息
#include //包含51单片机寄存器定义的头文件
sbit P14=P1^4; //将P14位定义为P1.4引脚
sbit P15=P1^5; //将P15位定义为P1.5引脚
sbit P16=P1^6; //将P16位定义为P1.6引脚
sbit P17=P1^7; //将P17位定义为P1.7引脚
unsigned char keyval; //定义变量储存按键值
sbit sound=P3^7; //将sound位定义为P3.7
unsigned int C; //全局变量,储存定时器的定时常数
unsigned int f; //全局变量,储存音阶的频率
//以下是C调低音的音频宏定义
#define l_dao 262 //将“l_dao”宏定义为低音“1”的频率262Hz
#define l_re 286 //将“l_re”宏定义为低音“2”的频率286Hz
#define l_mi 311 //将“l_mi”宏定义为低音“3”的频率311Hz
#define l_fa 349 //将“l_fa”宏定义为低音“4”的频率349Hz
#define l_sao 392 //将“l_sao”宏定义为低音“5”的频率392Hz
#define l_la 440 //将“l_a”宏定义为低音“6”的频率440Hz
#define l_xi 494 //将“l_xi”宏定义为低音“7”的频率494Hz
//以下是C调中音的音频宏定义
#define dao 523 //将“dao”宏定义为中音“1”的频率523Hz
#define re 587 //将“re”宏定义为中音“2”的频率587Hz
#define mi 659 //将“mi”宏定义为中音“3”的频率659Hz
#define fa 698 //将“fa”宏定义为中音“4”的频率698Hz
#define sao 784 //将“sao”宏定义为中音“5”的频率784Hz
#define la 880 //将“la”宏定义为中音“6”的频率880Hz
#define xi 987 //将“xi”宏定义为中音“7”的频率53
//以下是C调高音的音频宏定义
#define h_dao 1046 //将“h_dao”宏定义为高音“1”的频率1046Hz
#define h_re 1174 //将“h_re”宏定义为高音“2”的频率1174Hz
#define h_mi 1318 //将“h_mi”宏定义为高音“3”的频率1318Hz
#define h_fa 1396 //将“h_fa”宏定义为高音“4”的频率1396Hz
#define h_sao 1567 //将“h_sao”宏定义为高音“5”的频率1567Hz
#define h_la 1760 //将“h_la”宏定义为高音“6”的频率1760Hz
#define h_xi 1975 //将“h_xi”宏定义为高音“7”的频率1975Hz
/**************************************************************
函数功能:软件延时子程序
**************************************************************/
void delay20ms(void)
{
unsigned char ij;
for(i=0;i<100;i++)
for(j=0;j<60;j++)
;
}
/*******************************************
函数功能:节拍的延时的基本单位,延时200ms
******************************************/
void delay()
{
unsigned char ij;
for(i=0;i<250;i++)
for(j=0;j<250;j++)
;
}
/*******************************************
函数功能:输出音频
入口参数:F
******************************************/
void Output_Sound(void)
{
C=(46083/f)*10; //计算定时常数
TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法
TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法
TR0=1; //开定时T0
delay(); //延时200ms,播放音频
TR0=0; //关闭定时器
sound=1; //关闭蜂鸣器
keyval=0xff; //播放按键音频后,将按键值更改,停止播放
}
/*******************************************
函数功能:主函数
******************************************/
void main(void)
{
EA=1; //开总中断
ET0=1; //定时器T0中断允许
ET1=1; //定时器T1中断允许
TR1=1; //定时器T1启动,开始键盘扫描
TMOD=0x10; //分别使用定时器T1的模式1,T0的模式0
TH1=(65536-500)/256; //定时器T1的高8位赋初值
TL1=(65536-500)%256; //定时器T1的高8位赋初值
while(1) //无限循环
{
switch(keyval)
{
case 1:f=dao; //如果第1个键按下,将中音1的频率赋给f
Output_Sound(); //转去计算定时常数
break;
case 2:f=
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9603 2018-06-01 21:43 电子琴.cpp
相关资源
- Navicat Premium 15汉化包.zip55438
- 登录注册界面.zip48872
- 电信中兴光猫超密获取工具使用方法
- IAR-Keygen-2019+附使用教程.zip
-
st
yles 引文样式语言( CSL ) 引文样 - flash as3 多点触控-缩放-旋转-滑动.zi
- IMX385驱动代码.zip
- sony_imx385.zip
- Origin2019最新中文版用户入门使用手册
- ucosII源代码 2.9版本全 Micrium-uCOS-II-V
- SX1301 +sx1255 GATEWAY.zip
- SX126x_LORA驱动程序(包含完整的工程文
- STM32 DS3231驱动.zip
- 7-zip压缩包
- EC20相关.zip
- 21天学会嵌入式开发STM32.zip
- Intel(R) 82579V网卡驱动for server20033
- 企业工资管理系统.zip
- OdooHotelManagementSystem 基于Odoo的酒店管
- 代码项目“生成”微博、知乎、
- 迅雷敏感资源限制解除小工具.zip
- 美松打印机SDK MsPrintSDK-Demo-DLL-CShare-
- BullZip PDF Printer v10.10.0.2307 官方版
- 今日头条源码.zip
- teleportultra_22658.zip
-
Notepad++xm
l格式化插件和json格式化插 - Surface pro 7 SD卡固定硬盘X64驱动带数字
- 解决方案-超过100帧/秒的速度从单色摄
- DMA+stm32 407.zip
- 4_USART串口通信(空闲中断+DMA.zip
评论
共有 条评论