今天看了个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";
}
}
用户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);
}
}