激光竖琴

更新时间:2023-03-08 08:12:38 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

激光竖琴

激光竖琴是有单片机(stc125a60s2)控制七个激光头打出的激光充琴弦来弹出乐曲,激光头的对面是几个光敏电阻用来采集信号单片机采集到信号后再通过编程来控制对应的IO口采集到的信号发出不同的声音来达到发出不同音调的目的,此外还要有一个音频放大电路(lm2822)来对发出的音调来进行放大处理为了好看还加了流水灯等功能以下我们所用到的程序

#include

sbit SPEAKER = P1^0;//扬声器,低使能 sbit LED = P3^0;//LED正极,强推 sbit LED2 = P3^1;//LED负极 sbit KEY11 = P2^0; sbit KEY12 = P2^1; sbit KEY13 = P2^2; sbit KEY14 = P2^3; sbit KEY15 = P2^4; sbit KEY16 = P2^5; sbit KEY17 = P2^6; sbit KEY18 = P2^7;

/*********************************************************************************************/ unsigned char MUSIC; unsigned char STH0,STL0;

unsigned int code tab[]={ //音阶表

63628,63835,64021,64103,64260,64400,64524, //低音1-7 64580,64684,64777,64820,64898,64968,65030, //中音1-7 65058,65110,65157,65178,65217,65252,65283 //高音1-7 };

void INIT(void)//初始化程序 { TMOD=0x11; ET0=1; ET1=1; EA=1; SPEAKER = 0; }

void main(void) {

INIT(); //初始? while(1) {

if(KEY11 == 0){MUSIC = 8;} if(KEY12 == 0){MUSIC = 9;}

if(KEY13 == 0){MUSIC = 10;} if(KEY14 == 0){MUSIC = 11;} if(KEY15 == 0){MUSIC = 12;} if(KEY16 == 0){MUSIC = 13;} if(KEY17 == 0){MUSIC = 14;} if(MUSIC != 0xff) //如果有音阶数值(非0XFF时) { STH0=tab[MUSIC]/256; //将音阶的频率值装入定时器T0 STL0=tab[MUSIC]%6; TR0=1; //启动定时器 MUSIC = 0xff; //清除寄存器 } else //否则 { SPEAKER = 1; //关扬声器 LED = 1; TR0=0; //关定时器 } } }

/***************************************************************************************/

void t0(void) interrupt 1 using 0{//定时器0产生音频 TH0=STH0; TL0=STL0;

//SPEAKER=~SPEAKER; //取反频率产生音调 LED = SPEAKER; //LED同频闪烁 }

本文来源:https://www.bwwdw.com/article/wao3.html

Top