资源简介
本文件是基于51单片机的16音节电子琴仿真设计,并附有c语言程序,proteus完整接线图,c程序有详细的注释方便同学们的理解。且有详细实验报告供同学们参考
代码片段和文件信息
#include
#define uchar unsigned char
#define uint unsigned int
//共阳极数码管编码
uchar code DSY_Table[] =
{ 0xc00xf90xa40xb00x990x920x820xf80x80 //012345678
0x900x880x830xc60xa10x860x8e0xBF }; //9ABCDEF-
//各音符对应的延时
uint code Tone_Delay_Table[] =
{ 6402164103642606440064524645806468464777
6482064898649686503065058651106515765178 };
sbit BEEP = P3^0; //蜂鸣器
uchar KeyNo; //按键序号
//-------------------------
//延时
//-------------------------
void DelayMS(uchar x)
{
uchar i;
while ( x-- ) for(i = 0;i < 120; i++);
}
//----------------------------------
//键盘矩阵扫描子程序
//----------------------------------
void Keys_Scan()
{
uchar Tmpk;
//高四位置0,放入四行
P1 = 0x0F;
DelayMS(2);
//按键后00001111将变成0000XXXXX中1个为03个仍为1
//下面的异或操作会把3个1变成0,唯一的0变成1
Tmp = P1 ^ 0x0F;
//判断按键发生于0~3列中的哪一列
switch (Tmp)
{
case 1: k = 0;break;
case 2: k = 1;break;
case 4: k = 2;break;
case 8: k = 3;break;
default:return; //无键按下
}
//低四位置0,放入四列
P1 = 0xF0;
DelayMS(2);
//按键后11110000将变成XXXX0000,X中1个为03个仍为1
//下面的表达式会将高四位移至低四位,并将其中唯一的0变为1,其余为0
Tmp = (P1 >> 4)^0x0F;
//对0~3行分别附加起始值04812
switch (Tmp)
{
case 1: k += 0; break;
case 2: k += 4; break;
case 4: k += 8; break;
case 8: k += 12; break;
default:return;
}
KeyNo = k;
}
//------------------------------------------------
//定时器0中断程序,不同频率的声音由该中断产生
//------------------------------------------------
void Play_Tone() interrupt 1
{
TH0 = Tone_Delay_Table[ KeyNo ] / 256;
TL0 = Tone_Delay_Table[ KeyNo ] % 256;
BEEP = ~BEEP;
}
//--------------------------------------------
//主程序
//--------------------------------------------
void main()
{
P0 = 0xFF; //初始值
TMOD = 0x01;
IE = 0x82;
while(1)
{
P1 = 0xF0; //发送扫描码
if (P1 != 0xF0) //如果有键按下
{
Keys_Scan(); //扫描键盘矩阵
P0 = DSY_Table[ KeyNo ]; // 显示按键
P0 = ~P0;
TR0 = 1; //启动定时器,根据KeyNo发音
}
else
{
TR0 = 0; //停止播放
}
DelayMS(2);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 146432 2019-06-20 19:31 电子琴\单片机原理课程设计-电子琴.doc
目录 0 2019-06-20 15:43 电子琴\
目录 0 2019-06-20 15:43 电子琴\1\
文件 4591 2019-06-20 15:06 电子琴\1\1.LST
文件 3899 2019-06-20 15:06 电子琴\1\1.OBJ
文件 2357 2019-06-20 15:06 电子琴\1\1.c
文件 18769 2019-06-20 15:40 电子琴\1\2.pdsprj
文件 2245 2019-06-20 15:40 电子琴\1\2.pdsprj.7QRGKBQR4BYJOSO.Administrator.workspace
文件 19264 2019-06-17 21:57 电子琴\1\Backup Of 2.pdsbak
文件 6376 2009-05-07 14:37 电子琴\1\STARTUP.A51
文件 14048 2019-06-20 15:06 电子琴\1\STARTUP.LST
文件 758 2019-06-20 15:06 电子琴\1\STARTUP.OBJ
文件 4047 2019-06-20 15:06 电子琴\1\dian
文件 7346 2019-06-20 15:06 电子琴\1\dian.M51
文件 895 2019-06-20 15:06 电子琴\1\dian.hex
文件 38 2019-06-20 15:06 电子琴\1\dian.lnp
文件 377 2019-06-20 15:06 电子琴\1\dian.plg
文件 55640 2019-06-20 15:40 电子琴\1\dian.uvopt
文件 13389 2019-06-17 21:57 电子琴\1\dian.uvproj
文件 55642 2019-06-17 21:57 电子琴\1\dian_uvopt.bak
文件 13390 2019-06-17 16:37 电子琴\1\dian_uvproj.bak
- 上一篇:物流管理系统V4.8
- 下一篇:教职工信息管理系统-结课作业C++
相关资源
- 51单片机DIY制作:旋转LED数字显示电子
- 基于C语言的流水灯设计
- AVR单片机C语言程序设计精粹程序
- 微机接口课设 Proteus 8086 汽车控制系统
- DSM501A基于51单片机code
- 各种语言编写的pcm代码
- STC单片机与si4432C语言程序
- 用单片机控制ADC0804实现5V电压表程序
- 51单片机-数码管时钟秒表
- 国密SM4加密解密51单片机版C源程序.
- 单片机常用的C语言程序和继电器备用
- 4*5键盘
- 简易电子琴_proteus.rar
- c语言程序实现PC端通过USB端口与单片
- 远程仓库湿度监测系统设计-Proteus仿真
- 新概念51单片机C语言教程入门、提高
- 51单片机下oled显示ds18b20采集温度
- 电子密码锁设计
- 单片机接收数据帧帧头帧尾校验数据
- 单片机 多级菜单
- 模数转换器ADS1252 程序适用于c51系列的
- 篮球赛计时计分器毕业设计自己写的
- 51单片机超声波测距小车.rar
- 基于51单片机可调电子时钟
- 51单片机测量转速
- 基于51单片机的12864液晶显示C语言源程
- 51单片机做简易计算器
- ADC0809与80C52单片机
- 单片机流水灯C语言
- 基于51单片机多节点RS485通信带Protue
评论
共有 条评论