单片机声控音乐彩灯Proteus仿真程序

2020-01-19来源: 51hei关键字:单片机  声控音乐彩灯  Proteus仿真

包含C语言的代码,AD的原理图及PCB板图,proteus的仿真图,由声音控制的音乐彩灯。
仿真原理图如下
51hei.png 

Altium Designer画的原理图和PCB图如下:
51hei.png 

单片机源程序如下:

#include

#include       //头文件

#define uint unsigned int

#define uchar unsigned char

#define delay4us() {_nop_();_nop_();_nop_();_nop_();}   //延时4us

#define uint unsigned int 

#define uchar unsigned char

sbit beep = P1^5;

uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,

212,212,106,126,159,169,190,119,119,126,159,142,159,0};


uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,

9,3,12,12,12,12,12,9,3,12,12,12,24,0};

unsigned char dat = 0x00; 

unsigned char count = 0x00;

unsigned char CH; 

unsigned char dis[] = {0x00, 0x00, 0x00};

unsigned int displaynum;

sbit RS = P2^0;                //数据|命令选择指示端

sbit RW = P2^1;                //读/写选择端

sbit E= P2^2;                  //使能

sbit led1= P2^3;                 //led1灯使能

sbit led2= P2^4;         //led2灯使能


sbit CS = P3^5;                  //片选

sbit Clk = P3^4;          //ad时钟输入

sbit DATI = P3^3;          //数据信号输入/输出

sbit DATO = P3^3;



void Disp_temper_range(uchar add,uint T);

void Display();


uchar code table1[]="GZ:";

uchar code table2[]="SY:";

uchar code table5[]="SPEED:";

uchar code table3[]={0x07,0x05,0x07,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x06,0x09,0x10,0x00,0x00,

0x00,0x00,0x00,0x00,0x01,0x12,0x0C,0x00,};

uchar code table4[]={14,12,7,5,0};

uchar code table6[]="1";

uchar code table7[]="2";

uchar code table8[]="3";

uchar code table9[]="0";

uchar d,a,temp,*p,aa,s,m,i=0;

unsigned int num=0;

unsigned char gz;

unsigned char sy;

unsigned char openflag=0;

void DelayMS(uint x)

{

        uchar t;

        while(x--) for(t=0;t<120;t++);

}


void PlayMusic()

