用proteus仿真,iccavr编程 为什么同一个程序在不通的工程中,分别下载到ATMEGA16里会有不同的效果?

#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int

uchar smg_du[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

uchar smg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf
};

uchar table[]={3,3,3,2,2,2};
void delay()
{
uint a;
for(a=0;a<300;a++);
}

void init()
{
DDRB=0XFF;
PORTB=0X00;
DDRA=0X18;
PORTA=0X00;

}

void display(uchar *p)
{
uchar i;
for(i=0;i<6;i++)
{
PORTB=smg_du[*p];
p++;
PORTA|=BIT(3);
PORTA&=~BIT(3);
PORTB=smg_we[i];
PORTA|=BIT(4);
PORTA&=~BIT(4);

delay();
}
}

/*void EEPROM_write(uint addr,uint adata)
{
SREG&=~BIT(7); //关总中断
while(EECR&BIT(EEWE));
EEAR=addr;
EEDR=adata;
EECR|=BIT(EEMWE);
EECR|=BIT(EEWE);
SREG|=BIT(7);

}

uchar EEPROM_read(uint addr)
{
uchar edata;
SREG&=~BIT(7); //关总中断
while(EECR&BIT(EEWE));
EEAR=addr;
EECR|=BIT(EERE);
edata=EEDR;
return edata;
}*/
void main()
{
//uchar j=0;
init();
//j=EEPROM_read(2); //0
//j++;
//EEPROM_write(2,j);
//table[1]=j;
while(1)
{
display(table);
}
}

以上为源代码,数码管的段选位选用的同一个IO,用573控制。
只在一个工程中编译后数码管亮,其他两个不亮。

第1个回答  2011-07-21

这个网址 你去看看嘛
追问

网址呢?

atmega16单片机在keil C51中怎么找不到
2.atmega16比较流行的编程软件有两个,一个是去AVR官网下载AVR STUDIO,这是官方的AVR编程软件,但是还要下载一个WINAVR软件,两个都要安装,配合使用;另一个是iccavr,初学者一般都用这款软件,百度搜一下,有的是

关于单片机学习,学了51,又学什么???【请高手和前辈指点】
软件方面方面, 51 单片机用的是 KEIL 软件,这个软件在学校图书馆软件下载和其他网站上都有,具体用法自己查找相关资料, AVR 的软件就比较多了,我用的是 CVAVR ,另外还有 ICCAVR 等多款编译软件,这要看个人喜好了,建议有了一定的 51 基础再学。另外就是烧写软件,烧写软件的作用就是将编译器生成的 HEX 文件烧写...

如何学好单片机?
硬件方面,首先是要有单片机,对于单片机有一点要注意, 51 单片机最好买 89S51 、 89S52 这两种型号,上面我所说的烧写程序是 ISP 方式,这两种单片机支持 ISP 下载,所以如果买其他型号的烧写程序可能会不太方便, AVR 单片机常用的就是 ATmega16L 其它型号的区别也不是很大,甚至有些兼容。至于单片机开发板,目前的价...

相似回答