标题: stc51f104w制作的七彩灯 [打印本页]

作者: liaolinhui    时间: 2014-8-13 22:01
标题: stc51f104w制作的七彩灯
前天看了nniipf的帖子才知道原来stc也有8脚的单片机,之前买了2块pic的由于要编程器所以被丢一边了,看到STC也有于是从淘宝买了几片回来研究。申通也够给力,今天早上收到货了,于是弄了个最小系统,说是最小系统其实也就是在电源端接2个电容而已。
上面的事DIP封装的,下面是SOP封装的,上面左边的是下载用的,右边呢就是今天的主角七彩灯。STC下载很方便的,直接用串口就可以了,看图2.
好了,接下来先用STC-ISP检测MCP选项
正在检测目标单片机 ...
  单片机型号: STC15F104W
  固件版本号: 7.1.4Q

当前芯片的硬件选项为:
  . 下次冷启动后系统时钟源为内部IRC振荡器
  . 内部振荡器的频率未调节
  . 掉电唤醒定时器的频率: 35.391KHz
  . P3.2和P3.3与下次下载无关
  . 上电复位时不增加额外的复位延时
  . 复位引脚用作普通I/O口
  . 检测到低压时复位
  . 低压检测门槛电压 : 3.82 V
  . 低压时可以进行EEPROM操作
  . 上电复位时,硬件不启动内部看门狗
  . 上电自动启动内部看门狗时的预分频数为 : 64
  . 空闲状态时看门狗定时器停止计数
  . 启动看门狗后,软件可以修改分频数,但不能关闭看门狗
  . 下次下载用户程序时,将用户EEPROM区一并擦除
  . 下次下载用户程序时,没有相关的端口控制485
  . TXD与RXD为相互独立的IO
  . 芯片复位后,TXD脚为弱上拉双向口
  . 芯片复位后,P3.3输出低电平

  单片机型号: STC15F104W
  固件版本号: 7.1.4Q

操作成功 !

看样子下载器是没问题了,接下来看看七彩灯电路可以用不,我先写个程序
#include <reg52.h>
void delay(unsigned int i);  //声明延时函数
main()
{
  unsigned char Num = 0xff;
  while (1)
  {P3  = Num;
   delay(1000);           //延时函数
   Num--;
   }

}


/*******延时函数*************/
void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)
        for(j = 255; j > 0; j--);

}

这个程序是让单片机P3口输出(15F104W只有P3口)11111111-00000000
而我的七彩灯只用到P3.0-P3.23个端口,所以就111-000八种状态,实现了七彩灯的效果
七彩灯最主重要的是一个3色共阳LED.
编译成功了,没有错误接下来写入单片机
居然写不进去,一直停在正在检测单片机那里,好像听说是要在下载线上加电阻的吧,等一下去找个电阻来试试

IMAG0011.jpg (541.81 KB, 下载次数: 257)

IMAG0011.jpg

IMAG0012.jpg (442.64 KB, 下载次数: 277)

IMAG0012.jpg

作者: liaolinhui    时间: 2014-8-13 22:33
又重新插了几次居然写入成功了,估计是我的IC插座氧化的原因,毕竟是5,6年前的了。

正在检测目标单片机 ...
  单片机型号: STC15F104W
  固件版本号: 7.1.4Q

当前芯片的硬件选项为:
  . 下次冷启动后系统时钟源为内部IRC振荡器
  . 内部振荡器的频率未调节
  . 掉电唤醒定时器的频率: 35.391KHz
  . P3.2和P3.3与下次下载无关
  . 上电复位时不增加额外的复位延时
  . 复位引脚用作普通I/O口
  . 检测到低压时复位
  . 低压检测门槛电压 : 3.82 V
  . 低压时可以进行EEPROM操作
  . 上电复位时,硬件不启动内部看门狗
  . 上电自动启动内部看门狗时的预分频数为 : 64
  . 空闲状态时看门狗定时器停止计数
  . 启动看门狗后,软件可以修改分频数,但不能关闭看门狗
  . 下次下载用户程序时,将用户EEPROM区一并擦除
  . 下次下载用户程序时,没有相关的端口控制485
  . TXD与RXD为相互独立的IO
  . 芯片复位后,TXD脚为弱上拉双向口
  . 芯片复位后,P3.3输出低电平

  单片机型号: STC15F104W
  固件版本号: 7.1.4Q