{

        uint i=0,j,k;

        while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)

        { //播放各个音符,SONG_LONG 为拍子长度

            for(j=0;j

        {

            beep=~beep;

                led1=~led1;

                led2=~led1;

        //SONG_TONE 延时表决定了每个音符的频率

            for(k=0;k

        }

            DelayMS(10);

            i++;

}

}

void delay(uint z)                   //延时函数

{

        uint i,j;

        for(i=z;i>0;i--)

        for(j=110;j>0;j--);

}

void delay_(uint i)

{

        while(i--);

}

bit LCD_Busy_Check()   //LCD判忙

{

        bit result;

        RS = 0;

        RW = 1;

        

        E= 1;

        delay4us();

        result = (bit)(P0&0x80);                        //        1000 0000

        E= 0;

        return result;

}


void LCD_Write_Command(uchar cmd)   //LCD写命令

{

        while(LCD_Busy_Check());

        RS = 0;

        RW = 0;

        E = 0;

        _nop_();

        _nop_();

        P0 = cmd;

        delay4us();

        E = 1;

        delay4us();

        E = 0;

}


void LCD_Write_Data(uchar dat)                        //LCD写数据

{

        while(LCD_Busy_Check( ));

        RS = 1;

        RW = 0;

        E = 0;

        P0 = dat;

        delay4us();

        

        E = 1;

        delay4us();

        E = 0;

}


void set_XY(uchar X,uchar Y)   //????????

{

        if(Y==0)

        X+=0x80;

        else 

        X|=0xC0;

        LCD_Write_Command(X);

}



void DispOneChar(uchar X,uchar Y,uchar Data)         //??????

{

        set_XY(X,Y);

        LCD_Write_Data(Data);

}


void LCD_Initialise()             //LCD初始化

{

        LCD_Write_Command(0x38); DelayMS(1);

        LCD_Write_Command(0x38); DelayMS(1);

        LCD_Write_Command(0x38); DelayMS(1);

        LCD_Write_Command(0x38); DelayMS(1);

        LCD_Write_Command(0x0c); DelayMS(1);

        LCD_Write_Command(0x06); 

        LCD_Write_Command(0x01);

        delay4us();

        delay4us();delay4us();delay4us();

}


void Display_fre(uchar f)           //        

{

        uchar a1,a2,a3;

        a1=f/100;

        a2=f/10%10;

        a3=f%10;

        DispOneChar(4,0,0x30+a1);

        DispOneChar(5,0,0x30+a2);

        DispOneChar(6,0,0x30+a3);

}


void Display_fre1(uchar s)        

{

        uchar b1,b2,b3;

        b1=s/100;

        b2=s/10%10;

        b3=s%10;

        

        DispOneChar(13,0,0x30+b1);

        DispOneChar(14,0,0x30+b2);

        DispOneChar(15,0,0x30+b3);

}


void Display_fre2(uint ss)        

{

        uint c1,c2,c3,c4;

        c1=ss/1000;

        c2=ss/100%10;

        c3=ss/10%10;

        c4=ss%10;

        

        DispOneChar(7,1,0x30+c1);

        DispOneChar(8,1,0x30+c2);

        DispOneChar(9,1,0x30+c3);

        DispOneChar(10,1,0x30+c4);

}



void DispChars(uchar X,uchar Y,uchar *p,uchar count) //?????

{

        uchar i;

        for(i=0;i

        {

                set_XY(X,Y);

                LCD_Write_Data(*p);

                X++;

                p++;

        }

}


/*****CH=0X00,对CH1进行转换,TGS260******/

unsigned char adc0832(unsigned char CH) //模数转化

{

        unsigned char i,test,adval;

        adval = 0x00;

        test = 0x00;

        Clk = 0;

        DATI = 1;

        _nop_();

        CS = 0;

        

        _nop_();

        Clk = 1;

        _nop_();

        

        if ( CH == 0x00 )           //CH=0X00,对CH1进行转换,TGS260

        {

                Clk = 0;

                DATI = 1; //

                _nop_();

                Clk = 1;

                _nop_();

                Clk = 0;

                DATI = 1; 

                _nop_();

                Clk = 1;

                _nop_();

        } 

        else

        {

                Clk = 0;

                DATI = 1;

                _nop_();

                Clk = 1;

                _nop_();

                Clk = 0;

                DATI = 0;

                _nop_();

                Clk = 1;

                _nop_();

        }

        

        Clk = 0;

        DATI = 1;

        

        for( i = 0;i < 8;i++ ) //

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

上一篇:单片机+MAX1898的智能手机充电器PCB电路Proteus仿真+源程序
下一篇:STC单片机不重新加电烧写方法

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

推荐阅读

基于52单片机控制编码器显示程序
#include "reg52.h"    #define uchar unsigned char#define uint unsigned int#define LCD1602_DATAPINS P0sbit LCD1602_E=P2^7;sbit LCD1602_RW=P2^5;sbit LCD1602_RS=P2^6;sbit DIR=P1^0;sbit STEP=P1^1;sbit K1=P3^1;sbit K2=P3^0;typedef unsigned int u16;   //对数据类型进行声明定义typedef unsigned char
发表于 2020-02-08
单片机步进电机转速控制程序(速度LED显示)
单片机源程序如下://数码管位 高位-----低位//四个按键控制步进电机:正转,反转,加1,减1//上电时电机启动,数码管上显示速度最小档1,加减档位均能通过数码管显示出来,电机采用单双八拍方式//电机转速一共10档,通过按键调节转速 //电机正转时最高位数码管显示0,反转时显示1  #include<reg51.h>#define uchar unsigned char#define uint unsigned int#define led P0//数码管段选#define haha P2sbit s1 = P1^0;sbit s2 = P1^1;sbit s3 = P3^0;sbit
发表于 2020-02-08
单片机步进电机转速控制程序(速度LED显示)
STC单片机+DM134实现LED多段控制
 单片机源程序如下://============================================================================//================翼芯科技 LED流星灯8段16段==软件生成生成数据=================//============================================================================   //  此源码版权属 翼芯科技 全权享有,如欲引用,敬请署名并告知//         
发表于 2020-02-08
STC单片机+DM134实现LED多段控制
基于51单片机的数字电容测量仪设计
本设计详细介绍了一种基于单片机的数字式电容测量仪设计方案及实现方法。设计的主要方法是采用555芯片构成单稳态触发器,将电容容量转换为脉冲宽度。通过单片机的计时器测量脉宽, 根据已知的R值,通过单片机的运算功能,计算出电容容量,最后,再通过单片机的普通I/O口控制液晶屏显示出电容容量的计算结果。系统的测量范围为10pF~ 500uF, 具有多个量程,可根据用户需要由用户选择,与用户的交互是通过键盘实现,不同量程的实现是通过单片机的I/O口控制继电器的吸合与断开来选择不同的R值,从而实现不同的量程。同时,本设计注重设计方法及流程,首先根据原理设计电路,再通过protues仿真,利用keil编程,进而借助altium designer
发表于 2020-02-08
基于51单片机的数字电容测量仪设计
基于51单片机的pwm直流电机调速
仿真原理图如下单片机源程序如下:#include <reg52.h>/********************************************** 定时器初值*********************************************/#define T0HIGH        0xec#define T0LOWW        0x8a
发表于 2020-02-08
基于51单片机的pwm直流电机调速
手把手教你单片机串口通信-基础篇
1的个数之和应为偶数。接收字符时,对1的个数进行校验,若字符不一致,则说明传输数据过程中出现错误。代码和校验发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据时,同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,一致则无差。循环冗余校验通过某种数学预算实现有效信息与校验位之间的循环校验,常用语对磁盘信息的传输、存储区的完整性校验。串口的基本结构SBUF:51单片机中的特殊寄存器,串行数据缓冲器(一个接收一个发送),两个其实是共用的一个地址99H,但是两个在物理上面是分开的。当发送使用时,就采用SBUF=XXX;  
发表于 2020-02-08
手把手教你单片机串口通信-基础篇
小广播
何立民专栏 单片机及嵌入式宝典

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

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