历史上的今天
返回首页

历史上的今天

今天是:2025年01月19日(星期日)

正在发生

2020年01月19日 | 单片机声控音乐彩灯Proteus仿真程序

2020-01-19 来源:51hei

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

Altium Designer画的原理图和PCB图如下:
51hei.png?imageView2/2/w/550 

单片机源程序如下:

#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++ ) //

        {

                _nop_();

                adval <<= 1;

                Clk = 1;

                _nop_();

                Clk = 0;

推荐阅读

史海拾趣

东晶(ECEC)公司的发展小趣事

近年来,随着电子信息技术的快速发展和智能化趋势的加剧,东晶电子也面临着新的机遇和挑战。为了适应市场变化和满足客户需求,公司开始实施战略转型和升级。公司加大了对新型电子元器件的研发力度,推动产品向微型化、功能化、高精度方向发展。同时,公司还积极开拓新领域和新市场,拓展业务范围和市场份额。这些举措为公司未来的发展奠定了坚实的基础。

请注意,这些故事是基于已知信息的概括性描述,并非具体的历史事件。在实际情况中,东晶电子的发展历程可能更加复杂和多样化。

ABOV(现代单片机)公司的发展小趣事

随着产品质量的不断提升和市场份额的逐步扩大,东晶电子开始将目光投向国际市场。公司积极参与国际展会,与全球知名电子企业建立合作关系,产品出口到欧洲、北美、东南亚等多个国家和地区。同时,东晶电子还与国际知名厂商进行技术交流和合作研发,不断提升自身技术水平,以适应全球市场的竞争需求。

Chips And Technologies Inc公司的发展小趣事

Chips And Technologies Inc的创业之路始于1984年,由Gordon A. Campbell和Dado Banatao在加利福尼亚州的米尔皮塔斯共同创立。作为一家早期的无晶圆厂半导体公司,C&T凭借对技术的深刻理解和市场的前瞻性,成功推出了首款四芯片EGA芯片组,这款产品能够处理增强型图形适配器上19个IBM专有芯片的功能,为当时的个人电脑制造商提供了强大的支持。

骏晔科技(DreamLNK)公司的发展小趣事

骏晔科技非常重视知识产权的积累与保护。公司拥有一支专业的研发团队,致力于新产品的研发和技术创新。同时,公司还积极申请专利和软件著作权,保护自身的技术成果。截至目前,骏晔科技已经拥有8个专利信息和12个软件著作权,这些知识产权的拥有,为公司的发展提供了强有力的支撑。

ATP [ATP Electronics]公司的发展小趣事

随着全球环保意识的日益增强,ATP积极响应环保号召,致力于绿色产品的研发和生产。公司所有产品均符合欧洲RoHS无铅绿色标准和中国无铅环保标准,体现了ATP对环保事业的坚定承诺。同时,ATP还通过优化生产工艺和采用环保材料,降低了产品对环境的影响,为公司的可持续发展注入了新的动力。

长江连接器(CJT)公司的发展小趣事

为了进一步拓展市场和提升竞争力,长江连接器开始实施全球化战略。公司积极在海外设立生产基地和研发中心,加强与国际知名企业的合作和交流。通过引进国际先进的生产技术和管理经验,长江连接器不断提升自身的生产能力和管理水平。同时,公司还积极参与国际竞争和合作,与全球各地的客户建立了长期稳定的合作关系。

问答坊 | AI 解惑

中国第一批3G商业试用手机全部基于ARM处理器

中国移动于2008年4月1日在中国八大城市推出第一批TD,用于服务的商业试运营。这批手机全部基于ARMS™ 处理器,价格在人民币2000到3800之间 。这批基于ARM[]®技术的手机是六家中国本土及国际厂商制造,包括海信、中兴、三星和LG 。在试运营 ...…

查看全部问答>

视频监控与报警新技术共缆一线通

视频监控与报警新技术共缆一线通         在实际生活中,大部分监控和报警的联动是被动式的,如何更加紧密地将其结合在一起,一直是备受关注的课题。而共缆一线通技术在不需增加电缆数量的情况下将监控系统可以实现 ...…

查看全部问答>

继电器及二次回路知识(5)

二、继电器相关知识(8) 1. 何为复式整流? 2. 简述不间断电源(UPS)的组成及工作原理。 3. 变压器过负荷保护起何作用? 4. 变压器运行中会出现哪些故障? 5. 什么是电力系统的振荡?引起振荡的原因一般有哪些? 6. 电力系统中的消弧线圈按 ...…

查看全部问答>

不跑操作系统,能否调用socket.h和socket.c文件?

LM3S 9b92自带的LWIP例程是在无操作系统下完成的 还是在有操作系统下完成的? 不跑操作系统 能否调用socket.h和socket.c文件呢…

查看全部问答>

CYPRESS系列IC芯片解密MCU单片机破解

CYPRESS系列IC/MCU/单片机/芯片解密/破解 未尽型号,请来电咨询!张工:13760303660 CY2071A         CY2077FZ         CY2291F         CY2292F         CY229 ...…

查看全部问答>

嵌入系统有BIOS吗?

嵌入系统有BIOS吗?…

查看全部问答>

请大家看看我的FIR滤波问题出在哪边?

我的FIR滤波的代码 #define M 16 /*number of coefficients*/ #define N 16 /*number of output samples*/ COEFS fir_coefs;/*coefficients structure*/ int a[N];/*filter output vector*/ int x0[N]; short x[M+N-1];/*filter input v ...…

查看全部问答>

STM32F103VET6ADC3AIN9问题求助

                                 如题,我使用ADC3来采样PB1(AIN9)但是结果总是为0,ADC3采用其他通道没有问题(试过0,1,10,11,12,13),采用A ...…

查看全部问答>

新手学习帖:TL494的应用

首先声明下:自己也是个新手,对那些刚接触的玩家可能有点帮助.老鸟对有错误的地方请及时指正. TL494是功能非常完善的PWM驱动电路,对于一般的应用已经绰绰有余了.我现在简单的说说两种应用电路.新手可以对照电路自己选简单应用或带保护功能的应用方案 ...…

查看全部问答>

新唐MINI51直流无刷电机

应用MINI51做电机控制,M0内核24M主频速度快,单指令周期, I/O口布局兼容传统8051 6路PWM,其中2路硬件PWM,稳定性更高,MINI51的PWM可做无感弦波控制(真正的弦波),微调占空比, 设计产品噪声极低 8路10位高精度AD,自带1个串口,SPI接口,I2C ...…

查看全部问答>