打印

8*8LED点阵 扫描问题!!

[复制链接]
2087|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
funfactory|  楼主 | 2011-5-13 21:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
funfactory|  楼主 | 2011-5-13 21:34 | 只看该作者
研究了两天led点阵,貌似懂了,坐骑实物来发现自己什么都不懂啊!!

使用特权

评论回复
板凳
NE5532| | 2011-5-13 21:36 | 只看该作者
一行程序,能懂者,仙人也。

使用特权

评论回复
地板
funfactory|  楼主 | 2011-5-13 23:24 | 只看该作者
#include <reg52.h>
typedef  unsigned char   uint8;
typedef  unsigned int    uint16;
typedef  unsigned long   uint32;  

code uint8 graph[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
                                          0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF,
                                          0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,
                                          0xFF,0x99,0x99,0x99,0x99,0x81,0xC3,0xFF,
                                          0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
                                          };
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;

uint8 i= 0,counter = 0;


void timer1_init()
{
        TMOD |= 0x10;
        TMOD &= 0xdf;  
        TH1   = 0xFC;
        TL1   = 0x67;
        TR1   = 1;
}
void int_init()
{
        ET1 = 1;
        EA  = 1;
}
void refresh_led()
{
          static uint8 j = 0;
                switch(j)
           {
                   case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;break;
                case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;break;
                case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;break;
                case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;break;
                case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;break;
                case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;break;
                case 6: ADDR0 = 0;ADDR1 = 1;ADDR2 = 1;break;
                case 7: ADDR0 = 1;ADDR1 = 1;ADDR2 = 1;break;
                default: break;
                }
                P0 = graph[i + j];
                if(7 == j++) j = 0;
               
       
}

main()
{
        ENLED = 0; ADDR3 = 0;
        timer1_init();
        int_init();
        while(1);
       
}
void interrupt_timer1()        interrupt 3
{
          TH1 = 0xFC;
          TL1 = 0x67;
          counter++;
          if(counter == 200)
             {
                         counter = 0;
                        i++;
                        if(i>=32){i=0;}
                 }
          refresh_led();
                                                 
}

使用特权

评论回复
5
szshawn2010| | 2011-5-14 16:34 | 只看该作者
关注一下。

使用特权

评论回复
6
funfactory|  楼主 | 2011-5-15 13:09 | 只看该作者
怎么没人来回答一下啊!!

使用特权

评论回复
7
funfactory|  楼主 | 2011-5-15 13:09 | 只看该作者
大家不要太谦虚啊,知道什么说什么。一起讨论啊!!

使用特权

评论回复
8
kyy173| | 2011-5-15 13:15 | 只看该作者
不错

使用特权

评论回复
9
joyme| | 2011-5-16 09:24 | 只看该作者
只是一个移动图像(文字)显示

使用特权

评论回复
10
ayb_ice| | 2011-5-16 10:41 | 只看该作者
本帖最后由 ayb_ice 于 2011-5-16 10:44 编辑

就是行,列嘛
做成二维数组你就懂了
不过算法好象不对,应该是i*8+j,不过也没有仔细研究具体代码,随便说说

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

68

帖子

1

粉丝