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

📄 amend1.0.h

📁 电磁炉控制
💻 H
字号:
#define  uchar unsigned char
#define  uint  unsigned int
#define K1 0x01        //按键K0与PC0相连 启动键(start)
#define K0 0x02        //按键K1与PC1相连 调节键(adjust)
#define K6 BIT(6)      //按键K6与PC6相连 休眠键(sleep)
#define K7 BIT(7)      //按键K7与PC7相连 暂停键(pause)
#define dig0 (1<<6)    //推荐用这种形式,简单形象
#define dig1 (1<<7)
#define LED PORTD
#define LED1 PORTA

uchar BCD0, BCD1,m;
uchar sleep=0;
signed char i,j,k,f; 

uint Key_New,Key_val;
uchar Key_Pro,Key_time,Setup_time;

char segconv[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0xC0/*,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xbf*/}; 
//需要在库文件重新定义i,k,f变量

/********************************************************************
** 函数名称 :port_init()
** 函数功能 :端口初始化
** 入口参数 :无
** 出口参数 :无
********************************************************************/
 void port_init(void)                       // the initialization function
{
           PORTA = 0x00;             	
           DDRA  = 0xFF;                     
           PORTB = 0xFF;			
           DDRB  = 0xFF;                    
           PORTC = 0xFF;                     //set the default
           DDRC  = 0x00;                    
           PORTD = 0x00;                    
           DDRD  = 0xFF;                     
}

/********************************************************************
** 函数名称 :delay_ms()
** 函数功能 :短暂去抖延时函数
** 入口参数 :无
** 出口参数 :无
********************************************************************/
void delay_ms(unsigned int Time)
{
    unsigned char n=0;
    while(Time>0)
    {
        for (n=1;n<187;n++)
        {
            NOP();
        }
        Time--;
    }
}

/********************************************************************
** 函数名称: BinToBCD() 
** 功能描述: 预给值分位函数
** 入口参数 :预给数值
** 出口参数 :无
********************************************************************/
void BinToBCD(int data)      	        
{
           if(sleep) return;	
           BCD0=0;                           
           BCD1=0;			
           if(data>=10)				    
              {
                        BCD1=data/10;	
                        data=data%10;	
              }		
           BCD0=data;	
}

/********************************************************************
** 函数名称: dispseg() ;
** 功能描述: 按位显示八段LED数;
** 入口参数 :无
** 出口参数 :无
********************************************************************/
void dispseg(void)
{
           PORTB=segconv[BCD0];	     
           PORTA=dig0;                  
           delay_ms(10); 		   
           PORTB=segconv[BCD1];           
           PORTA=dig1;                   
           delay_ms(10); 	          
} 

/********************************************************************
** 函数名称: display() 
** 功能描述: 按所预给数显示
** 入口参数 :data	预给数值
** 出口参数 :无
********************************************************************/
void display(int data)            
{ 
         BinToBCD(data);           
                                    
         dispseg();
 }

 /**********************************************************
**函数名称:           state_bit()
**函数功能:           状态标志位函数
**入口参数:           无
**出口参数:           k
***********************************************************/
uchar state_bit(void)
{
    if((PINC&K0)==0)
    {
      delay_ms(5); 
      if((PINC&K0)==0)
      {
         k=!k;      	
            	if(k)	
               { 
                   SEI();
                   TCCR1B = 0x03; //★start Timer
                   PORTD|=0X80;   //代表启动加热
               }              
               else
               {
                   TCCR1B = 0x00; //★stop
                   PORTD&=~0X80;  //代表停止/暂停加热
               	}
      }
    }
    return(k);
}

//TIMER1 initialize - prescale:64
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1Hz
// actual value:  1.000Hz (0.0%)
void timer1_init(void)
{
 TCCR1B = 0x00; //stop
 TCNT1H = 0xC2; //setup
 TCNT1L = 0xF7;
 OCR1AH = 0x3D;
 OCR1AL = 0x09;
 OCR1BH = 0x3D;
 OCR1BL = 0x09;
 ICR1H  = 0x3D;
 ICR1L  = 0x09;
 TCCR1A = 0x00;
}

#pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
void timer1_ovf_isr(void)
{
 //TIMER1 has overflowed
 TCNT1H = 0xC2; //reload counter high value
 TCNT1L = 0xF7; //reload counter low value
 if(i>0)
  {
       i--; 
    if(i==0)
    {
         f=1;        //定时结束时,结束状态标志位置一
         TCCR1B = 0x00; //stop timer    
    } 
    else f=0;
  }
   if(i<0)             
	{
        i=0;
    }   
}

//TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 16Hz             
// actual value: 16.009Hz (0.1%)   
void timer0_init(void)
{
     TCCR0 = 0x00; //stop
     TCNT0 = 0xC3; //set count
     OCR0  = 0x3D;  //set compare
}

#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
    TCNT0 = 0xC3; //reload counter value
    Key_time++;
    if(m==1)      
    {             
        j++;
        if(j>=8)  
        {
            j=0;
            if(i>90)   
            {
                i=i%10;
                i-=10; 
            }
            i=i+10;
        }
    }
}

//call this routine to initialize all peripherals
void init_devices(void)
{
     //stop errant interrupts until set up
     CLI(); //disable all interrupts
     port_init();
     timer1_init();
     timer0_init();
     
     MCUCR = 0x00;
     GICR  = 0x00;
     TIMSK = 0x05; //timer interrupt sources
     SEI(); //re-enable interrupts
     //all peripherals are now initialized
}

⌨️ 快捷键说明

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