原创 AVRMEGA16跑马灯仿真程序

2007-9-27 22:18 5064 4 5 分类: MCU/ 嵌入式

今天看了个AVRMEGA16跑马灯程序,把它放到我的仿真里去玩玩,有个百思不得其解的问题是程序无法循环。进入第三项就死循环没有出来了。 那位指点一下呢?!!


/*--------------------------------------------------*/
/*     AVR系统的处理器为:   ATMega16               */
/*     AVR系统的晶振频率:   8.0000 Mhz             */
/*--------------------------------------------------*/


#include <iom16v.h>
#include <macros.h>
#include "lcd.h"
#include "delay.h"



//-----------------------------------------------------------
//主函数
//-----------------------------------------------------------



void main(void)
{


   LCD16xx_init();
   LCD16xx_clr();                     //显示清屏
   delay_nms(1);
   LCD16xx_write_string(3,0,"Welcome to");
   LCD16xx_write_string(1,1,"SEE MY WORK");
   LCD16xx_write_string(4,2,"By PA2792");
   LCD16xx_write_string(3,3,"2007.09.13");
   delay_nms(100);
   LCD16xx_clr();                     //显示清屏
   delay_nms(1);


   while(1)
   {  lcd();
      IOPOUT();
      ledout();//只按顺序运行到这里就没有重新从“lcd();”开始了循环。
  
}
}


 


而当不运行“ledout()”,程序可以循环。是否是因为“pmd.c"


写错了呢?


#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
void ledout( void )
{
  unsigned char  led[]={0x00,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0x7e,0xe7,0xdb,0xbd,0x7e,0xbd,0xf7,0xef,0xdf,0xbf,0x7f,
  0xbf,0xdf,0xef,0xfe,0xfd,0xfb};


 unsigned char i;
    PORTB="0xFF"; // Give PORTB and the User LEDs an initial startvalue
    DDRB="0xFF"; // Set PORTB as output
 while(1)                      //是否这里弄错了呢?该怎么做呢?
 {
 PORTB=led;
   i++;
   if(i==45)
          i="0";
}
}


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1010551 2007-9-29 20:55

把程序改为如下就可以了。原来我使用了WHILE(1)死循环。那么我改为循环多少次就可以了定义一个变量,然后让他循环多少次,就可以了UCHAR M

FOR(M=0;M<=100,I++)//M<=100,循环100次//

#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
void ledout( )
{
   uchar  led[]={0x00,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0x7e,0xe7,0xdb,0xbd,0x7e,0xbd,0xf7,0xef,0xdf,0xbf,0x7f,
  0xbf,0xdf,0xef,0xfe,0xfd,0xfb};

    uchar i;
 uchar m;
    PORTB="0xFF"; // Give PORTB and the User LEDs an initial startvalue
    DDRB="0xFF"; // Set PORTB as output
 delay_nms(10);
  for(m=0; m<=20;m++)
  {
 PORTB=led[i];
   i++;
   if(i==45)
          i="0";
 delay_nms(100);
   }
 
}

 

相关推荐阅读
用户1010551 2013-03-23 23:28
圣经故事
圣经故事是生活亚、非、欧三大洲交界处的古代希伯来民族数千年历史长河中集体智慧的结晶,也是犹太教、基督教(包括天主教、东正教和新教)共同的正式经典。它构成了西方社会两千年来的文化传统和特点,并影响到世...
用户1010551 2013-03-22 18:12
评论:@longhaihai's Blog 博客中提到的“【转】开关电源输出纹波的测量和抑制”
很好的文章。...
用户1010551 2013-03-20 23:06
评论:@asus119's Blog 博客中提到的“【博客大赛】电源纹波调试”
很好的文章。...
用户1010551 2013-01-22 20:49
【博客大赛】DIY移动电源!
  移动电源现在市场烂如泥了,不知道大家也没有想自己DIY一个移动电源? 移动电源就是一个简单的DC  BOOOST升压电路。 一个网友的移动电源电路原理图,自动检测USB拔...
用户1010551 2013-01-22 13:41
评论:@wang1jin's Blog 博客中提到的“FM锁相环PLL立体声5W发射机中文全套资料!!!”
bh17无线耳机的制作方案...
用户1010551 2013-01-22 09:28
去做最想做的事 - 黑幼龙
去做最想做的事 - 黑幼龙 欧美有一种说法,那就是,在生命的末期,把你最想做的事写下来,然后一项一项去尝试。想不到的是,很多原来看起来不可能的愿望,后来竟真的奇迹般的实现了。 这种愿...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /3 下一条