最新的彩灯控制C语言24彩灯

2018-10-23 18:58

电子技术应用课程设计

课题: 基于51单片机的彩灯制作

专业班级: 信息工程101 学生姓名: 胡晓桥 孙悦妍 学号: 1007100032 1007100014 指导老师: 高星辉 刘外喜 日期: 2012年9月 24日-9月28日

一.系统描述 1.实验目的

为掌握和熟悉STC80C51 4个I/O口的应用及对I/O的一般控制方法,了解4094芯片的8位串行输入转为8位并行输出的工作方式,利用STC80C51 4个I/O口实现32个LED控制和用P3.1、P3.2、P1.0及4094实现串口控制8个彩灯。通过完成这一包括电路设计和程序开发的完整过程,了解开发一单片机应用系统的全过程,为今后的设计打下基础。

2.硬件分析

STC80C51共有4个I/O口,可控制32个彩灯,在实现过程中要控制的彩灯分为4个部分,每一部分均由8个彩灯组成。第1部分由P0口控制;第2部分由P1口控制;第3部分由P2口控制;第4部分由P3口控制。另外8个彩灯由以P3.0、P3.1、P1.0控制的4094芯片组成的电路控制,这两组彩灯分别由两个程序控制,各不影响。

在并口控制彩灯的实现中,由于芯片STC80C51供电能力有限,所以在单片机控制的彩灯处各加上拉电阻,以防供电能力不足而导致的电路设计缺陷。

在串口控制彩灯的实现中,P3.0为数据输入口,P3.1为时钟输入口,驱动P3.0口的数据到4094芯片。4094为串口数据输入转换为8位并口数据输出。P1.O为4094串口输入转变为数据输出的使能控制,当P1.0为高电平时,4094串口输入变为并口输出;P1.0为低电平时,4094输出的数据不变。同样,4094控制的彩灯也各加上拉电阻。

由于STC80C51 4个I/O的每个串口都有对彩灯的控制,同时P3.0、P3.1、P1.0又对串口8个彩灯控制,P3.0、P3.1、P1.0在实现功能控制中有冲突,所以在这次彩灯设计中采用了一个跳线功能(相当于一个二路开关功能)。当开关打到一端时,P3.0、P3.1、P1.0控制并口彩灯;而当开关打到另一端时,P3.0、P3.1、P1.0控制串口彩灯,所以实现过程中采取的是两个主程序,以实现其功能。

3.电路设计

STC80C51 4个I/O分别对应控制32个LED彩灯,4094芯片将串口数据输入转换为8位并口数据输出。为保护这两个IC片,我们增加了一个稳压模块,将输入电压范围为6~9V稳定在5V左右。

二.电路原理图

1

1.系统硬件框图

2.系统原理图设计

复位电路 晶振电路 单 稳压电路 片 机 LED驱动及显示电路

Proteus 仿真原理图 3.PCB布线设计

2

三.单片机彩灯控制应用程序设计

程序流程图

并口控制彩灯程序流程图 串口控制彩灯程序流程图

四、调试与测试

画完PCB图并印刷电路板之后,我们便开始焊接元件和调试。刚开始通电时,发现所有LED灯都不亮,包括稳压模块的指示灯。通电几分钟后,稳压块和STC80C51都开始发烫,我们急忙关掉电源,检查电路。后来发现是稳压模块并没有接在电源的入口处,于是我们改正后,又重新接上

3

电源,这回LED彩灯终于绽放了它的光彩。可是,还是有些美中不足,有些LED灯光芒很微弱甚至不亮,我们猜测是焊接得不好或者是虚焊,于是又重新把不亮的LED灯重新焊接。之后再进行调试,LED彩灯果真按着程序闪动变换。

五、成品图片

4

附1.元件清单:

名称 STC80C51单片机 4094芯片 LED灯 电阻 电容 电解电容 稳压块 开关 电源插口 覆铜板 排针、电线 总计 数量 2 1 41 41 2 2 1 1 1 1 若干 价格(元) 11 1.5 3 2 0.4 0.4 1 0.4 0.5 7 1 28.2 附2.系统详细软件代码:

1.彩灯并口程序

//*************包含的头文件**************** #include #include

5

//*************变量定义**************** #define DELAY_TIME 550

unsigned char change,change1,change2; unsigned char i,j; sbit P00=P0^0; sbit P01=P0^1; sbit P02=P0^2; sbit P03=P0^3; sbit P04=P0^4; sbit P05=P0^5; sbit P06=P0^6; sbit P07=P0^7; sbit P17=P1^7; sbit P27=P2^7; sbit P32=P3^2; sbit P33=P3^3; sbit P34=P3^4; sbit P35=P3^5; sbit P36=P3^6; sbit P37=P3^7;

//*************函数声明**************** void de_lay(void); void lig_rotate1(void); void lig_rotate0(void); void lig_circle(void); void lig_jump(void); void lig_circle_light(void); void lig_all_put_out(void); void Delay_us(int time); void Delay_ms(int time);

6

//*************主程序开始**************** void main() {

while(1) { }

//************使彩灯由P0.0-P3.7顺时针依次点亮***************** void lig_rotate0(void) {

change=0xff; }

lig_all_put_out(); Delay_ms(200); lig_rotate0(); lig_rotate1(); for(j=0;j<5;j++)

lig_circle();

for(j=0;j<4;j++)

lig_jump();

for(j=0;j<4;j++) { }

for(j=0;j<4;j++)

lig_jump(); lig_circle_light(); lig_all_put_out();

for(i=0;i<=7;i++) {

change<<=1; P0=change;

7

Delay_ms(DELAY_TIME);

}

change=0xff;

for(i=0;i<=7;i++) {

change>>=1;

P2=change;

Delay_ms(DELAY_TIME);

}

