找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16196|回复: 23
打印 上一主题 下一主题
收起左侧

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, 下载次数: 214)

IMAG0011.jpg

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

IMAG0012.jpg

评分

参与人数 3威望 +17 黑币 +15 收起 理由
wangyin + 5 + 5 很给力!
jiege + 2 很好 我很喜欢 高手啊
admin + 10 + 10 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:58502 发表于 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, 下载次数: 208)

IMAG0013.jpg
回复

使用道具 举报

板凳
ID:1 发表于 2014-8-13 23:23 | 只看该作者
很好的制作  谢谢分享
回复

使用道具 举报

地板
ID:51088 发表于 2014-8-13 23:25 | 只看该作者
太牛逼了,问一下 这个灯有几个引脚? 为什么可以发出七彩色呢?
回复

使用道具 举报

5#
ID:58502 发表于 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灯的亮度的话理论上是有无数种颜色的,要知道彩电就是通过这三基色来显示各种各样的颜色的
回复

使用道具 举报

6#
ID:65053 发表于 2014-8-14 11:36 | 只看该作者
很好很详细
回复

使用道具 举报

7#
ID:58502 发表于 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;
}
}

}
}
回复

使用道具 举报

8#
ID:51024 发表于 2014-8-15 00:42 | 只看该作者
好久没有看到这么牛的制作了 非常好 非常详细  值得学习
回复

使用道具 举报

9#
ID:2318 发表于 2014-8-15 12:23 来自手机 | 只看该作者
太牛逼了,,楼主问一下这种灯叫什么名字到哪里有卖的呀?我也想亲手制作一个
回复

使用道具 举报

10#
ID:58502 发表于 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,那样的话这玩意就变成舞台灯了
回复

使用道具 举报

11#
ID:65234 发表于 2014-8-21 17:57 | 只看该作者
我喜欢
回复

使用道具 举报

12#
ID:64246 发表于 2014-9-5 13:22 | 只看该作者
还行挺经典的啊
回复

使用道具 举报

13#
ID:65837 发表于 2014-10-9 16:07 | 只看该作者
楼主很行啊,不错,在玩中学习!!!
回复

使用道具 举报

14#
ID:70769 发表于 2014-12-21 04:50 | 只看该作者
很好,正需要
回复

使用道具 举报

15#
ID:66287 发表于 2015-6-2 10:08 | 只看该作者
楼主真牛,实际上STC15f104w用途很大,我就用来代替过著名的555集成块
回复

使用道具 举报

16#
ID:86203 发表于 2015-7-20 00:04 | 只看该作者
高手老师 我遇上一个难题了 我是做水下LED的 也有7彩 我是不会写  现在是别人写的 就是我们这个 要几百个灯同时上电,一定要同时变。现在就是遇上了不同步。当喷泉水泵一启动 就开始乱变了 叫这写程序的改下 他说只能这样 把我都气晕了     
回复

使用道具 举报

17#
ID:85435 发表于 2015-7-20 08:30 来自手机 | 只看该作者
新手前来学习,目前想做一个光立方
回复

使用道具 举报

18#
ID:58502 发表于 2015-7-20 23:53 | 只看该作者
重庆水下LED灯 发表于 2015-7-20 00:04
高手老师 我遇上一个难题了 我是做水下LED的 也有7彩 我是不会写  现在是别人写的 就是我们这个 要几百个灯 ...

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

使用道具 举报

19#
ID:112693 发表于 2016-4-16 21:26 | 只看该作者
初学者,学习中.路过......
回复

使用道具 举报

20#
ID:139028 发表于 2016-9-23 16:43 | 只看该作者
liaolinhui 发表于 2014-8-14 22:16
昨天受到启发,想吧程序改一下,想把七彩改为多彩,今天在51hei网站发现有个类似的
原网址http://www.51he ...

编译的时候要注意什么,我怎么好多警告。
回复

使用道具 举报

21#
ID:140236 发表于 2016-9-23 17:13 | 只看该作者

初学者,学习中
回复

使用道具 举报

22#
ID:140245 发表于 2016-9-23 19:12 | 只看该作者
楼主好贴,我上次给客户出货了刚好还剩下几个这个芯片,明天来照样做个学习学习,灯就没有三色同体的,不过有做个红绿灯,还有灯仔,试试,谢谢楼主提供源程序。
回复

使用道具 举报

23#
ID:139028 发表于 2016-9-27 10:15 | 只看该作者
liaolinhui 发表于 2014-8-14 22:16
昨天受到启发,想吧程序改一下,想把七彩改为多彩,今天在51hei网站发现有个类似的
原网址http://www.51he ...

我在有警告的 前面 加了void 就解决了。谢谢楼主的程序,学习中。。。
回复

使用道具 举报

24#
ID:147018 发表于 2017-7-28 22:09 | 只看该作者
好东西,值得学习收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表