资源简介
本文件是基于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++
相关资源
- 单片机c语言源程序(51定时器 八个按
- 用单片机控制蜂鸣器播放旋律程序(
- 电子时钟 有C语言程序,PROTEUS仿真图
- 合泰触摸单片机BS84B08C实际应用代码上
- 基于STM32单片机的心率体温测量仪
- 九齐单片机源码
- 单片机PID控制(C语言)
- 基于单片机的交通灯设计.doc
- usb键盘(MyUSB_HID_KEIL)
- C51单片机技术教程(304页)
- C51单片机交通
- 单片机C语言实战开发108例
- stm32库函数代码自动生成器V1.2
- 单片机电子密码锁
- Proteus 8.6仿真STM32F103C6
- 单片机程序(附初级、中级、高级共
- 按键可调万年历(单片机程序)
- 51单片机数码管四层电梯模拟系统
- Proteus仿真:动态数码管
- Proteus仿真:基于定时器的可调时钟
- 基于51单片机的温控系统
- Proteus仿真:DS1302(时钟or日历).rar
- Proteus仿真:LCD液晶屏显示.rar
- Proteus仿真:LED流水+定时器.rar
- Proteus仿真:PID算法输出.rar
- KEIl操作
- 51单片机protues文件(KST-51.DSN)
- 51单片机交通灯设计
- 基于51单片机的简易计算器
- 单片机按键长按
评论
共有 条评论