资源简介
输入为4*4按键,每个按键代表不同的音符,预先已经设置好音符表,即使蜂鸣器发出不同频率的声音

代码片段和文件信息
#include
#define uint unsigned int
#define uchar unsigned char
uchar temp;
uchar key;
uchar ij;
uchar STH0;
uchar STL0;
sbit beer=P1^0;
sbit P34=P3^4;sbit P35=P3^5;
sbit P36=P3^6;sbit P37=P3^7;
uint code tab[]={64021641036426064400645246458064684647776482064898649686503065058651106515765178}; //音符表
/**********************主函数*******************/
void main(void)
{
TMOD=0x01; //设置定时器为工作方式1,16位定时/计数器模式
ET0=1; //打开定时器0
EA=1; //允许所有中断
while(1)
{
P3=0xff;
P34=0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f) //从第一行开始扫描键盘
{
for(i=50;i>0;i--) //延时,反弹跳
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
switch(temp) //读取按键值
{
case 0x0e: key=0;break;
case 0x0d: key=1;break;
case 0x0b: key=2;break;
case 0x07: key=3;break;
}
temp=P3;
beer=~beer;
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1; //开定时器0
temp=temp&0x0f;
while(temp!=0x0f)
{temp=P3;
temp=temp&0x0f;
}
TR0=0;
}
}
P3=0xff;
P35=0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f) //从第二行开始扫描
{
for(i=50;i>0;i--) //延时,反弹跳
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
switch(temp) //读取按键值
{
case 0x0e: key=4;break;
case 0x0d: key=5;break;
case 0x0b: key=6;break;
case 0x07: key=7;break;
}
temp=P3;
beer=~beer;
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1; //开定时器0
temp=temp&0x0f;
while(temp!=0x0f)
{temp=P3;
temp=temp&0x0f;
}
TR0=0;
}
}
P3=0xff;
P36=0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f) //从第三行开始扫描
{
for(i=50;i>0;i--) //延时,反弹跳
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
switch(temp) //读取按键值
{
case 0x0e: key=8;break;
case 0x0d: key=9;break;
case 0x0b: key=10;break;
case 0x07: key=11;break;
}
temp=P3;
beer=~beer;
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1; //开定时器0
temp=temp&0x0f;
while(temp!=0x0f)
{temp=P3;
temp=temp&0x0f;
}
TR0=0;
}
}
P3=0xff;
P37=0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f) //第四行
{
for(i=50;i>0;i--) //延时,反弹跳
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
switch(temp) //读取按键值
{
case 0x0e: key=12;break;
case 0x0d: key=13;break;
case 0x0b: key=14;break;
case 0x07: key=15;break;
}
temp=P3;
beer=~beer;
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1; //开定时器0
temp=temp&0x0f;
while(temp!=0x0f)
{temp=P3;
temp=temp&0x0f;
}
TR0=0;
}
}
}
}
/*****************定时器T0中断服务函数*********************/
void to(voi
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-11-01 18:58 简易电子琴设计\
文件 17525 2018-08-25 16:15 简易电子琴设计\Backup Of 新工程.pdsbak
文件 1852 2018-08-25 15:47 简易电子琴设计\Last Loaded 新工程.pdsbak
文件 18168 2018-08-27 15:35 简易电子琴设计\Last Loaded 简易电子琴.pdsbak
目录 0 2018-11-01 18:58 简易电子琴设计\Listings\
文件 14537 2018-08-28 15:15 简易电子琴设计\Listings\STARTUP.lst
文件 7121 2018-08-28 15:15 简易电子琴设计\Listings\简易电子琴.lst
文件 10748 2018-08-28 15:15 简易电子琴设计\Listings\简易电子琴.m51
目录 0 2018-11-01 18:58 简易电子琴设计\ob
文件 828 2018-08-28 15:15 简易电子琴设计\ob
文件 6696 2018-08-28 15:15 简易电子琴设计\ob
文件 1030 2018-08-28 15:15 简易电子琴设计\ob
文件 1768 2018-08-28 15:15 简易电子琴设计\ob
文件 133 2018-08-28 15:15 简易电子琴设计\ob
文件 7237 2018-08-28 15:15 简易电子琴设计\ob
文件 6376 2016-04-01 17:01 简易电子琴设计\STARTUP.A51
文件 328 2018-08-25 16:15 简易电子琴设计\新工程.pdsprj.ODM.ggg.workspace
文件 3214 2018-08-28 16:12 简易电子琴设计\简易电子琴.c
文件 17649 2018-08-28 15:18 简易电子琴设计\简易电子琴.pdsprj
文件 2200 2018-08-28 15:39 简易电子琴设计\简易电子琴.pdsprj.ODM.ggg.workspace
文件 85192 2018-08-28 16:12 简易电子琴设计\简易电子琴.uvgui.ggg
文件 5476 2018-08-25 17:28 简易电子琴设计\简易电子琴.uvopt
文件 14062 2018-08-25 17:28 简易电子琴设计\简易电子琴.uvproj
相关资源
- DAS1302蜂鸣 独立按键 闹钟设定 IIC存储
- 我做的电子琴,21个音,一般歌曲基本
- midi电子琴简单设计(附源代码).ra
- Verilog按键代码
- 课程设计蔬菜大棚自动控制系统,包
- 单片机电子琴 数码管显示
- FPGA按键消抖
- CMD批处理模拟鼠标按键事件
- 用delphi实现的类似于按键精灵的脚本
- 串口条码枪转模拟按键
- 基于51单片机的智能十字路口交通灯系
- 基于C51的电子琴设计
- 畅学系列STM32开发板实验箱8位独立按
- 单按键开关控制电路
- 用WinIo模拟按键
- 易语言用WinIO模拟按键源码
- 易语言winio模拟键盘源码易语言测试源
- 解决STM32每次程序都需要断电
- 嵌入式按键设计大全含电路原理图
- 实现按键控制设定温度值,控制继电
- ORG 2020 beta2汉化版
- 流水灯设计.zip
- 赛普拉斯 电容触摸按键 PSoC4_CapSense
- 用51单片机做的简易电子琴
- 按键控制系统音量
- 按键LCD多级菜单
- vhdl语言电子琴设计
- quartus原理图设计方法设计的电子琴程
- 基于51单片机设计的简易电子琴.
- 飞车刷级源码按键精灵源码
评论
共有 条评论