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

2019-07-18 11:57发布

[url=]图片[/url]
程序如下
#include <avr/io.h>
#include <stdio.h>
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<<SH_CP);
                j = (int)((Data & 0x80)/128);                       
                if(j==0)
                PORTC&=~(1<<DS);
                if(j==1)
                PORTC|=(1<<DS);
                Data <<= 1;
                PORTC|=(1<<SH_CP);
        }
}


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

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

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

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

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

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

        k=4192 ;
while(1)
        {       
                ShuMa(k);       
        }
}
我刚刚接触到AVR的单片机
        PORTC&=~(1<<ST_CP);对pc2输出0
        PORTC|=(1<<ST_CP);对pc2 输出1

我自己编译了 感觉没有任何问题
而且这段程序是我从51单片机程序改过来的
51上仿真没有任何问题求帮助。。谢谢了


QQ截图20150621164302.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
fofot1122
1楼-- · 2019-07-18 14:45
抱歉我很鶸 如果有简便的方法请提出,但是我始终觉得avr不能位操作。
让我很不习惯所以我使用上面的方法。
武力戡乱
2楼-- · 2019-07-18 20:08
设置端口为输出啊!
fofot1122
3楼-- · 2019-07-18 21:41
 精彩回答 2  元偷偷看……
武力戡乱
4楼-- · 2019-07-19 01:04
fofot1122 发表于 2015-6-22 20:43
PORTC在 AVR里面就是整个pc口。一开始就定义了
而且不允许对位操作。

  DDRA = 0xFF;
  PORTA = 0;
fofot1122
5楼-- · 2019-07-19 04:54
武力戡乱 发表于 2015-6-23 00:42
DDRA = 0xFF;
  PORTA = 0;

  PORTA = 0;就是对PA口8位全部赋值为0
DDRA是什么啊
武力戡乱
6楼-- · 2019-07-19 07:48
fofot1122 发表于 2015-6-23 10:39
PORTA = 0;就是对PA口8位全部赋值为0
DDRA是什么啊

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

一周热门 更多>