开始调节频率 ...                        [0.172"]
调节后的频率: 11.054MHz (-0.043%)

正在重新握手 ... 成功                        [0.297"]
当前的波特率: 38400
正在擦除目标区域 ... 完成 !                [0.625"]
正在下载用户代码 ... 完成 !                [0.235"]
正在设置硬件选项 ... 完成 !                [0.062"]

更新后的硬件选项为:
  . 下次冷启动后系统时钟源为内部IRC振荡器
  . 当前的振荡器的频率: 11.054MHz
  . P3.2和P3.3与下次下载无关
  . 上电复位时增加额外的复位延时
  . 复位引脚用作普通I/O口
  . 检测到低压时复位
  . 低压检测门槛电压 : 3.82 V
  . 低压时不能进行EEPROM操作
  . 上电复位时,硬件不启动内部看门狗
  . 上电自动启动内部看门狗时的预分频数为 : 256
  . 空闲状态时看门狗定时器停止计数
  . 启动看门狗后,软件可以修改分频数,但不能关闭看门狗
  . 下次下载用户程序时,不擦除用户EEPROM区
  . 下次下载用户程序时,没有相关的端口控制485
  . TXD与RXD为相互独立的IO
  . 芯片复位后,TXD脚为弱上拉双向口
  . 芯片复位后,P3.3输出高电平

  . 芯片出厂序列号 : 0C0000160813FC
  单片机型号: STC15F104W
  固件版本号: 7.1.4Q

  . 用户设定频率: 11.059MHz
  . 调节后的频率: 11.054MHz
  . 频率调节误差: -0.043%

操作成功 !
好了接下来你插上七彩灯板试一下。测试成功,其实有时候我们做些小制作的时候,特别是初学者(其实就是指我自己)没必要用太大的太复杂的电路,或者用开发板,用这些15f104之类的简单电路更容易成功,这样才越来越有兴趣去继续学习,

IMAG0013.jpg (381.55 KB, 下载次数: 249)

IMAG0013.jpg

作者: admin    时间: 2014-8-13 23:23
很好的制作  谢谢分享
作者: jiege    时间: 2014-8-13 23:25
太牛逼了,问一下 这个灯有几个引脚? 为什么可以发出七彩色呢?
作者: liaolinhui    时间: 2014-8-13 23:38
jiege 发表于 2014-8-13 23:25
太牛逼了,问一下 这个灯有几个引脚? 为什么可以发出七彩色呢?

这灯有4个引脚,一个共阳极,一个绿灯,一个蓝灯,一个红灯。分别接在P3.0,P3.1,P3.2,通过P3.0-P3.2输出000-111实现分别点亮一个灯(红,绿,蓝),同时点亮两个灯(红绿,红蓝,绿蓝)。同时点亮三个灯(红绿蓝),同时熄灭等八种状态。如果通过pwm改变3灯的亮度的话理论上是有无数种颜色的,要知道彩电就是通过这三基色来显示各种各样的颜色的
作者: 51sszzhh    时间: 2014-8-14 11:36
很好很详细
作者: liaolinhui    时间: 2014-8-14 22:16
昨天受到启发,想吧程序改一下,想把七彩改为多彩,今天在51hei网站发现有个类似的
原网址http://www.51hei.com/mcu/3973.html,我拿来修改了下,做成了七彩灯2代
只改动了头文件和IO口设置
#include <STC15F104E.H> //C:\Keil\C51\INC\STC目录居然没有STC15F104W的,所以用STC15F104E的


sbit g1=P3^0;   //绿色 这个改成STC15F104W的io
sbit r1=P3^1;   //红
sbit b1=P3^2;   //兰
sbit key1=P3^3;   

/*********************************/
unsigned char i;
unsigned char mode;
/*********************************/
void delay(unsigned int k)       
{                               
unsigned int i,j;               
for(i=0;i<k;i++){               
for(j=0;j<121;j++)               
{;}}
}               
/*********************************/
void interint1() interrupt 2 //using **
      //外部中断1处理      
{     
EA=0;

if(key1==0)
{
delay(20);
  key1=1;
if(key1==0)
{
mode++;
if(mode==4)mode=0;
}
while(key1==0);
}

key1=1;     
EA=1;     
}
/*********************************/
timer(unsigned char t)
{unsigned char b;
   for(b=0;b<t;b++)
   {; }
}

/*********************************/
ledout(unsigned char g,r,b)
{unsigned char a;
  for(a=0;a<10;a++)
{if(g!=0)
    {g1=1;timer(g);g1=0;}
  if(r!=0)
    {r1=1;timer(r);r1=0;}
  if(b!=0)
    {b1=1;timer(b);b1=0;}
  }
}
/*********************************/

/*********************************/
main()
{

unsigned char g,r,b;
r1=0;
g1=0;
b1=0;
EA=1;
EX1=1;
delay(1);
while(1)
{

if(mode==0)
{
{if(g!=0&&b==0)
    {g--;r++;}
   if(r!=0&&g==0)
    {r--;b++;}
   if(b!=0&&r==0)
    {b--;g++;}
   if(g+r+b!=100)
    {g=100;r=0;b=0;}
   ledout(g,r,b);
   }
   }

if(mode==1)
{
i++;
if(i==7)i=0;
switch(i)
{
case 0 : r1=1;g1=0;b1=0;delay(100);        r1=0;g1=0;b1=0; delay(100); break;
case 1 : r1=0;g1=1;b1=0;delay(100);     r1=0;g1=0;b1=0; delay(100); break;
case 2 : r1=0;g1=0;b1=1;delay(100);        r1=0;g1=0;b1=0;  delay(100); break;
case 3 : r1=1;g1=1;b1=0;delay(100);        r1=0;g1=0;b1=0;  delay(100); break;
case 4 : r1=1;g1=0;b1=1;delay(100);        r1=0;g1=0;b1=0;  delay(100); break;
case 5 : r1=0;g1=1;b1=1;delay(100);        r1=0;g1=0;b1=0;  delay(100); break;
case 6 : r1=1;g1=1;b1=1;delay(100);        r1=0;g1=0;b1=0;  delay(100); break;
default : break;
}
}


if(mode==2)
{
i++;
if(i==7)i=0;
switch(i)
{
case 0 : r1=1;g1=0;b1=0;delay(300);        r1=0;g1=0;b1=0; delay(300); break;
case 1 : r1=0;g1=1;b1=0;delay(300);     r1=0;g1=0;b1=0; delay(300); break;
case 2 : r1=0;g1=0;b1=1;delay(300);        r1=0;g1=0;b1=0;  delay(300); break;
case 3 : r1=1;g1=1;b1=0;delay(300);        r1=0;g1=0;b1=0;  delay(300); break;
case 4 : r1=1;g1=0;b1=1;delay(300);        r1=0;g1=0;b1=0;  delay(300); break;
case 5 : r1=0;g1=1;b1=1;delay(300);        r1=0;g1=0;b1=0;  delay(300); break;
case 6 : r1=1;g1=1;b1=1;delay(300);        r1=0;g1=0;b1=0;  delay(300); break;
default : break;
}
}

if(mode==3)
{
i++;
if(i==7)i=0;
switch(i)
{
case 0 : r1=1;g1=0;b1=0;delay(300); break;
case 1 : r1=0;g1=1;b1=0;delay(300); break;
case 2 : r1=0;g1=0;b1=1;delay(300); break;
case 3 : r1=1;g1=1;b1=0;delay(300); break;
case 4 : r1=1;g1=0;b1=1;delay(300); break;
case 5 : r1=0;g1=1;b1=1;delay(300); break;
case 6 : r1=1;g1=1;b1=1;delay(300); break;
default : break;
}
}

}
}
作者: wangyin    时间: 2014-8-15 00:42
好久没有看到这么牛的制作了 非常好 非常详细  值得学习
作者: hkccd    时间: 2014-8-15 12:23
太牛逼了,,楼主问一下这种灯叫什么名字到哪里有卖的呀?我也想亲手制作一个
作者: liaolinhui    时间: 2014-8-15 23:32
本帖最后由 liaolinhui 于 2014-8-15 23:59 编辑

淘宝应该有卖,才几毛钱一个(在淘宝搜三色LED),15f104w要1块多,洞洞板5X7的3毛钱(只用到一小块,一块5X7的起码可以做十几个),usb转ttl线(下载用)10块钱(这个最贵,不过买了以后可以经常用到,)三色LED分共阳和共阴两种,用51单片机IO口直接驱动的话买共阳的好点,因为51单片机低电平输出能力要比高电平好,共阳三色LED的公共端接VCC,其他三脚通过限流电阻接IO口,建议红色用1k,蓝绿用560左右,因为如果三个都用同样的电阻红色会太亮,其他两个颜色就不明显,假如钱多的话可以买大功率的LED,那样的话这玩意就变成舞台灯了
作者: happy_coding    时间: 2014-8-21 17:57
我喜欢
作者: 13304563556    时间: 2014-9-5 13:22
还行挺经典的啊
作者: 老菜鸟    时间: 2014-10-9 16:07
楼主很行啊,不错,在玩中学习!!!
作者: 51hei电控2112312    时间: 2014-12-21 04:50
很好,正需要
作者: bhjyqjs    时间: 2015-6-2 10:08
楼主真牛,实际上STC15f104w用途很大,我就用来代替过著名的555集成块
作者: 重庆水下LED灯    时间: 2015-7-20 00:04
高手老师 我遇上一个难题了 我是做水下LED的 也有7彩 我是不会写  现在是别人写的 就是我们这个 要几百个灯同时上电,一定要同时变。现在就是遇上了不同步。当喷泉水泵一启动 就开始乱变了 叫这写程序的改下 他说只能这样 把我都气晕了     
作者: 奋斗小范    时间: 2015-7-20 08:30
新手前来学习,目前想做一个光立方
作者: liaolinhui    时间: 2015-7-20 23:53
重庆水下LED灯 发表于 2015-7-20 00:04
高手老师 我遇上一个难题了 我是做水下LED的 也有7彩 我是不会写  现在是别人写的 就是我们这个 要几百个灯 ...

方便的话提供一下电路和程序,才能判断怎么回事

作者: dragon19790000    时间: 2016-4-16 21:26
初学者,学习中.路过......
作者: lele4608    时间: 2016-9-23 16:43
liaolinhui 发表于 2014-8-14 22:16
昨天受到启发,想吧程序改一下,想把七彩改为多彩,今天在51hei网站发现有个类似的
原网址http://www.51he ...

编译的时候要注意什么,我怎么好多警告。
作者: hewanlai    时间: 2016-9-23 17:13

初学者,学习中
作者: 双菱变频器周    时间: 2016-9-23 19:12
楼主好贴,我上次给客户出货了刚好还剩下几个这个芯片,明天来照样做个学习学习,灯就没有三色同体的,不过有做个红绿灯,还有灯仔,试试,谢谢楼主提供源程序。
作者: lele4608    时间: 2016-9-27 10:15
liaolinhui 发表于 2014-8-14 22:16
昨天受到启发,想吧程序改一下,想把七彩改为多彩,今天在51hei网站发现有个类似的
原网址http://www.51he ...

我在有警告的 前面 加了void 就解决了。谢谢楼主的程序,学习中。。。
作者: YZZG2080    时间: 2017-7-28 22:09
好东西,值得学习收藏





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1