不知道为什么数码管亮不了,程序不能运行,求懂avr的大神帮助.附开发板原理图和atmega16a数据手册

2019-07-15 10:06发布

/****以下是一个用数码管显示的简易电子时钟,只有分秒****/

#include<iom16v.h>
#include<macros.h>

#define uchar unsigned char
#define uint  unsigned int

uchar smg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};

uchar sec,min;
uint flag=0;

/************中断初始化***************/
void init(void)                //两毫秒延时
{
        TCCR0|=(1<<CS00)|(1<<CS02);//普通计数模式,1024分频       
        TCNT0=0Xf0;                //附计算初值
        tiMSK|= (1<<TOIE0);    //BIT(0);        //开使能TOIE0=1
        SREG|=  BIT(7);                //开总中断
}

/*************数码管显示函数***************/
void display(uchar sum1,uchar sum2)
{
        static uchar i;
        static uchar temp[4];
       
        temp[0] = smg_data[sum1/10];//数码管的进制
        temp[1] = smg_data[sum1%10];
        temp[2] = smg_data[sum2/10];
        temp[3] = smg_data[sum2%10];
       
        PORTC=0Xff;                //消影
        PORTD&=~0X04<<i;//位选
        PORTC=temp[i];
       
        if(++i>=4){i=0;}
}

/******************主函数********************/
void main(void)
{       
        DDRC=0XFF;
        DDRD=0XFF;
        PORTC=0Xff;
        PORTD=0Xff;
        DDRB|=BIT(0);
        PORTB|=BIT(0);//初始化
        init();
       
        while(1)
        {
               
                if(++flag==500)        //2ms重复500次,1秒
                {
                flag=0;
                        if(++sec>=60)
                        {
                                sec=0;
                                if(++min>=60){min=0;}
                        }
                }
        display(min,sec);
        }
       
}

/***********中断函数**************/
#pragma interrupt_handler timer0_isr:10

void timer0_isr(void)
{
        TCNT0=0Xf0;
        flag++;
}

AVR的学习开发板.pdf 下载积分: 积分 -1 分
57.02 KB, 下载次数: 13, 下载积分: 积分 -1 分
ATmega16_cn.PDF 下载积分: 积分 -1 分
2.78 MB, 下载次数: 3, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。