八弦激光竖琴电路图与单片机源码

2019-11-07来源: 51hei关键字:八弦激光竖琴  单片机  激光头

==============所需元件==========================
激光头 * 8
5mm光敏电阻 * 8
开关 * 1
轻触按键 * 1
usb座或DC座 * 1
1k电阻 *2
10k电阻 * 10
3mmLED * 1
无源蜂鸣器 * 1
s8550三极管 * 1
排针(用于下载) * 1
STC89C52单片机 * 1
DIP40的单片机座 * 1
12M晶振 * 1
30pf瓷片电容 * 2
10uf电解电容 * 1

===============用到的工具=======================
电烙铁、焊锡丝、助焊剂可选、剪钳、镊子、热熔胶枪与热熔胶

================================================
===============激光竖琴使用说明=================
================================================

8个激光束 —— 对应中音的1、2、3、4、5、6、7,还有高音1


注意事项  —— 手弹奏时,请选取光线较弱的室内。当弹奏不灵敏时,请转到更暗的环境。

电路原理图如下:
0.png

单片机源程序如下:

//*********            51简易电子琴程序              *****************


#include

#define uint unsigned int

#define uchar unsigned char


sbit fmq=P0^0;//定义P0.0口为蜂鸣器信号输出

uint z;

uint code tone[8]={0xfc44,0xfcac,0xfd09,0xfd34,0xfd82,0xfdc8,0xfe06,0xfe22};//对应每个单调的计数初值

uchar code keymode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//按键值,对应io:0,1,2,3,4,5,6,7


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

*********按键扫描函数***************/


void anjian()//用整个P2口作为音调的输入按键(独立按键方式)

{

        

        P2=0xff;//读数据先置1

        if(P2==~keymode[0]) //1

        {

                z=tone[0];

                P1=keymode[0];

        }

/**/

        if(P2==~keymode[1]) //2

        {

                z=tone[1];

                P1=keymode[1];

        }

/**/

         if(P2==~keymode[2]) //3

        {

                z=tone[2];

                P1=keymode[2];

        }

/**/

        if(P2==~keymode[3]) //4

        {

                z=tone[3];

                P1=keymode[3];

        }

/**/

        if(P2==~keymode[4]) //5

        {

                z=tone[4];

                P1=keymode[4];

        }

/**/

         if(P2==~keymode[5]) //6

        {

                z=tone[5];

                P1=keymode[5];

        }

/***/

        if(P2==~keymode[6]) //7

        {

                z=tone[6];

                P1=keymode[6];

        }

/* */

        if(P2==~keymode[7]) //1.

        {

                z=tone[7];

                P1=keymode[7];

        }



}

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

void zdkg()

{

        if(P2==0xff)

        {

                P1=0xff;

                TR1=0;//如果没有按键按下,就关闭定时器中断

                fmq=1;//同时也关闭蜂鸣器 

        }

        else          //否则就进入中断

        {

                TR1=1;

        }

}

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

****************主函数****************************

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

void main()

{

        EA=1;//开总中断

        ET1=1;//定时器T1中断允许

        TMOD=0x10;//使用定时器T1的模式1

        TH1=(65536-500)/256;//定时器T1的高8位重新赋初值

        TL1=(65536-500)%256;//定时器T1的低8位重新赋初值

        P1=0xff;//先关所有LED灯


        while(1)

        {

        

          anjian();//按键扫描函数

          zdkg();

                  

        }


}

/*定时器T1的中断服务程序*/

void Time1(void) interrupt 3 using 1//

{        fmq=~fmq; //每进入一次中断就取反一次,快速的进入退出中断,就会听到蜂鸣器发出的音调

        TH1=z/256;//定时器T1的高8位重新赋初值

        TL1=z%256;//定时器T1的低8位重新赋初值

}



关键字:八弦激光竖琴  单片机  激光头 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479231.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于DS1302的数字时钟设计 使用595和数码管显示
下一篇:单片机波形发生器源码

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

AVR单片机测温基于DS18B20
#include<iom16v.h>#include<macros.h>#include<delay.h>#define uint unsigned int#define uchar unsigned char#define dula_set PORTA |=BIT(3) //数码管段选#define dula_clr PORTA &=~BIT(3)#define wale_set PORTA |=BIT(4)//数码管位选#define wale_clr PORTA &=~BIT(4) #define DQ_IN DDRA&=~BIT(5)#define DQ_
发表于 2019-11-20
AVR单片机控制继电器
#include "macros.h"#define uchar unsigned char#define uint  unsigned intvoid delay_ms(uchar i){uchar a,b;for(a=1;a<i;a++)   for(b=1;b<141;b++)   {;}}void main(void){DDRA=0X80;PORTA=0X80;DDRB=0XFF;PORTB=0XFF;DDRC=0X01;PORTC=0X01;DDRD=0X00;PORTD=0XFF;while(1)  {&nbs
发表于 2019-11-20
AVR单片机控制继电器
PIC16F877A单片机的PWM输出程序
模块为PWM 工作方式,且其工作循环PR2=0XFF;       //设置PWM 的工作周期TRISC=0XFB;      //设置CCP1 引脚为输出方式while(1){  k++;  CCPR1L=k;  delay();  if(k>253)k=1;} }////////////////////////////////////////////////////////////////////////////////////////////下面的是AVR单片机ATMEGA16的PWM信号输出程序GCC编译
发表于 2019-11-20
LCD1602在PIC单片机中的使用程序
#include<pic.h>__CONFIG(0x1832);        //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡#define rs RA1#define rw RA2#define e  RA3const char web[ ]={' ','W','W','W','.','P','I','C','1','6','.','C',&#
发表于 2019-11-20
LCD1602控制要领(pic单片机)
PIC板使用LCD时需要将J401摘除LCD 4脚(RS数据/命令选择端H/L)-----RB2LCD 5脚(R/W读写选择端H/L)---------RB1LCD 6脚(E使能读H,写L->H)----------RB0控制要领:如无检忙则可在每次操作之前作适当延时即可.写命令:rs = 0;rw = 0;ep = 0->1->0;(用于初始化和在控制显示的位置)写数据:rs = 1;rw = 0;ep = 0->1->0;(用于显示内容)初始化:Write_COM(0x38);//双列16X2Write_COM(0x0C);//开显示;无不显光标;光标不闪烁Write_COM(0x06);//写入数
发表于 2019-11-20
PIC单片机在MPLAB-IDE中使用HitechC编译器
PIC单片机的C语言使用(一)在MPLAB-IDE中使用HitechC编译器 一、装入编译器:1、启动MPLAB-IDE,如下图所示选择Project-》Install Language Tool2、在弹出的安装语言工具对话框里“Language Suite”选项现在显示的是Microchip,点击后面的箭头来选择语言。 我使用的工具是HI-TECH PICCME,所以选择为“HI-TECH PICC”。3、接下来在“Tool Name”里选择编译器组件的调用路径,这里有“PICC Compiler”(C编译器)、“PICC Assembler”(汇编器)和“PICC Linker”(链接器)3项都需要设置
发表于 2019-11-20
PIC单片机在MPLAB-IDE中使用HitechC编译器
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved