proteus论坛|仿真论坛
直播中

张先生

9年用户 44经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

这是我用ATMEGA162仿真的数码管为什么不能运行求解答

[url=]图片[/url]
程序如下
#include
#include
int  SH_CP=PC0;
int  DS=PC1;
int  ST_CP=PC2;
int  SHU1=PC3;
int  SHU2=PC4;
int  SHU3=PC5;
int  SHU4=PC6;
int tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void delay()
{  
        int i,j,k;
        for(k=0;k<1;k++)
        for(i=0;i<50;i++)
        for(j=0;j<10;j++);
}


void Ser_IN(unsigned char Data)
{

        int j,i;
        for(i = 0; i < 8; i++)
        {
                PORTC&=~(1<                 j = (int)((Data & 0x80)/128);                       
                if(j==0)
                PORTC&=~(1<                 if(j==1)
                PORTC|=(1<                 Data <<= 1;
                PORTC|=(1<         }
}


void Par_OUT(void)
{
        PORTC&=~(1<         PORTC|=(1< }

void ShuMa(int BianMa)
{
                int i=0;
                PORTC|=(1<                 i=BianMa/1000;
                PORTC&=~(1<                 Ser_IN(tab);
                Par_OUT();
                delay();

                PORTC|=(1<                 i=BianMa/100%10;
                PORTC&=~(1<                 Ser_IN(tab);
                Par_OUT();
                delay();

                PORTC|=(1<                 i=BianMa/10%10;
                PORTC&=~(1<                 Ser_IN(tab);
                Par_OUT();
                delay();

                PORTC|=(1<                 i=BianMa%10;
                PORTC&=~(1<                 Ser_IN(tab);
                Par_OUT();
                delay();
}

main()
{       
        int k;
        PORTC=0x00;

        k=4192 ;
while(1)
        {       
                ShuMa(k);       
        }
}
我刚刚接触到AVR的单片机
        PORTC&=~(1<         PORTC|=(1<
我自己编译了 感觉没有任何问题
而且这段程序是我从51单片机程序改过来的
51上仿真没有任何问题求帮助。。谢谢了


  • QQ截图20150621164302.png

回帖(9)

张先生

2015-6-21 16:49:51
抱歉我很鶸 如果有简便的方法请提出,但是我始终觉得avr不能位操作。
让我很不习惯所以我使用上面的方法。
举报

武力戡乱

2015-6-21 17:19:46
设置端口为输出啊!
举报

张先生

2015-6-22 20:43:42
引用: 武力戡乱 发表于 2015-6-21 17:19
设置端口为输出啊!

  PORTC在 AVR里面就是整个pc口。一开始就定义了
而且不允许对位操作。
举报

武力戡乱

2015-6-23 00:42:32
引用: fofot1122 发表于 2015-6-22 20:43
PORTC在 AVR里面就是整个pc口。一开始就定义了
而且不允许对位操作。

  DDRA = 0xFF;
  PORTA = 0;
举报

张先生

2015-6-23 10:39:08
引用: 武力戡乱 发表于 2015-6-23 00:42
DDRA = 0xFF;
  PORTA = 0;

  PORTA = 0;就是对PA口8位全部赋值为0
DDRA是什么啊
举报

武力戡乱

2015-6-24 12:41:47
引用: fofot1122 发表于 2015-6-23 10:39
PORTA = 0;就是对PA口8位全部赋值为0
DDRA是什么啊

控制IO方向。
亲,是不是当51来用了!avr的io默认只有输入功能,不要控制寄存器才能输出,而51的c语言里面只要给1就可以输出弱高,并且此时可以做输入。
举报

张先生

2015-6-24 13:48:38
引用: 武力戡乱 发表于 2015-6-24 12:41
控制IO方向。
亲,是不是当51来用了!avr的io默认只有输入功能,不要控制寄存器才能输出,而51的c语言里面只要给1就可以输出弱高,并且此时可以做输入。

( ⊙o⊙ )哇。。。我错了  好像还真有这么会事,谢谢我在研究研究。
举报

张先生

2015-6-24 13:50:01
引用: fofot1122 发表于 2015-6-24 13:48
( ⊙o⊙ )哇。。。我错了  好像还真有这么会事,谢谢我在研究研究。

怪不得我完全不能驱动74hc595
举报

武力戡乱

2015-6-24 17:51:34
引用: fofot1122 发表于 2015-6-24 13:48
( ⊙o⊙ )哇。。。我错了  好像还真有这么会事,谢谢我在研究研究。

举报

更多回帖

×
20
完善资料,
赚取积分