切换到宽版
  • 2323阅读
  • 5回复

[AVR]求助,为什么我的全局变量要到11才会变成0了 [复制链接]

上一主题 下一主题
离线lsrly
 

发帖
92
M币
518
专家
0
粉丝
6
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2015-06-20
我想做个时钟,当设置时,设置位数码管闪烁,我是通过设置标志位segcs和闪烁标志位来做的,可是当我在 display时不能获得segcs的值
那位高人可以帮一下吗?

/*
* clock2.c
*
* Created: 2015/5/28 23:16:32
*  Author: Administrator
*/

#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
#define F_CPU 1000000UL
//unsigned char dis_segment[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //共阳0~F
unsigned char dis_segment[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //共阳0~F
unsigned char dis_select[]={0x04,0x08,0x10,0x20,0x40,0x80}; //共阳0~F
unsigned char buff[5]={0,0,0,0,0,0};
unsigned char flag=0,segcs=0,alram=0;
volatile signed char hour,minutes,second,ahour,aminutes,asecond;

void port_init(void)
{
        hour=12;
        minutes=12;
        second=00;
        PORTA=0xff;
        DDRA=0xff;
        PORTB=0xff;
        DDRB=0xff;
        PORTC=0xff;
        DDRC=0XFF;
        PORTD=0xff;
        DDRD=0xe3;
        SREG=0x00;
}
void display(signed char hour,signed char minutes,signed char second)
{

if (segcs==1)
{
    buff[0]=0;
    buff[1]=hour%10;
}
else
{
    buff[0]=hour/10;
    buff[1]=hour%10;
}    
    buff[2]=minutes/10;
    buff[3]=minutes%10;
    buff[4]=second/10;
    buff[5]=second%10;

    for(short i=0;i<6;i++)
    {
        PORTB=0xff;
        PORTB=dis_segment[buff];
        PORTC=dis_select;
        _delay_ms(2);
    }
    
}


void qudou(signed char hour,signed char minutes,signed char second)
{
    unsigned char i;
    for (i=0;i<15;i++)
    {
        display(hour,minutes,second);
    }
}


int main(void)
{
    port_init();
    
    unsigned char segcs;
    
    //TIMSK |=(1<<TOIE0);
    //SREG=0x80;
    SREG=0x80;
    TIMSK=0x04;
    TCNT1H=0x1A;
    TCNT1L=0x81;
    TCCR1B=0x03;
    while(1)
    {

        if (segcs!=0)
        {
            if(second>59)second=0;
            if(minutes>59)minutes=0;
            if(hour>23)hour=0;
            if(second<0)second=59;
            if(minutes<0)minutes=59;
            if(hour<0)hour=23;

        }
        else
        {
            if (second>59)
            {
                second=0;
                minutes++;
            }
            if (minutes>59)
            {
                minutes=0;
                hour++;
            }
            if (hour>23)
            {
                hour=0;
                minutes=0;
                second=0;
            }
        }
        display(hour,minutes,second);
        //+键功能
        if (PIND==0xFB)
        {
            qudou(hour,minutes,second);
            if(PIND==0xFB)
            {
                while(!(PIND==0xFB));
                if (segcs==1)
                {
                    hour++;
                }
                else if (segcs==2)
                {
                    minutes++;
                }
                else if (segcs==3)
                {
                    second++;
                }
                else
                {
                }
            }
        }
        
        //-键功能
        if (PIND==0xF7)
        {
            qudou(hour,minutes,second);
            if(PIND==0xF7)
            {
                while(!(PIND==0xF7));
                if (segcs==1)
                {
                    --hour;
                }
                else if (segcs==2)
                {
                    --minutes;
                }
                else if (segcs==3)
                {
                    --second;
                }
                else
                {
                }
            }
        }
        //选择键
                if (PIND==0xEF)
        {
            qudou(hour,minutes,second);
            if(PIND==0xEF)
            {
                SREG=0x00;
                //TIMSK=0x00;
                while(!(PIND==0xef));
                TIMSK=0x00;
                segcs++;
                if(segcs>3)alram=1;
                if(segcs>6)
                {
                    segcs=0;
                    SREG=0x80;
                    TIMSK=0x04;
                    TCNT1H=0x1A;
                    TCNT1L=0x81;
                    TCCR1B=0x03;
                }                        
                
            }
        }
        //按键结束
        

    }
}

ISR(TIMER1_OVF_vect)
{
    TCNT1H=0x1A;
    TCNT1L=0x81;
    second++;
    flag++;
}
离线xdsnet

发帖
1232
M币
5179
专家
8
粉丝
87
只看该作者 1楼 发表于: 2015-06-20
请登录后查看
本帖最近打赏记录:共1条打赏 ,M币+5
离线lsrly

发帖
92
M币
518
专家
0
粉丝
6
只看该作者 2楼 发表于: 2015-06-20
离线benli

发帖
33704
M币
6633
专家
91
粉丝
488
只看该作者 3楼 发表于: 2015-06-20
请登录后查看
离线inewman
发帖
10
M币
-491
专家
0
粉丝
0
只看该作者 4楼 发表于: 2015-06-25
请登录后查看
离线yfyyyfff

发帖
365
M币
1112
专家
10
粉丝
16
只看该作者 5楼 发表于: 2015-06-26
请登录后查看
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个