搜索
bottom↓
回复: 2

ATmega16 LED点阵显视

[复制链接]

出0入0汤圆

发表于 2011-12-22 11:07:32 | 显示全部楼层 |阅读模式
/***********************
** 函数名称: 16*16 led点阵从下至上滚动显视汉字
** Chip type : ATmega16
** Clock frequency : 1.000000 MHz
** 功能描述: 低位在前,阳码,逐行扫描(从上到下),16*16
** 输 入:
** 输出   : 0:失败 1:成功
** 全局变量: 无
** 调用模块:
** 说明:
** 注意:
********************/
/*********************************************************************************************************
**                       16*16 led点阵软件
**                       (c) Copyright 2011-12-21, GaoYunHe
**                             All Rights Reserved
**
**                                 V1.0.0
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名:16*16 led点阵软件
**创   建   人: 何高云
**最后修改日期: 2011-12-21
**描     述: 74LS164  
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 何高云
** 版 本: V1.00
** 日 期: 2011-12-21
** 描 述: 原始版本
** QQ553473438
*******************************************************/

#include <avr/io.h>
#include <util/delay.h>
#define uchar  unsigned char
#define uint   unsigned int

#define row1  PORTA
#define row2  PORTB
#define line1 PORTC
#define line2 PORTD

void init_drive()
  {
    DDRA=0XFF; PORTA=0X00;
        DDRB=0XFF; PORTB=0X00;
    DDRC=0XFF; PORTC=0X00;
        DDRD=0XFF; PORTD=0X00;
  }


void delay_us(uint x)
{
   while(x--);
}

void delay_ms(uint x)
{
   uchar t;
   while(x--)
   for(t=0;t<120;t--)
     {
           ;
         }
}

uchar const table[]=
{

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0x7F,0xFF,0x01,0xC0,0x7F,0xFF,0x07,0xF0,
0x77,0xF7,0x07,0xF0,0x77,0xF7,0x07,0xF0,
0x7F,0xEF,0x01,0xC0,0xFF,0xDF,0x6F,0xFF,
0xEB,0xEE,0xEB,0xDB,0x19,0xD8,0xFF,0xFF,//"惠",

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xEF,0xDF,0xEF,0xDE,0xEF,0xDE,0xEF,0xDE,
0xEF,0xDC,0xCD,0xDA,0xAD,0xDA,0xAD,0xD6,
0xEE,0xD6,0xEF,0xDE,0xEF,0xDE,0xF7,0xDE,
0xF7,0xDE,0xFB,0xDE,0xFB,0xDE,0xFD,0xDF,//"州"

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
};

int main()
  {             
    uchar i=0,j=0;
        uint t=0;
        init_drive();
     while(1)
         {
          for(j=0;j<48;j++)        // (16/字)*(N字+1)
           {
            for(t=0;t<50;t++) //移动延时(移动速度)
             {
              for(i=0;i<16;i++)
               {
                 row1=table[j*2+i*2];
                     row2=table[j*2+i*2+1];
                     if(i<8)    //扫描字的上半部位                  
                      line1=(0x80>>i);          
                     else                 //扫描字的下半部位
                      line2=(0x80>>(i-8));

                     _delay_us(100);
                     line1=0X00;          //消隐
                     line2=0x00;        //消隐
                  }                  
                }
                }               
         }
  }  


//----------------------单字显视----------------------------------
/*
uchar const table[]=
{

0x7F,0xFF,0x01,0xC0,0x7F,0xFF,0x07,0xF0,
0x77,0xF7,0x07,0xF0,0x77,0xF7,0x07,0xF0,
0x7F,0xEF,0x01,0xC0,0xFF,0xDF,0x6F,0xFF,
0xEB,0xEE,0xEB,0xDB,0x19,0xD8,0xFF,0xFF,//"惠",
};

int main()
  {             
    uchar i;
          init_drive();
     while(1)
         {
          for(i=0;i<16;i++)
            {
              row1=table[i*2];
                  row2=table[i*2+1];
                  if(i<8)                          //扫描字的上半部位
                    line1=(0x80>>i);
                  else                                        //扫描字的下半部位
                    line2=(0x80>>(i-8));

                  _delay_ms(2);
                  line1=0X00;
                  line2=0X00;
                  }       
         }
  }
          
*/

点击此处下载 ourdev_706620S1IMGX.rar(文件大小:17K) (原文件名:1616_led点阵.rar)

出0入0汤圆

发表于 2012-1-9 19:59:57 | 显示全部楼层
希望这样的“烂”代码以后不要出现在我的专栏中,会误人子弟的。

出0入0汤圆

发表于 2012-1-10 20:08:44 | 显示全部楼层
"函数名称: 16*16 led点阵从下至上滚动显视汉字 "

it will work.

the obvious downside is that its execution depends on the main() loop. and it may not be fast enough or it may not be uniform enough.

a better approach is to rewrite the display portion of the code into a routine and hook it to a timer isr. that way, the display is executed periodically, without any manual intervention.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 12:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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