迅维网

查看: 9602|回复: 9
打印 上一主题 下一主题

[原创][winavr单片机教程(2)]用AVR制作的多功能彩灯(流水灯)

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-14 12:02:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 重庆 来自 重庆

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
(建议没调试过单片机的朋友,先看第1课)
[原创][winavr单片机教程(1)]用WinAVR和AVR Studio搭建AVR开发环境
http://www.chinafix.com.cn/thread-152960-1-1.html

  现在使用WINAVR+AVR Studio做为开发平台的人越来越多,一是方便的移植(几乎不需要修改代码),二是强大的调试、仿真功能,极大的缩短了开发周期。下面是我用M16做一个流水灯的过程。可以看到只要编写几句代码,就可实现流水灯“花样”的变化,这比普通的模拟电路强大的多,并且控制路数没有限制。你也做个好看的图案(比如用一笔一画写几个字)送给自己喜欢的朋友。欢迎大家共同讨论、交流,写出更多的流水灯代码。

  一、电路图
  (1)M16电路图


  (2)控制220V彩灯电路


  二、代码
  (1)C源码
--------------main.c---------------
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    PORTA=0xFF;                                        // PA口输出全1,LED全灭
    DDRA=0xFF;                                        // PA口工作为输出方式

    while (1)
    {
                signed char i,j;        //有符号字符取值范围:-128—127,占用一个字节。

                //间隔点亮16次
                PORTA=0xAA;         //0xAA=10101010
                for (i=0;i<16;i++) {
                        PORTA=~PORTA;  //0xAA取反后=1010101
                        _delay_ms(500);  //延时500ms,WINAVR库函数
                }

                //左循环2次
                for (i=0; i<2; i++) {
                        for (j=0; j<8; j++) {        //8个LED(0-7位)从右向左依次点亮
                                PORTA = ~(1<<j);    //1左移动j位,再取反(因为是高电平灯灭)。
                                _delay_ms(500);
                        }       
                }
                               

                PORTA=0xFF;
                //_delay_ms(1000);

                //右循环2次
                for (i=0;i<2;i++){
                        for (j=7; j>=0; j-- ) {  //最后一次循环,j=-1。(因此变量j必须取signed char)
                                PORTA = ~(1<<j);               
                                _delay_ms(500);
                        }
                }


        }
---------------------------------------------------------------------------
  (2)HEX文件:
  M16  lamp lamp.hex (815 Bytes, 下载次数: 4)

本文由 会员698 原创或被授权转载制作,其他机构或个人未经许可严禁转载。
2#
发表于 2009-11-14 15:25:11 | 只看该作者 来自: 重庆 来自 重庆
附M8最小系统实物图(时钟用片内4或1MHZ,省去外接晶体),我手工焊接,只要几分种就可完成。

M8最小系统


M8最小系统背面


ISP接口,6根线


下载程序(烧录):


  就上面那个彩灯程序来说,代码基本不用修改,在AVR Studio中将器件选为M8/M48,将PA口改为对应的端口,重新编译HEX文件,烧录就行了。(具体操作见教程一)

  同汇编相比,跨平台是十分方便的。

回复 支持 反对

使用道具 举报

3#
发表于 2009-11-14 19:17:58 | 只看该作者 来自: 福建厦门 来自 福建厦门
请教一下。那张M8最小系统背面图。那个板是叫什么板?

回复 支持 反对

使用道具 举报

4#
发表于 2009-11-14 20:04:18 | 只看该作者 来自: 重庆 来自 重庆
  你说的是实验专用的"洞洞"板?
  关于M8最小系统电路图参照看这里:

                               
登录/注册后看高清大图


  将上面程序里的PORTA端口修改为PORTD就行了。可看出它和M16的图大同小异,只是引脚不同。其中9、10脚接晶体,如果在精度要求不高的应用中使能片内振荡器(新买的芯片默认使用片内1MHz振荡器)就可省略掉外接晶体,并能将9、10做为普通的I/O口用。

回复 支持 反对

使用道具 举报

5#
发表于 2009-11-17 21:14:33 | 只看该作者 来自: 福建厦门 来自 福建厦门
M8的晶振要用多大的?揩振呢?我们主板上的。可以不?我就拿了M8回来练手。还有M8如何刷程序?哪几条是连接编程器的。我的是580U晕晕的

回复 支持 反对

使用道具 举报

6#
发表于 2009-11-17 23:34:12 | 只看该作者 来自: 重庆 来自 重庆
晶振要用多大的?
-----------------------
根据你的芯片和实际工作需要选择。就这个流水灯实验来说,用M8默认的片内1MHz做振荡源,不需要外部接任何元件,就可以了。

哪几条是连接编程器?
--------------------------
看M8那个图,1,19,18,17。具体的要看你买的芯片,都是M8封装不同,引脚定义可能不同,你必须看它的PDF为准。
具体的连接和下载过程,请看这段:
四、代码下载(烧录)
将这5根线直接接到AVR芯片的对应引脚,就可用双龙的下载软件将HEX文件下载到AVR芯片中了。
---------------------------
看上面的图。我想,写的十分明确了。


我没用580U刷过,我想如果580U支持,和刷其他片子一样,把M8放到编程器上,直接把HEX刷进去就行了吧。

回复 支持 反对

使用道具 举报

7#
发表于 2009-11-18 16:45:36 | 只看该作者 来自: 福建厦门 来自 福建厦门
本帖最后由 天下无图 于 2009-11-18 16:53 编辑

OK先试一下580U支持不!!!
完美支持。直接放上去就开刷了

回复 支持 反对

使用道具 举报

8#
发表于 2009-11-18 22:08:33 | 只看该作者 来自: 重庆 来自 重庆
你直接刷这个HEX文件就行了:
M8 lamp (未用实际电路测试,使用PD端口)  m8-lamp.hex (672 Bytes)

用的PD口,接8个电阻和二极管就可看到闪烁效果了。

回复 支持 反对

使用道具 举报

9#
发表于 2009-11-23 16:05:13 | 只看该作者 来自: 福建厦门 来自 福建厦门
本帖最后由 天下无图 于 2009-11-23 16:08 编辑

老大能不能上个实物图。和元件型号名等。很多东东。没常碰到。根本不认识!就那个220V的。如果可以的话。我想直接用个电源去改。
也是交流通过整流。变压。滤波成直流。
目前做了一个字。用了30个灯。  一个灯为2V     30个为60V 现在不知道用并联好。还是串联好。还有如何能做到让它恒流。是不是要上续电器?

还有老大说的。几路。也就是等于是特效吧。比如这个字要从上到下给个显示出来。或是从左到右。或是一下子全部闪出来。这样理解是不是正确?

回复 支持 反对

使用道具 举报

10#
发表于 2009-11-23 16:39:15 | 只看该作者 来自: 重庆 来自 重庆
做了一个字。用了30个灯。  一个灯为2V     30个为60V 现在不知道用并联好。
--------------------------------------------
你用的LED灯吧?需要个整流电路,建议用电容+电阻降压、限流,然后在给各LED串供电。
我上面那个电路相当于一个220V交流开关,负载是用的220V的彩灯串。
如果你要用LED做字,建议用新出的 柔性LED灯带,一个字一路,或者一个笔画一路 。

比如这个字要从上到下给个显示出来。或是从左到右。或是一下子全部闪出来。这样理解是不是正确?
-----------------------------------------------------------------------------
如果用LED点阵才能有这个效果。

回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图


芯片搜索

快速回复