基于单片机的广州塔论文.docx
《基于单片机的广州塔论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的广州塔论文.docx(40页珍藏版)》请在冰豆网上搜索。
基于单片机的广州塔论文
基于单片机的广州塔
姓名:
专业:
学校:
指导教师:
摘要
STC12C5A60S2是STC系列单片机里应用比较广泛的一款,在自动控制领域里享有很高的价值,以其易用性和多功能性受到了广大电子设计爱好者的好评。
本次设计主要是利用STC12C5A60S2单片机、该系统采用增强型8051单片机STC12C5A60S2为主控制器,利用单片机控制点阵的原理,控制广州塔展示效果,还通过单片机内置的ADC对音频信号进行采样,然后控制广州塔亮的层数达到根据音乐跳舞的效果。
该方案具有电路结构简洁,开发、生产成本低的优点。
关键词:
点阵STC12C5A60S2广州塔
1绪论
1.1项目研究背景及意义
广州塔其实又称广州新电视塔,昵称小蛮腰。
它是广州最高建筑,整个塔身的设计非常有特点,特别是在夜晚的灯光装饰下,更是显得美轮美奂。
现已俨然成为广州的地标。
如此美的建筑怎能不让人心动。
我们结合所学的单片机点阵显示技术,我们也能做出广州塔的美。
我们采用STC12C5A60S2作为控制系统,显示部分采用的是16*16的点阵显示原理,通过对广州塔的制作,能更好的提升单片机对点阵显示原理的掌握。
2总体设计方案及论证
2.1总体方案设计
本设计包括硬件和软件设计两个部分。
系统总体的设计方框图如图1所示。
图1系统方框图
3硬件实现及单元电路设计
3.1主控制模块
主控制最小系统电路如图2所示。
图2最小系统
硬件电路总设计见图3。
图3总设计电路图
3.2电源设计
电源部分的设计采用DC5V供电。
3.3模块设计
3.3.1led驱动模块
LED模块采用的是74HC573+ULN2803驱动,其中74HC573控制LED的正极,ULN2803控制LED的负极。
如下图:
图4led驱动电路
3.3.2底座4个LED
底座4个LED使用的七彩LED,为了控制方便,4个LED都接到了单片机的IO口,可以方便的控制其亮灭,使用七彩LED的原因是,其发出的LED光多姿多彩,给广州塔的绚丽增添多一份优美,电路如下图所示:
图5底座led驱动电路
3.3.3音频输入电路的设计
音频电路的设计主要是采用了T型口的USB接口,因为该接口包含了音频和电源的输入,又因为控制模板的单片机是自带了AD的,所以通过按键切换到音频模式下,我们可以看到广州随音乐在跳舞。
3.3.4时钟电路的设计
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为12MHZ,一个振荡周期为1/12us,故而一个机器周期为1us。
如图13所示为时钟电路。
图13时钟电路图
4软件设计
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineLongToBin(n)(((n>>21)&0x80)|((n>>18)&0x40)|((n>>15)&0x20)|((n>>12)&0x10)|((n>>9)&0x08)|((n>>6)&0x04)|((n>>3)&0x02)|((n)&0x01))
#defineBIN(n)LongToBin(0x##n##)
sbitH1=P2^0;
sbitH2=P2^1;
sbitL1=P2^2;
sbitL2=P2^3;
sbitanjian=P3^2;
uintyanshi;
charmoshi=0;
charflag=0;
voiddelay_1ms(uintq)
{
uinti,j;
for(i=0;ifor(j=0;j<120;j++);
}
voiddh1()
{
chari;
yanshi=400;
P0=0XFF;
L1=L2=1;
L1=L2=0;
for(i=0;i<12;i++)
{
P0=0X01;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(yanshi);
P0=0X02;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
P0=0X04;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(yanshi);
P0=0X08;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
P0=0X10;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(yanshi);
P0=0X20;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
P0=0X40;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(yanshi);
P0=0X80;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(yanshi);
}
}
voiddh2()
{
chari,j;
yanshi=500;
P0=0XFF;
H1=H2=1;
H1=H2=0;
for(i=0;i<1;i++)
{
P0=0X00;
L1=1;
L1=0;
P0=0X01;
L2=1;
L2=0;
if(anjian==0){while(anjian==0);moshi=1;break;}
delay_1ms(yanshi);
for(j=0;j<7;j++)
{
P0=P0<<1;
L2=1;
L2=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
P0=0X00;
L2=1;
L2=0;
P0=0X01;
L1=1;
L1=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
for(j=0;j<7;j++)
{
P0=P0<<1;
L1=1;
L1=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
P0=0X80;
L1=1;
L1=0;
delay_1ms(yanshi);
for(j=0;j<7;j++)
{
P0=P0>>1;
L1=1;
L1=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
P0=0X00;
L1=1;
L1=0;
P0=0X80;
L2=1;
L2=0;
delay_1ms(yanshi);
for(j=0;j<7;j++)
{
P0=P0>>1;
L2=1;
L2=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
}
}
voiddh3()
{
chari,j;
yanshi=400;
P0=0XFF;
H1=H2=1;
H1=H2=0;
for(i=0;i<2;i++)
{
P0=0X01;
L2=1;
L2=0;
if(anjian==0){while(anjian==0);moshi=1;break;}
delay_1ms(yanshi);
for(j=0;j<7;j++)
{
P0=(P0<<1)|0x01;
L2=1;
L2=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
P0=0X01;
L1=1;
L1=0;
delay_1ms(yanshi);
for(j=0;j<7;j++)
{
P0=(P0<<1)|0x01;
L1=1;
L1=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
delay_1ms(5000);
P0=0X7F;
for(j=0;j<7;j++)
{
P0=P0>>1;
L1=1;
L1=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
P0=0X7F;
L2=1;
L2=0;
delay_1ms(yanshi);
for(j=0;j<7;j++)
{
P0=P0>>1;
L2=1;
L2=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
}
}
voiddh4()
{
chari;
P0=0X81;
L1=1;
L1=0;
P0=0X02;
L2=1;
L2=0;
for(i=0;i<5;i++)
{
P0=0X33;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(600);
P0=0X66;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(600);
if(anjian==0){while(anjian==0);moshi=1;break;}
P0=0XCC;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(600);
P0=0X99;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(600);
}
}
chars1,s2;
voiddh5()
{
chari,j;
yanshi=500;
P0=0XFF;
H1=H2=1;
H1=H2=0;
for(i=0;i<5;i++)
{
s1=0x01;
s2=0x80;
P0=s1;
L1=1;
L1=0;
P0=s2;
L2=1;
L2=0;
if(anjian==0){while(anjian==0);moshi=1;break;}
delay_1ms(yanshi);
for(j=0;j<7;j++)
{
s2=(s2>>1)&0x7F;
P0=s2;
L2=1;
L2=0;
s1=s1<<1;
P0=s1;
L1=1;
L1=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
}
}
voiddh6()
{
chari,j;
yanshi=500;
P0=0XFF;
H1=H2=1;
H1=H2=0;
for(i=0;i<5;i++)
{
P0=0x00;
L2=1;
L2=0;
P0=0x80;
L1=1;
L1=0;
if(anjian==0){while(anjian==0);moshi=1;break;}
delay_1ms(yanshi);
for(j=0;j<7;j++)
{
P0=(P0>>1)|0x80;
L1=1;
L1=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
P0=0x80;
L2=1;
L2=0;
delay_1ms(yanshi);
for(j=0;j<7;j++)
{
P0=(P0>>1)|0x80;
L2=1;
L2=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
}
}
voiddh7()
{
chari;
P0=0XFF;
L1=1;
L1=0;
P0=0XFF;
L2=1;
L2=0;
for(i=0;i<5;i++)
{
P0=0X11;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(700);
P0=0X22;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(700);
if(anjian==0){while(anjian==0);moshi=1;break;}
P0=0X44;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(700);
P0=0X88;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(700);
}
}
voiddh8()
{
chari;
P0=0XFF;
L1=1;
L1=0;
P0=0XFF;
L2=1;
L2=0;
for(i=0;i<5;i++)
{
P0=0X33;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(600);
P0=0X66;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(600);
if(anjian==0){while(anjian==0);moshi=1;break;}
P0=0XCC;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(600);
P0=0X99;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(600);
}
}
voiddh9()
{
chari;
P0=0XFF;
L1=1;
L1=0;
P0=0XFF;
L2=1;
L2=0;
for(i=0;i<10;i++)
{
if(anjian==0){while(anjian==0);moshi=1;break;}
P0=0X55;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(600);
P0=0XAA;
H1=1;
H1=0;
H2=1;
H2=0;
delay_1ms(600);
}
}
voiddh10()
{
chari,j;
yanshi=500;
P0=0X01;
H1=H2=1;
H1=H2=0;
for(i=0;i<5;i++)
{
P0=0x00;
L2=1;
L2=0;
P0=0x80;
L1=1;
L1=0;
if(anjian==0){while(anjian==0);moshi=1;break;}
delay_1ms(yanshi);
for(j=0;j<7;j++)
{
P0=(P0>>1)|0x80;
L1=1;
L1=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
P0=0x80;
L2=1;
L2=0;
delay_1ms(yanshi);
for(j=0;j<7;j++)
{
P0=(P0>>1)|0x80;
L2=1;
L2=0;
delay_1ms(yanshi);
if(anjian==0){while(anjian==0);moshi=1;break;}
}
}
}
ucharSTC_ADC()//!
!
根据数据手册写一个ad读取函数
{
uchari;
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR=BIN(10001000);
i=3;
while(i--);
while
(1)
{
if(ADC_CONTR&BIN(10000))
{
break;
}
}
ADC_CONTR=BIN(10000000);
return(ADC_RESL<<2);
}
uchardate;
voidinit()
{
TMOD=0x10;
TL1=(65536-50000)/256;//设置定时初值
TH1=(65536-50000)%256;//设置定时初值
ET1=1;
TR1=1;
EA=0;
}
charh=0,v=0;
voidpp()
{
if(date<=15&&date>0)
{
h=1;
if(vif(flag==0)
{
P0=0X01;
L2=1;
L2=0;
delay_1ms
(2);
P0=0X00;
L1=1;
L1=0;
}
if(flag==1)
{
P0=0X01;
L2=1;
L2=0;
delay_1ms
(2);
P0=0X00;
L1=1;
L1=0;
}
}
if(date<=30&&date>15)
{
h=2;
if(vif(flag==0)
{
P0=0X03;
L2=1;
L2=0;
delay_1ms
(2);
P0=0X00;
L1=1;
L1=0;
}
if(flag==1)
{
P0=0X02;
L2=1;
L2=0;
delay_1ms
(2);
P0=0X00;
L1=1;
L1=0;
}
}
if(date<=45&&date>30)
{
h=3;
if(vif(flag==0)
{
P0=0X07;
L2=1;
L2=0;
delay_1ms
(2);
P0=0X00;
L1=1;
L1=0;
}
if(flag==1)
{
P0=0X04;
L2=1;
L2=0;
delay_1ms
(2);
P0=0X00;
L1=1;
L1=0;
}
}
if(date<=60&&date>45)
{
h=4;
if(vif(flag==0)
{
P0=0X0F;
L2=1;
L2=0;
delay_1ms
(2);
P0=0X00;
L1=1;
L1=0;
}
if(flag==1)
{
P0=0X08;
L2=1;
L2=0;
delay_1ms
(2);
P0=0X00;
L1=1;
L1=0;
}
}
if(date<=75&&date>60)
{
h=5;
if(vif(flag==0)
{
P0=0X1F;
L2=1;
L2=0;
delay_1ms
(2);
P0=0X00;
L1=1;
L1=0;
}
if(flag==1)
{
P0=0X10;
L2=1;
L2=0;
delay_1ms
(2);
P0=0X00;
L1=1;
L1=0;
}
}
if(date<=90&&date>75)
{
h=6;
if(vif(flag==0)
{
P0=0X3F;
L2=1;
L2=0;
delay_1ms
(2);
P0=0X00;
L1=1;
L1=0;
}
if(flag==1)
{
P0=0X20;
L2=1;