资源简介
输入为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
相关资源
- MiniGUI 按键切换图片,背景图片,控件
- ARM裸机实验之用按键控制LED灯
- 基于STM32实现的简易电子琴
- 单片机电子琴 附有流程图
- AD9834按键控制输出正弦波、三角波、
- 增加去抖动的新型的按键扫描程序的
- 自动按键器v1.6 绿色免安装版AutoPres
- 安卓版按键精灵基本功能版
- 用Verilog实现的电子琴
- [QT]获取鼠标坐标以及按键响应
- 制作电子琴用到的ps2键盘控制,主要
- 简易电子琴的设计微机原理课程设计
- 汇编语言编写的电子琴程序原版
- 4*4按键原理图以及pcb图
- 智能大棚单片机源码
- 一个用proteus仿真的数码管显示键盘按
- 单片机电子琴程序
- s3c2440裸机按键控制小灯
- 8259的8LED显示按键中断
- 四按键控制四个LED亮灭的源程序和P
- 合泰触摸按键最新库文件参考
- 按键控制 verilog程序 钢琴演奏 fpga
- PS2键盘控制模型电子琴电路设计
- JM08S八按键电容触摸感应芯片.PDF
- 触摸按键的原理介绍
- stm8s103触摸按键
- STM32使用GPIO_F的0-7口的4*4矩阵按键
- ok6410按键驱动
- 吟飞双排键音色数据转换软件
- 用protues仿真的按键式波形发生器
评论
共有 条评论