资源简介
利用C51单片机的简易电子琴
音乐由不同的音阶组成,而不同的音阶又是由不同的频率发出的,因此产生不同的频率,就可以发出不同的音阶。在本次课程设计中,最主要的工作是程序编写,通过按键的键值,将其转化为不同频率的方波送到对应的发声口,使喇叭发声,本次设计采用的电脑音响。
代码片段和文件信息
#include
#define uint unsigned int
#define uchar unsigned char
#define output P1
#define input P1
enum KEY{key0key1key2key3key4key5key6key7key8key9key10key11key12key13key14key15};
uchar code table[]={
0x3f0x060x5b0x4f0x660x6d0x7d0x07
0x7f0x6f0x770x7c0x390x5e0x790x710x00};
unsigned int code Freqtab[] = {
64021641036426064400
64524645806468464777
64820648986496865030
65058651106515765178};
uint FreqTemp;
sbit SPEAK = P3^7;
void delay1ms(uint n)
{
uint abc;
for(c=n;c>0;c--)
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}
uint key_input(void)
{
uchar temp1temp2;
uchar num = 16;
output = 0x0f;
temp1 = input;
if(0x0f != temp1)
{
delay1ms(5);
temp1 = input;
if(0x0f != temp1)
{
temp1 = temp1 & 0x0f;
output = 0xf0;
delay1ms(1);
temp2 = input;
temp2 = temp2 & 0xf0;
temp1 = temp1 | temp2;
}
}
switch(temp1)
{
case 0xee:num=0;break;
case 0xde:num=1;break;
case 0xbe:num=2;break;
case 0x7e:num=3;break;
case 0xed:num=4;break;
case 0xdd:num=5;break;
case 0xbd:num=6;break;
case 0x7d:num=7;break;
case 0xeb:num=8;break;
case 0xdb:num=9;break;
case 0xbb:num=10;break;
case 0x7b:num=11;break;
case 0xe7:num=12;break;
case 0xd7:num=13;break;
case 0xb7:num=14;break;
case 0x77:num=15;break;
default:break;
}
return num;
}
void T0_INT(void) interrupt 1
{
TL0 = FreqTemp;
TH0 = FreqTemp >> 8;
SPEAK = ~SPEAK;
}
int main()
{
TMOD = 0X01;
EA = 1;
ET0 = 1;
TR0 = 0;
while(1)
{
uint numtemp;
num = key_input();
temp = num;
P0 = table[num];
if(16 != num)
{
FreqTemp = Freqtab[num];
TR0 = 1;
while(0xf0 != output);
TR0 = 0;
SPEAK = 1;
}
}
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-12-22 14:45 电子琴\
文件 9680 2018-12-22 12:03 电子琴\Backup Of New Project.pdsbak
目录 0 2018-12-22 09:04 电子琴\Listings\
文件 14156 2018-12-22 09:04 电子琴\Listings\STARTUP.lst
文件 4721 2018-12-22 09:04 电子琴\Listings\electronic organ.lst
文件 9067 2018-12-22 09:04 电子琴\Listings\electronic organ.m51
文件 9677 2018-12-22 12:03 电子琴\New Project.pdsprj
文件 2198 2018-12-22 12:03 电子琴\New Project.pdsprj.LAPTOP-B59USNJL.李博文.workspace
目录 0 2018-12-22 09:04 电子琴\ob
文件 828 2018-12-22 09:04 电子琴\ob
文件 6490 2018-12-22 09:04 电子琴\ob
文件 1121 2018-12-22 09:04 电子琴\ob
文件 1340 2018-12-22 09:04 电子琴\ob
文件 135 2018-12-22 09:04 电子琴\ob
文件 6660 2018-12-22 09:04 电子琴\ob
文件 6376 2016-03-14 08:58 电子琴\STARTUP.A51
文件 2140 2018-12-22 09:04 电子琴\electronic organ.c
文件 85192 2018-12-22 14:45 电子琴\electronic organ.uvgui.李博文
文件 5478 2018-12-22 09:12 电子琴\electronic organ.uvopt
文件 14064 2018-12-22 09:12 电子琴\electronic organ.uvproj
- 上一篇:Hill准则渐进损伤准则-显示算法
- 下一篇:OpenCV 3d结构光扫描
相关资源
- 74ls90芯片设计24H时钟电路图
- 0·5V可调直流电源Proteus仿真
- 篮球比赛计分器.rar
- C51单片机点阵贪吃蛇代码16*16点阵和
- Proteus8.6+8086+8255+DAC0832模拟波形发生器
- 声控LED智能灯
- 用proteus仿真的电子时钟
- c51单片机数码管显示温度
- 51单片机 Proteus 心形的滚动显示含代码
- 基于STC89C51占空比可调的pwm方波
- 单片机代码LED灯,蜂鸣器,按键,流
- 门禁系统设计
- 基于89C51单片机的LCD音乐闹钟(详细注
- Proteus8.6官方正版软件.txt
- 交通灯程序设计1
- proteus与keil连接调试不可或缺的DLL文件
- C51双机模拟IIC通信源代码.rar
- 基于51单片机和PROTEUS的非常形象的交
- UCOS 删除任务实验proteus仿真
- Proteus简易电子琴
- Proteus仿真AD转换单片机+ADC0809
- 模拟电子琴设计8086作为处理器,以
- AVR单片机ATmega16L驱动一个数码管Prot
- 基于89C51的等精度频率计LCD1602显示1
- 以51单片机为核心的DS18B20的数码管显
- 数字电压表proteus仿真+程序资料
- Keil中的C51FPS.LIB文件
- C51+1602液晶+矩阵键盘+三相步进电机
- 交通灯控制系统设计基于单片机的设
- 基于12864的简易示波器C51编程
评论
共有 条评论