1、基于单片机的广州塔姓名:专业:学校:指导教师:11 目 录摘要11 绪论21.1 项目研究背景及意义22 总体设计方案及论证22.1 总体方案设计23 硬件实现及单元电路设计33.1 主控制模块33.2 电源设计43.3 模块设计43.3.1 LED驱动模块53.3.2 底座LED驱动6 3.3.3 音频电路的设计8 3.3.4 时钟电路的设计84 软件设计154.1 主程序155 总结176 参考文献17附 录18附件1:原理图18附件2:元件清单29附件3:实物图3021摘要STC12C5A60S2是STC系列单片机里应用比较广泛的一款,在自动控制领域里享有很高的价值,以其易用性和多功能性
2、受到了广大电子设计爱好者的好评。本次设计主要是利用STC12C5A60S2单片机、该系统采用增强型8051单片机STC12C5A60S2为主控制器,利用单片机控制点阵的原理,控制广州塔展示效果,还通过单片机内置的ADC对音频信号进行采样,然后控制广州塔亮的层数达到根据音乐跳舞的效果。该方案具有电路结构简洁,开发、生产成本低的优点。关键词:点阵 STC12C5A60S2 广州塔 1 绪论1.1 项目研究背景及意义 广州塔其实又称广州新电视塔,昵称小蛮腰。它是广州最高建筑,整个塔身的设计非常有特点,特别是在夜晚的灯光装饰下,更是显得美轮美奂。现已俨然成为广州的地标。如此美的建筑怎能不让人心动。我们
3、结合所学的单片机点阵显示技术,我们也能做出广州塔的美。我们采用STC12C5A60S2作为控制系统,显示部分采用的是16*16的点阵显示原理,通过对广州塔的制作,能更好的提升单片机对点阵显示原理的掌握。2 总体设计方案及论证2.1 总体方案设计 本设计包括硬件和软件设计两个部分。系统总体的设计方框图如图1所示。电源STC12C5A60S2主控制器模块按键控制音频输入16*16 LED显示图1 系统方框图 3 硬件实现及单元电路设计3.1 主控制模块主控制最小系统电路如图2所示。 图2 最小系统硬件电路总设计见图3。图3 总设计电路图3.2 电源设计电源部分的设计采用DC5V供电,使用了电解电容
4、进行滤波,电路供电更加的稳定。3.3模块设计 3.3.1 led驱动模块 LED驱动采用的是直接用单片机管脚驱动,因为stc12c5a60s2单片机的管脚电流达到20几毫安,足以驱动广州塔的LED,为了LED工作的稳定性,我们在电路中加入了限流电阻。3.3.2 底座4个LED底座4个LED使用的七彩LED,为了控制方便,4个LED直接到了电源,上电就能直接点亮,可以直观看出模块电源是否正常,使用七彩LED的原因是,其发出的LED光多姿多彩,给广州塔的绚丽增添多一份优美,电路如下图所示:图4 底座led驱动电路3.3.3 音频输入电路的设计音频电路的设计主要是采用了T型口的USB接口,因为该接口
5、包含了音频和电源的输入,又因为控制模板的单片机是自带了AD的,所以通过按键切换到音频模式下,我们可以看到广州随音乐在跳舞。3.3.4 时钟电路的设计XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为12MHZ,一个振荡周期为1/12us,故而一个机器周期为1us。如图13所示为时钟电路。图13 时钟电路图4 软件设计#include #define uch
6、ar unsigned char#define uint unsigned int#define LongToBin(n) (n21)&0x80)|(n18)&0x40)|(n15)&0x20)|(n12)&0x10)|(n9)&0x08)|(n6)&0x04)|(n3)&0x02)|(n)&0x01)#define BIN(n) LongToBin(0x#n#)sbit anjian=P45;sbit P0_0=P00;/层sbit P0_1=P01;sbit P0_2=P02;sbit P0_3=P03;sbit P0_4=P04;sbit P0_5=P05;sbit P0_6=P06;s
7、bit P0_7=P07;sbit P4_6=P46;sbit P1_1=P11;sbit P1_2=P12;sbit P1_3=P13;sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;sbit P3_0=P30;/竖sbit P3_1=P31;sbit P3_2=P32;sbit P3_3=P33;sbit P3_4=P34;sbit P3_5=P35;sbit P3_6=P36;sbit P3_7=P37;sbit P2_0=P20;sbit P2_1=P21;sbit P2_2=P22;sbit P2_3=P23;sbit
8、P2_4=P24;sbit P2_5=P25;sbit P2_6=P26;sbit P2_7=P27;sbit P4_4=P44;char moshi=1;char h=0,v=0;int t=0;char zy=0,sj=0,jz=0;bit ly_flag=0;/成功接收标志void delay_1ms(uint q)uint i,j;for(i=0;iq;i+)for(j=0;j110;j+); void key()if(anjian=0)delay_1ms(5);if(anjian=0)while(anjian=0);jz+;if(jz=2)jz=0;if(jz=0)moshi=1;T
9、R0=0;ET0=0;if(jz=1)moshi=0;ly_flag=1;TR0=1;ET0=1;void dh1()char i,j;P3_0=0;/J1P3_1=0;/J2P3_3=0;/J3P3_4=0;/J4P3_5=0;/J5P3_6=0;/J6P3_7=0;/J7P2_0=0;/J8P2_1=0;/J9P2_2=0;/J10P2_3=0;/J11P2_4=0;/J12P2_5=0;/J13P2_6=0;/J14P2_7=0;/J15P4_4=0;/J16P1_7=0;P1_6=0;P1_5=0;P1_4=0;P1_3=0;P1_2=0;P1_1=0;P4_6=0;P0=0X01;d
10、elay_1ms(10);for(j=0;j7;j+)P0=(P01)|0x01;delay_1ms(10);P4_6=1;delay_1ms(10);P1_1=1;delay_1ms(10);P1_2=1;delay_1ms(10);P1_3=1;delay_1ms(10);P1_4=1;delay_1ms(10);P1_5=1;delay_1ms(10);P1_6=1;delay_1ms(10);P1_7=1;for(i=0;i2;i+)P1_7=0;P1_6=0;P1_5=0;P1_4=0;P1_3=0;P1_2=0;P1_1=0;P4_6=0;P0=0X01;delay_1ms(100
11、0);for(j=0;j7;j+)P0=(P01)|0x01;delay_1ms(700);key();if(ly_flag=1)ly_flag=0;break;P4_6=1;delay_1ms(700);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_1=1;delay_1ms(700);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_2=1;delay_1ms(700);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_3=1;delay_1ms(700);ke
12、y();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_4=1;delay_1ms(700);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_5=1;delay_1ms(700);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_6=1;delay_1ms(700);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_7=1;delay_1ms(8000);key();if(ly_flag=1)moshi=0;ly_flag=0;brea
13、k;delay_1ms(8000);key();if(ly_flag=1)moshi=0;ly_flag=0;break;delay_1ms(8000);key();if(ly_flag=1)moshi=0;ly_flag=0;break;delay_1ms(8000);key();if(ly_flag=1)moshi=0;ly_flag=0;break;delay_1ms(8000);key();if(ly_flag=1)moshi=0;ly_flag=0;break;delay_1ms(8000);key();if(ly_flag=1)moshi=0;ly_flag=0;break;voi
14、d dh2()char j;P1_7=1;P1_6=1;P1_5=1;P1_4=1;P1_3=1;P1_2=1;P1_1=1;P4_6=1;P0_7=1;P0_6=1;P0_5=1;P0_4=1;P0_3=1;P0_2=1;P0_1=1;P0_0=1;for(j=0;j12;j+)P4_4=1;P2_0=1;P3_0=0;P2_1=0;delay_1ms(400);P3_0=1;P2_1=1;P3_1=0;P2_2=0;delay_1ms(400);P3_1=1;P2_2=1;P3_3=0;P2_3=0;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_
15、flag=0;break;P3_3=1;P2_3=1;P3_4=0;P2_4=0;delay_1ms(400);P3_4=1;P2_4=1;P3_5=0;P2_5=0;delay_1ms(400);P3_5=1;P2_5=1;P3_6=0;P2_6=0;delay_1ms(400);if(ly_flag=1)moshi=0;ly_flag=0;break;P3_6=1;P2_6=1;P3_7=0;P2_7=0;delay_1ms(400);P3_7=1;P2_7=1;P4_4=0;P2_0=0;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_flag=
16、0;break;void dh3()char i,j;int yanshi=400;P3_0=0;/J1P3_1=0;/J2P3_3=0;/J3P3_4=0;/J4P3_5=0;/J5P3_6=0;/J6P3_7=0;/J7P2_0=0;/J8P2_1=0;/J9P2_2=0;/J10P2_3=0;/J11P2_4=0;/J12P2_5=0;/J13P2_6=0;/J14P2_7=0;/J15P4_4=0;/J16 for(i=0;i3;i+)P1_7=0;P1_6=0;P1_5=0;P1_4=0;P1_3=0;P1_2=0;P1_1=0;P4_6=0;P0=0X01;delay_1ms(ya
17、nshi);for(j=0;j7;j+)P0=(P01);delay_1ms(yanshi);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P0_7=0;P4_6=1;delay_1ms(yanshi);P4_6=0;P1_1=1;delay_1ms(yanshi);P1_1=0;P1_2=1;delay_1ms(yanshi);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_2=0;P1_3=1;delay_1ms(yanshi);P1_3=0;P1_4=1;delay_1ms(yanshi);P1_4=0;
18、P1_5=1;delay_1ms(yanshi);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_5=0;P1_6=1;delay_1ms(yanshi);P1_6=0;P1_7=1;delay_1ms(yanshi);P1_6=1;P1_7=0;delay_1ms(yanshi);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_5=1;P1_6=0;delay_1ms(yanshi);P1_4=1;P1_5=0;delay_1ms(yanshi);P1_3=1;P1_4=0;delay_1ms(yansh
19、i);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_2=1;P1_3=0;delay_1ms(yanshi);P1_1=1;P1_2=0;delay_1ms(yanshi);P1_1=0;P0_7=1;delay_1ms(yanshi);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P0_6=1;P0_7=0;delay_1ms(yanshi);P0_5=1;P0_6=0;delay_1ms(yanshi);P0_4=1;P0_5=0;delay_1ms(yanshi);key();if(ly_flag=1)
20、moshi=0;ly_flag=0;break;P0_3=1;P0_4=0;delay_1ms(yanshi);P0_2=1;P0_3=0;delay_1ms(yanshi);P0_1=1;P0_2=0;delay_1ms(yanshi);key();if(ly_flag=1)moshi=0;ly_flag=0;break;void dh4()char j;P3_0=0;/J1P3_1=0;/J2P3_3=0;/J3P3_4=0;/J4P3_5=0;/J5P3_6=0;/J6P3_7=0;/J7P2_0=0;/J8P2_1=0;/J9P2_2=0;/J10P2_3=0;/J11P2_4=0;/
21、J12P2_5=0;/J13P2_6=0;/J14P2_7=0;/J15P4_4=0;/J16P1_7=0;P1_6=0;P1_5=0;P1_4=0;P1_3=0;P1_2=0;P1_1=0;P4_6=0;P0_7=0;P0_6=0;P0_5=0;P0_4=0;P0_3=0;P0_2=0;P0_1=0;P0_1=0;P0_0=0;for(j=0;j3;j+)P1_7=0;P0_0=0;P4_6=1;P0_7=1;delay_1ms(500);P4_6=0;P0_7=0;P1_1=1;P0_6=1;delay_1ms(500);key();if(ly_flag=1)moshi=0;ly_flag
22、=0;break;P1_2=1;P0_5=1;P1_1=0;P0_6=0;delay_1ms(500);P1_3=1;P0_4=1;P1_2=0;P0_5=0;delay_1ms(500);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_4=1;P0_3=1;P1_3=0;P0_4=0;delay_1ms(500);P1_5=1;P0_2=1;P1_4=0;P0_3=0;delay_1ms(500);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P1_6=1;P0_1=1;P1_5=0;P0_2=0;delay
23、_1ms(500);P1_7=1;P0_0=1;P1_6=0;P0_1=0;delay_1ms(500);key();if(ly_flag=1)moshi=0;ly_flag=0;break;void dh5()char i;P1_7=1;P1_6=1;P1_5=1;P1_4=1;P1_3=1;P1_2=1;P1_1=1;P4_6=1;P0_7=1;P0_6=1;P0_5=1;P0_4=1;P0_3=1;P0_2=1;P0_1=1;P0_1=1;P0_0=1;for(i=0;i3;i+)P3_0=0;delay_1ms(400);P3_1=0;delay_1ms(400);P3_3=0;del
24、ay_1ms(400);P3_4=0;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P3_5=0;delay_1ms(400);P3_6=0;delay_1ms(400);P3_7=0;delay_1ms(400);P2_0=0;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_flag=0;break;P2_1=0;delay_1ms(400);P2_2=0;delay_1ms(400);P2_3=0;delay_1ms(400);P2_4=0;delay_1ms(400);key(
25、);if(ly_flag=1)moshi=0;break;P2_5=0;delay_1ms(400);P2_6=0;delay_1ms(400);P2_7=0;delay_1ms(400);P4_4=0;delay_1ms(9000);key();if(ly_flag=1)moshi=0;break;delay_1ms(9000);key();if(ly_flag=1)moshi=0;break;delay_1ms(9000);key();if(ly_flag=1)moshi=0;break;P2=0XFF;P3=0XFF;P4_4=1;void dh6()char j;int yanshi=
26、3000;P1_7=1;P1_6=1;P1_5=1;P1_4=1;P1_3=1;P1_2=1;P1_1=1;P4_6=1;P0_7=1;P0_6=1;P0_5=1;P0_4=1;P0_3=1;P0_2=1;P0_1=1;P0_0=1;for(j=0;j20;j+) P3_4=1;P2_0=1;P2_4=1;P4_4=1; P3_0=0;P3_5=0;P2_1=0;P2_5=0;delay_1ms(yanshi);key();if(ly_flag=1)moshi=0;ly_flag=0;break; P3_0=1;P3_5=1;P2_1=1;P2_5=1; P3_1=0;P3_6=0;P2_2=
27、0;P2_6=0;delay_1ms(yanshi);key(); if(ly_flag=1)moshi=0;ly_flag=0;break; P3_1=1;P3_6=1;P2_2=1;P2_6=1; P3_3=0;P3_7=0;P2_3=0;P2_7=0;delay_1ms(yanshi);key();if(ly_flag=1)moshi=0;ly_flag=0;break; P3_3=1;P3_7=1;P2_3=1;P2_7=1; P3_4=0;P2_0=0;P2_4=0;P4_4=0;delay_1ms(yanshi);if(j6)yanshi=yanshi-400;key();if(l
28、y_flag=1)moshi=0;ly_flag=0;break;void dh7()P3_0=0;/J1P3_1=0;/J2P3_3=0;/J3P3_4=0;/J4P3_5=0;/J5P3_6=0;/J6P3_7=0;/J7P2_0=0;/J8P2_1=0;/J9P2_2=0;/J10P2_3=0;/J11P2_4=0;/J12P2_5=0;/J13P2_6=0;/J14P2_7=0;/J15P4_4=0;/J16P1=0X00;P0=0X00;P4_6=0;P1_7=1;delay_1ms(400);P1_6=1;delay_1ms(400);P1_6=0;P1_5=1;delay_1ms
29、(400);P1_5=0;P1_4=1;delay_1ms(400);P1_4=0;P1_3=1;delay_1ms(400);P1_3=0;P1_2=1;delay_1ms(400);P1_2=0;P1_1=1;delay_1ms(400);P1_1=0;P4_6=1;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_flag=0;goto hm;P4_6=0;P0_7=1;delay_1ms(400);P0_7=0;P0_6=1;delay_1ms(400);P0_6=0;P0_5=1;delay_1ms(400);P0_5=0;P0_4=1;del
30、ay_1ms(400);P0_4=0;P0_3=1;delay_1ms(400);P0_3=0;P0_2=1;delay_1ms(400);P0_2=0;P0_1=1;delay_1ms(400);P0_1=0;P0_0=1;delay_1ms(400);/P00key();if(ly_flag=1)moshi=0;ly_flag=0;goto hm;P1_6=1;delay_1ms(400);P1_6=0;P1_5=1;delay_1ms(400);P1_5=0;P1_4=1;delay_1ms(400);P1_4=0;P1_3=1;delay_1ms(400);P1_3=0;P1_2=1;
31、delay_1ms(400);P1_2=0;P1_1=1;delay_1ms(400);P1_1=0;P4_6=1;delay_1ms(400);P4_6=0;P0_7=1;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_flag=0;goto hm;P0_7=0;P0_6=1;delay_1ms(400);P0_6=0;P0_5=1;delay_1ms(400);P0_5=0;P0_4=1;delay_1ms(400);P0_4=0;P0_3=1;delay_1ms(400);P0_3=0;P0_2=1;delay_1ms(400);P0_2=0;P
32、0_1=1;delay_1ms(400);/P01key();if(ly_flag=1)moshi=0;ly_flag=0;goto hm;P1_6=1;delay_1ms(400);P1_6=0;P1_5=1;delay_1ms(400);P1_5=0;P1_4=1;delay_1ms(400);P1_4=0;P1_3=1;delay_1ms(400);P1_3=0;P1_2=1;delay_1ms(400);P1_2=0;P1_1=1;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_flag=0;goto hm;P1_1=0;P4_6=1;dela
33、y_1ms(400);P4_6=0;P0_7=1;delay_1ms(400);P0_7=0;P0_6=1;delay_1ms(400);P0_6=0;P0_5=1;delay_1ms(400);P0_5=0;P0_4=1;delay_1ms(400);P0_4=0;P0_3=1;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_flag=0;goto hm;P0_3=0;P0_2=1;delay_1ms(400);/P02P1_6=1;delay_1ms(400);P1_6=0;P1_5=1;delay_1ms(400);P1_5=0;P1_4=1;d
34、elay_1ms(400);P1_4=0;P1_3=1;delay_1ms(400);P1_3=0;P1_2=1;delay_1ms(400);P1_2=0;P1_1=1;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_flag=0;goto hm;P1_1=0;P4_6=1;delay_1ms(400);P4_6=0;P0_7=1;delay_1ms(400);P0_7=0;P0_6=1;delay_1ms(400);P0_6=0;P0_5=1;delay_1ms(400);P0_5=0;P0_4=1;delay_1ms(400);P0_4=0;P0
35、_3=1;delay_1ms(400);/P03key();if(ly_flag=1)moshi=0;ly_flag=0;goto hm;P1_6=1;delay_1ms(400);P1_6=0;P1_5=1;delay_1ms(400);P1_5=0;P1_4=1;delay_1ms(400);P1_4=0;P1_3=1;delay_1ms(400);P1_3=0;P1_2=1;delay_1ms(400);P1_2=0;P1_1=1;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_flag=0;goto hm;P1_1=0;P4_6=1;delay
36、_1ms(400);P4_6=0;P0_7=1;delay_1ms(400);P0_7=0;P0_6=1;delay_1ms(400);P0_6=0;P0_5=1;delay_1ms(400);P0_5=0;P0_4=1;delay_1ms(400);/P04P1_6=1;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_flag=0;goto hm;P1_6=0;P1_5=1;delay_1ms(400);P1_5=0;P1_4=1;delay_1ms(400);P1_4=0;P1_3=1;delay_1ms(400);P1_3=0;P1_2=1;delay_1ms(400);key();if(ly_flag=1)moshi=0;ly_flag=0;goto hm;P1_2=0;P1_