历史上的今天
今天是:2025年01月19日(星期日)
2020年01月19日 | 单片机声控音乐彩灯Proteus仿真程序
2020-01-19 来源:51hei
包含C语言的代码,AD的原理图及PCB板图,proteus的仿真图,由声音控制的音乐彩灯。
仿真原理图如下
Altium Designer画的原理图和PCB图如下:
单片机源程序如下:
#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;
史海拾趣
|
中国移动于2008年4月1日在中国八大城市推出第一批TD,用于服务的商业试运营。这批手机全部基于ARMS™ 处理器,价格在人民币2000到3800之间 。这批基于ARM[]®技术的手机是六家中国本土及国际厂商制造,包括海信、中兴、三星和LG 。在试运营 ...… 查看全部问答> |
|
视频监控与报警新技术共缆一线通 在实际生活中,大部分监控和报警的联动是被动式的,如何更加紧密地将其结合在一起,一直是备受关注的课题。而共缆一线通技术在不需增加电缆数量的情况下将监控系统可以实现 ...… 查看全部问答> |
|
二、继电器相关知识(8) 1. 何为复式整流? 2. 简述不间断电源(UPS)的组成及工作原理。 3. 变压器过负荷保护起何作用? 4. 变压器运行中会出现哪些故障? 5. 什么是电力系统的振荡?引起振荡的原因一般有哪些? 6. 电力系统中的消弧线圈按 ...… 查看全部问答> |
|
不跑操作系统,能否调用socket.h和socket.c文件? LM3S 9b92自带的LWIP例程是在无操作系统下完成的 还是在有操作系统下完成的? 不跑操作系统 能否调用socket.h和socket.c文件呢… 查看全部问答> |
|
CYPRESS系列IC/MCU/单片机/芯片解密/破解 未尽型号,请来电咨询!张工:13760303660 CY2071A CY2077FZ CY2291F CY2292F CY229 ...… 查看全部问答> |
|
我的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 ...… 查看全部问答> |
|
如题,我使用ADC3来采样PB1(AIN9)但是结果总是为0,ADC3采用其他通道没有问题(试过0,1,10,11,12,13),采用A ...… 查看全部问答> |
|
首先声明下:自己也是个新手,对那些刚接触的玩家可能有点帮助.老鸟对有错误的地方请及时指正. TL494是功能非常完善的PWM驱动电路,对于一般的应用已经绰绰有余了.我现在简单的说说两种应用电路.新手可以对照电路自己选简单应用或带保护功能的应用方案 ...… 查看全部问答> |
|
应用MINI51做电机控制,M0内核24M主频速度快,单指令周期, I/O口布局兼容传统8051 6路PWM,其中2路硬件PWM,稳定性更高,MINI51的PWM可做无感弦波控制(真正的弦波),微调占空比, 设计产品噪声极低 8路10位高精度AD,自带1个串口,SPI接口,I2C ...… 查看全部问答> |