change=0xff; }

//*************使彩灯由P0.0-P3.7顺时针依次熄灭**************** void lig_rotate1(void) {

for(i=0;i<=7;i++) { }

change=0xff; for(i=0;i<=7;i++) { }

change>>=1; P1=change;

Delay_ms(DELAY_TIME); change>>=1; P3=change;

Delay_ms(DELAY_TIME);

P00=1;

Delay_ms(DELAY_TIME); P01=1;

8

Delay_ms(DELAY_TIME); P02=1;

Delay_ms(DELAY_TIME); P03=1;

Delay_ms(DELAY_TIME); P04=1;

Delay_ms(DELAY_TIME); P05=1;

Delay_ms(DELAY_TIME); P06=1;

Delay_ms(DELAY_TIME); P07=1;

Delay_ms(DELAY_TIME); change=0x00;

for(i=0;i<=7;i++) { change>>=1; change+=0x80; P2=change;

Delay_ms(DELAY_TIME);

}

change=0x00;

for(i=0;i<=7;i++) {

change>>=1; change+=0x80; P3=change;

Delay_ms(DELAY_TIME);

}

change=0x00;

9

}

for(i=0;i<=7;i++) { }

change>>=1; change+=0x80; P1=change;

Delay_ms(DELAY_TIME);

//***********使P0,P1,P2,P3分别控制的所有的灯顺时针点亮************* void lig_circle(void) { }

//*************彩灯间隔点亮****************** void lig_jump(void) {

10

change1=0xaa; change2=0x55; P0=0x00;

Delay_ms(DELAY_TIME); P0=0xff; P2=0x00;

Delay_ms(DELAY_TIME); P2=0xff; P3=0x00;

Delay_ms(DELAY_TIME); P3=0xff; P1=0x00;

Delay_ms(DELAY_TIME); P1=0xff;

}

P1=P3=0xaa; P2=P0=0x55; Delay_ms(900); P1=P3=0x55; P2=P0=0xaa; Delay_ms(900);

//***********使P0,P1,P2,P3分别控制的所有的灯逆时针点亮****************** void lig_circle_light(void) { }

//************熄灭所有的灯**************** void lig_all_put_out(void) { }

11

change1=0xaa; change2=0x55; P1=0x00;

Delay_ms(DELAY_TIME); P1=0xff; P3=0x00;

Delay_ms(DELAY_TIME); P3=0xff; P2=0x00;

Delay_ms(DELAY_TIME); P2=0xff; P0=0x00;

Delay_ms(DELAY_TIME); P0=0xff;

P1=P2=P3=P0=0xff;

//************us时间延时*************** void Delay_us(int time) { }

//*************ms时间延时*************** void Delay_ms(int time) { }

//*************彩灯串口程序***************** //*************包含的头文件***************** #include #include

//*************宏定义***************** #define uchar unsigned char #define DELAY_TIME 600

//************函数声明****************** void Effect1(void); void Effect2(void); void Effect3(uchar n); void Effect4(void); void lig_put_out(void); void Init_Programme(void); void Delay_us(int time); void Delay_ms(int time);

//*************变量声明***************** uchar change,change1,change2; sbit P10=P1^0; uchar i,j;

12

while(time--)_nop_();

while(time--)Delay_us(20);

//**************主函数**************** void main() { Init_Programme(); while(1) { Effect1(); Effect2(); Effect3(5); Effect4();

}

}

//*************小灯渐亮***************** void Effect1(void) { change=0xff; for(i=0;i<=7;i++) { change<<=1; SBUF=change; TI=0; while(!TI); P10=1; P10=0;

Delay_ms(DELAY_TIME);

}

lig_put_out();

}

//*************小灯渐灭***************** void Effect2(void)

13

{ }

//*************小灯间隔亮与灭***************** void Effect3(uchar n) {

change=0x00; for(i=0;i<=7;i++) { }

lig_put_out();

change>>=1; change+=0x80; SBUF=change; TI=0; while(!TI); P10=1; P10=0;

Delay_ms(DELAY_TIME);

change=0x55; change1=0xaa; for(i=0;i

SBUF=change; TI=0; while(!TI); P10=1; P10=0;

Delay_ms(DELAY_TIME); SBUF=change1; TI=0;

14

}

}

while(!TI); P10=1; P10=0;

Delay_ms(DELAY_TIME);

lig_put_out();

//**************小灯的混合效果**************** void Effect4(void) {

int time=1000;

change=change1=change2=0xfe; for(i=0;i<55;i++) { }

change=0xfe; change1=0xff; for(i=0;i<=7;i++) {

15

SBUF=change; TI=0; while(!TI); P10=1; P10=0; change1<<=1; change2>>=7;

change=change1|change2; change1=change2=change; time-=15; Delay_ms(time);

for(j=0;j<5;j++) {

SBUF=change; TI=0; while(!TI);

P10=1;

P10=0; Delay_ms(400); SBUF=change1; TI=0; while(!TI); P10=1; P10=0; Delay_ms(400);

}

}

}

change<<=1;

Effect3(5);

//**************程序的初始化**************** void Init_Programme(void) {

SCON=0x00; ES=0; P10=0; SBUF=Oxff; TI=0; while(!TI); P10=1; P10=0;

16

}

//**************熄灭所有的灯**************** void lig_put_out(void) { }

//**************us时间延时**************** void Delay_us(int time) { }

//***************ms时间延时*************** void Delay_ms(int time) { }

while(time--)Delay_us(30); while(time--)_nop_(); SBUF=0xff; TI=0; while(!TI); P10=1; P10=0;

17


最新的彩灯控制C语言24彩灯.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:“创建文明班级、争做文明学生”活动方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: