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

📄 main.i

📁 这是一个AVRM16的定时器制的例子,比较适合初学者.
💻 I
📖 第 1 页 / 共 2 页
字号:
                                        d=0x00;
                                if(display_bit==3)
                                        d=0x00; 
                        }
                        PORTA=d;
                        PORTB=shu_bit[display_bit]&LED; 
                        display_bit+=1;
                        if(display_bit>=4)
                        display_bit=0; 
                        show_add=0;  
                } 
                if(mode==3)
                {
                        PORTC=PORTC|0x01;//不锁    
                        if(flash_add<800)
                        {       
                                if(display_bit==0)
                                        d=shu_data[(sethour%100)/10];
                                if(display_bit==1)  
                                        d=shu_data[sethour%10]|0x80;  
                        }   
                        if(flash_add>800)
                        {       
                                if(display_bit==0)
                                        d=0x00;
                                if(display_bit==1)  
                                        d=0x00|0x80;  
                        }    
                        if(display_bit==2)
                                d=shu_data[(setmin%100)/10];
                        if(display_bit==3)
                                d=shu_data[setmin%10]; 
                        PORTA=d;
                        PORTB=shu_bit[display_bit]&LED; 
                        display_bit+=1;
                        if(display_bit>=4)
                        display_bit=0; 
                        show_add=0;  
                }                               
        }
}
// CodeVisionAVR C Compiler
// (C) 1998-2001 Pavel Haiduc, HP InfoTech S.R.L.

// I/O registers definitions for the ATmega16






unsigned	   int     setadd=0; 
unsigned	   int     setadd=0; 
unsigned	   int     donwadd=0;
unsigned	   int     upadd=0;
void    key(void)
{       
       if(!(PINC & (1<<5))&&(PINC & (1<<3))&&(PINC & (1<<4)))
       {     
                setadd+=1;     
                if(setadd>30000) 
                        setadd=30001; 
                if(setadd==29000)                  //三秒不放
                {
                    if(mode!=0)
                                mode+=1;
                    if(mode>=4)
                        mode=2;
                }
       }
       else     
       {
                if((setadd>199)&&(setadd<25000)) //设置键 
                {
                        if(mode!=1)
                                mode=1;
                        else    mode=0;   
                }
                setadd=0; 
       }
       if(!(PINC & (1<<3))&&(PINC & (1<<5))&&(PINC & (1<<4)))  
       {
                upadd+=1;
                if(upadd>=30000)        //快加键
                {       
                        rapidness+=1;
                        if(rapidness>=2000)
                        {       if(mode==2) 
                                {
                                        setmin+=1; 
                                        if(setmin>60)
                                                setmin=0; 
                                } 
                                if(mode==3) 
                                {
                                        sethour+=1; 
                                        if(sethour>99)
                                                sethour=0;
                                }
                                rapidness=0;  
                                flash_add=0;
                        }
                        upadd=30001;
                }        
       } 
       else     
       {       
                if((upadd>199)&&(upadd<25000))     //加键
                {
                        if(mode==2) 
                        {
                                setmin+=1; 
                                if(setmin>60)
                                        setmin=0; 
                        } 
                        if(mode==3) 
                        {
                                sethour+=1; 
                                if(sethour>99)
                                        sethour=0;
                        }
                }
                upadd=0;  
       }
       if(!(PINC & (1<<4))&&(PINC & (1<<3))&&(PINC & (1<<5)))  
       {
                donwadd+=1;
                if(donwadd>30000)    //快减
                {       rapidness+=1;
                        if(rapidness>=2000)
                        {
                                if(mode==2) 
                                {       
                                        if(setmin==0)
                                                setmin=60;
                                        if(setmin>0)
                                                setmin-=1;  
                                }
                                if(mode==3) 
                                {       
                                        if(sethour==0)
                                                sethour=100;
                                        if(sethour>0)
                                                sethour-=1;    
                                } 
                                rapidness=0;  
                                flash_add=0;
                        }            
                        donwadd=30001;                     
                }
     
       }
       else     
       {
                if((donwadd>199)&&(donwadd<25000))     //减键
                {
                        if(mode==2) 
                        {       
                                if(setmin==0)
                                        setmin=60;
                                if(setmin>0)
                                        setmin-=1;  
                        }
                        if(mode==3) 
                        {       
                                if(sethour==0)
                                        sethour=100;
                                if(sethour>0)
                                        sethour-=1;    
                        }
                }
                donwadd=0;    
       }
       if((!(PINC & (1<<5)))&&(!(PINC & (1<<3))))  //开始
       {
                b_time=1; 
                LED=0xff;  
       } 
       if((!(PINC & (1<<5)))&&(!(PINC & (1<<4))))  //暂停
       {
                b_time=0;
                LED=0xef;  
                b_sec=1; 
       } 
       if((!(PINC & (1<<3)))&&(!(PINC & (1<<4))))  //停止
       {        
                hour=0;
                min=0;
                sec=0;
                b_time=0;
                LED=0xef;  
                b_sec=1; 
       }   
}
unsigned	   int     time_sec_add=0;
//******************************中断函数************************************   
//定时器1中断函数
interrupt [9] void timer1_capt_isr(void)//1mS
{
	TCNT1H = 0xE3; //reload counter high value
	TCNT1L = 0x34; //reload counter low value 
	flash_add+=1;
	if(flash_add>=1000)
	        flash_add=0;
	if(b_time)
	        time_sec_add+=1;
	if(time_sec_add>=1000)   //1秒
	{       b_sec=~b_sec;  
	        sec+=1;
	        time_sec_add=0;
	}
	if(sec>=60)              //1分
	{     
	        min+=1;
	        sec=0;
	} 
	if(min>=60)             //1小时
	{
	        hour+=1;   
	        min=0;
	}             
        if(hour>99)
        {
                hour=99; 
        } 
        if((hour>=sethour)&&(min>=setmin))
        {
                b_time=0;
                b_sec=1;
                LED=0xef; 
        }
}     

//******************************主函数************************************ 
void main(void)
{       
	init_devices(); 
	sethour=   eeprom_shu[0];
	setmin=    eeprom_shu[1];
	hour=   eeprom_shu[2];
	min=    eeprom_shu[3];
	sec=    eeprom_shu[4];
	LED=    eeprom_shu[5]; 
	b_time=    eeprom_shu[6]; 
	while (1)
	{
		#asm("wdr")  
		if(!(PINC & (1<<6)))  
		{
                        show(); 
                        key();
                }
                else
                {       
                        PORTA=0X00;
                        eeprom_shu[0]=sethour;
                        eeprom_shu[1]=setmin;
                        eeprom_shu[2]=hour;
                        eeprom_shu[3]=min;
                        eeprom_shu[4]=sec; 
                        eeprom_shu[5]=LED; 
                        eeprom_shu[6]=b_time; 
                }
                
	}               
}

⌨️ 快捷键说明

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