⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keymax7219__.c

📁 MAX7219AVR单片机的驱动 编译环境CAVR 用于MAX7219串行驱动8位数码管
💻 C
📖 第 1 页 / 共 2 页
字号:
    }
    //delay_ms(25);
    led_write(0x05,data_temp2%10);
    led_write(0x06,data_temp2/10);
  }
  
  if(flag_option==1 && flag_freq==1)
  {
    if(++data_temp3>=20)
    {
        data_temp3=20;
    }
    //delay_ms(25);
    led_write(0x03,data_temp3%10);
    led_write(0x04,data_temp3/10);
  }
 } 
  
 
 void key_4(void)
 {  
    flag_time_sub=flag_option && flag_time && flag_sub;
    flag_N_sub=flag_option & flag_N & flag_sub;
    flag_freq_sub=flag_option & flag_freq & flag_sub;
    
    if(flag_option==1 && flag_time==1)
    {
        if((data_temp1--)<=0)
        {
            data_temp1=0;
        }
        //delay_ms(25);
        led_write(0x07,data_temp1%10);
        led_write(0x08,data_temp1/10);
    }    
    
    if(flag_option==1 && flag_N==1)
    {
        if((data_temp2--)<=0)
        {
            data_temp2=0;
        }
        //delay_ms(25);
        led_write(0x05,data_temp2%10);
        led_write(0x06,data_temp2/10);
    }    
    
    if(flag_option==1 && flag_freq==1)
    {
        if((data_temp3--)<=0)
        {
            data_temp3=0;
        }
        //delay_ms(25);
        led_write(0x03,data_temp3%10);
        led_write(0x04,data_temp3/10);
    }
 }                                          
             
                   
//系统初始化函数                                                                                                  
void sys_initial(void)										                                             
{                                                                                                 
		PORTA=0xC3;                                     //PA7,PA6口为输入,PA0,PA1为输入,内部上拉使能
        DDRA=0xC0;
        
        PORTB=0x1F;                                     //PB0~PB7 为输出
        DDRB=0xFF; 
        
        PORTC=0xFF;                                     //PC0~PC7为输入
        DDRC=0x00;
        
        PORTD=0x30;                                     //PD4,PD5为输出
        DDRD=0x30;
        
        TCCR0=0x07;                                     //外部计数方式,上升沿计数
        TCNT0=0x00;
        OCR0=0x00;
        
        TCCR1A=0xB3;                                    //两路PWM,OCR1A,OCR1B
        TCCR1B=0x03;
        TCNT1H=0x00;
        TCNT1L=0x00;
        ICR1H=0x00;
        ICR1L=0x00;
        OCR1AH=0xfb;
        OCR1AL=0x83;
        OCR1BH=0xbf;
        OCR1BL=0x38;
        
        ASSR=0x00;
        TCCR2=0x0B;
        TCNT2=0x00;
        OCR2=0x7C;
        
        TIMSK=0x00;
        
        PORTD.6=1;                                     //禁止TIMER中断
        #pragma optsize-
            WDTCR=0x1E;
            WDTCR=0x0E;
        #ifdef _OPTIMIZE_SIZE_
        #pragma optsize+
        #endif
}

//max7219初始化函数
void led_initial(void)        
{                                                                                    
    led_write(0x09,0xff);							    //译码模式                                                  
    led_write(0x0a,0x0a);							    //强度设置                                                  
    led_write(0x0b,0x07);							    //全扫描模式                                                
    led_write(0x0c,0x01);							    //非关断模式                                                
    led_write(0x0f,0x01);							    //测试模式                                                  
		                                                                                              
    delay_ms(1000);                                                                               
    led_write(0x0f,0x00);							    //正常模式
				                                                  
}

//N值计算显示函数
void N_display(void)
{
    int adc_dis;
    adc_dis=5*pn_temp;
    led_write(0x01,adc_dis%10);
    led_write(0x02,adc_dis/10);
 }   

// rimer0 CTC中断函数
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{   
    //#asm("sei");                                            //开全局中断允许中断嵌套
    freq_new=TCNT0;
    time_1ms_ok=1;
    if(++time_1ms>=10)
    {
        time_20ms_ok=1;                                     //10ms到
    }    
        
}

// Timer 1 OCR1A
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{   
    pwm_temp1=OCR1AH;
    pwm_temp2=OCR1AL;
    OCR1AL=pwm_new1;
    OCR1AH=pwm_new2;
}

// Timer 1 OCR1B
interrupt [TIM1_COMPB] void timer1_compb_isr(void)
{
    pwm_temp3=OCR1BH;
    pwm_temp4=OCR1BL;
    OCR1BL=pwm_new3;
    OCR1BH=pwm_new4;
}

// ADC转换完成中断函数
interrupt [ADC_INT] void adc_isr(void)
{
   int adc_templ,adc_temph;
   adc_templ=ADCL;
   adc_temph=ADCH;
   pn_temp=(adc_temph<<8)+adc_templ;
}    
        
            
//主函数
void main(void)
{   
    sys_initial();
    led_initial();
    led_write(0x01,0x80);                                                        //led扫描显示检测
    led_write(0x02,0x80);
    led_write(0x03,0x80);
    led_write(0x04,0x80);
    led_write(0x05,0x80);
    led_write(0x06,0x80);
    led_write(0x07,0x80);
    led_write(0x08,0x80);
    
    TIMSK=0x80;                                                                //开TIMER2 CTC中断,进行按键扫描和频率检测
    #asm("sei");
    while (1)
    {    
        if(time_20ms_ok)
        {   
            switch(key_read())
            {
                case 1: key_1();
                break;
                case 2: key_2();
                break;
                case 3: key_3();
                break;
                case 4: key_4();
                break;
                case 5: key_5();
                break;
                case 6: key_6();
                break;
                case 7: key_7();
                break;
                case 8: key_8();
                break;  
            }
            time_20ms_ok=0;
        }    
       if(time_1ms_ok)
       {
            if(freq_new>=freq_old) freq=freq+freq_new-freq_old;
            else freq=freq+(255-freq_old+freq_new);
            freq_old=freq_new;
            if(++time_100ms>=100)
            {
                time_100ms=0;
                led_write(0x01,freq%10);
                led_write(0x02,freq/10);
                freq=0;
            }
            time_1ms_ok=0;
      }
      N_display();         
   }
} 
  
                            
                   
        
                    
               
              
                         

                    

      
     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -