6、产品说明书
心形LED
摘要:这是一个基于单片机流水灯的一个新型应用,可以通过开关/红外遥控器切换灯的发光模式,样式赏心悦目,为日常生活增添不少乐趣,是一个好的儿童玩具。
一、 产品介绍
1.1项目设计来源
灯光在黑夜的衬托下更加绚烂多彩,所以LED类的玩具产品深受孩童喜爱。本产品以STC89C52RC为核心芯片。
1.2解决方案
基于一般流水灯,通过软件编写程序实现花式亮灯
1.3心形流水灯的简单原理
STC89C52RC单片机是本产品运用的主要原件。流水灯控制设计是用一个带有多个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。要实现流水灯功能,我们只要将发光二极管LED1~LED32依次点亮、熄灭,LED灯便会一亮一暗的做流水灯了。
1.4心形流水灯和普通的流水灯相比的优缺点
二、 产品设计
材料清单
2.1原理图设计
2.2复位电路部分
当要对晶体重置时,只要对此引脚电平提升至高电平并保持两个及其周期以上的时间便能完成系统重置的各项动作,使得部特殊功能寄存器容均被设成已知状态。
2.3晶振部分
单片机的芯片是数字电路芯片,数字芯片要想正常工作,都需要有一个基本的时钟基准,要在这个时钟脉冲的步调下去工作。时钟电路主要由外部的时钟晶振来提供(晶体振荡器产生一定频率的方波,单片机常用6MHz、11.0592MHz、12MHz),用作单片机内部各功能部件按序协调工作的控制信号,其周期称为时钟周期。
2.4 STC89C52RC单片机
STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统的51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
作用:将红外线接收头的信号从I/O口传入,通过软件编程对单片机各个I/O口的控制实现花式流水灯。
三.产品效果
调试程序
1、全亮
#include <reg52.h> //51头文件
#include <intrins.h>//包含循环右移函数_cror头文件
#define uint unsigned int
#define uchar unsigned char
uchar temp,x,y;//全局变量,赋值时变量的类型要和被赋值的值类型一样,P1口是八位寄存器,uchar也是八位
void Delay10000ms();
void main()
{
while(1)
{
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;
Delay10000ms();
}
}
void Delay10000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 71;
j = 10;
k = 171;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
2、流水点亮
#include <reg52.h> //51头文件
#include <intrins.h>//包含循环右移函数_cror头文件
#define uint unsigned int
#define uchar unsigned char
uchar temp,x,y;//全局变量,赋值时变量的类型要和被赋值的值类型一样,P1口是八位寄存器,uchar也是八位
void Delay100ms();
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;
sbit LED9=P1^0;
sbit LED10=P1^1;
sbit LED11=P1^2;
sbit LED12=P1^3;
sbit LED13=P1^4;
sbit LED14=P1^5;
sbit LED15=P1^6;
sbit LED16=P1^7;
sbit LED25=P3^0;
sbit LED26=P3^1;
sbit LED27=P3^2;
sbit LED28=P3^3;
sbit LED29=P3^4;
sbit LED30=P3^5;
sbit LED31=P3^6;
sbit LED32=P3^7;
sbit LED20=P2^0;
sbit LED19=P2^1;
sbit LED18=P2^2;
sbit LED17=P2^3;
sbit LED24=P2^4;
sbit LED23=P2^5;
sbit LED22=P2^6;
sbit LED21=P2^7;
void main()
{
while(1)
{
x=0;
LED1=0;
Delay100ms();
LED2=0;
Delay100ms();
LED3=0;
Delay100ms();
LED4=0;
Delay100ms();
LED5=0;
Delay100ms();
LED6=0;
Delay100ms();
LED7=0;
Delay100ms();
LED8=0;
Delay100ms();
LED21=0;
Delay100ms();
LED22=0;
Delay100ms();
LED23=0;
Delay100ms();
LED24=0;
Delay100ms();
LED17=0;
Delay100ms();
LED18=0;
Delay100ms();
LED19=0;
Delay100ms();
LED20=0;
Delay100ms();
LED32=0;
Delay100ms();
LED31=0;
Delay100ms();
LED30=0;
Delay100ms();
LED29=0;
Delay100ms();
LED28=0;
Delay100ms();
LED27=0;
Delay100ms();
LED26=0;
Delay100ms();
LED25=0;
Delay100ms();
LED16=0;
Delay100ms();
LED15=0;
Delay100ms();
LED14=0;
Delay100ms();
LED13=0;
Delay100ms();
LED12=0;
Delay100ms();
LED11=0;
Delay100ms();
LED10=0;
Delay100ms();
LED9=0;
for(x;x<8;x++)
{
Delay100ms();
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
Delay100ms();
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;
}
Delay100ms();
Delay100ms();
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
Delay100ms();
}
}
void Delay100ms() //@11.0592MHz
{
unsigned char i, j;
i = 180;
j = 73;
do
{
while (--j);
} while (--i);
}
原文所在: