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

📄 mcu1.i

📁 用atmega128单片机做的示波器
💻 I
字号:

// CodeVisionAVR C Compiler
// (C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L.

// I/O registers definitions for the ATmega8


#pragma used+
sfrb TWBR=0;
sfrb TWSR=1;
sfrb TWAR=2;
sfrb TWDR=3;
sfrb ADCL=4;
sfrb ADCH=5;
sfrw ADCW=4;      // 16 bit access
sfrb ADCSRA=6;
sfrb ADMUX=7;
sfrb ACSR=8;
sfrb UBRRL=9;
sfrb UCSRB=0xa;
sfrb UCSRA=0xb;
sfrb UDR=0xc;
sfrb SPCR=0xd;
sfrb SPSR=0xe;
sfrb SPDR=0xf;
sfrb PIND=0x10;
sfrb DDRD=0x11;
sfrb PORTD=0x12;
sfrb PINC=0x13;
sfrb DDRC=0x14;
sfrb PORTC=0x15;
sfrb PINB=0x16;
sfrb DDRB=0x17;
sfrb PORTB=0x18;
sfrb EECR=0x1c;
sfrb EEDR=0x1d;
sfrb EEARL=0x1e;
sfrb EEARH=0x1f;
sfrw EEAR=0x1e;   // 16 bit access
sfrb UBRRH=0x20;
sfrb UCSRC=0X20;
sfrb WDTCR=0x21;
sfrb ASSR=0x22;
sfrb OCR2=0x23;
sfrb TCNT2=0x24;
sfrb TCCR2=0x25;
sfrb ICR1L=0x26;
sfrb ICR1H=0x27;
sfrw ICR1=0x26;   // 16 bit access
sfrb OCR1BL=0x28;
sfrb OCR1BH=0x29;
sfrw OCR1B=0x28;  // 16 bit access
sfrb OCR1AL=0x2a;
sfrb OCR1AH=0x2b;
sfrw OCR1A=0x2a;  // 16 bit access
sfrb TCNT1L=0x2c;
sfrb TCNT1H=0x2d;
sfrw TCNT1=0x2c;  // 16 bit access
sfrb TCCR1B=0x2e;
sfrb TCCR1A=0x2f;
sfrb SFIOR=0x30;
sfrb OSCCAL=0x31;
sfrb TCNT0=0x32;
sfrb TCCR0=0x33;
sfrb MCUCSR=0x34;
sfrb MCUCR=0x35;
sfrb TWCR=0x36;
sfrb SPMCR=0x37;
sfrb TIFR=0x38;
sfrb TIMSK=0x39;
sfrb GIFR=0x3a;
sfrb GICR=0x3b;
sfrb SPL=0x3d;
sfrb SPH=0x3e;
sfrb SREG=0x3f;
#pragma used-

// Interrupt vectors definitions



// CodeVisionAVR C Compiler
// (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.


#pragma used+

void delay_us(unsigned int n);
void delay_ms(unsigned int n);

#pragma used-

// CodeVisionAVR C Compiler
// (C) 1998-2003 Pavel Haiduc, HP InfoTech S.R.L.

// Prototypes for standard I/O functions


// CodeVisionAVR C Compiler
// (C) 1998-2002 Pavel Haiduc, HP InfoTech S.R.L.

// Variable length argument list macros



typedef char *va_list;





#pragma used+

char getchar(void);
void putchar(char c);
void puts(char *str);
void putsf(char flash *str);


char *gets(char *str,unsigned int len);

void printf(char flash *fmtstr,...);
void sprintf(char *str, char flash *fmtstr,...);
void vprintf (char flash * fmtstr, va_list argptr);
void vsprintf (char *str, char flash * fmtstr, va_list argptr);
signed char scanf(char flash *fmtstr,...);
signed char sscanf(char *str, char flash *fmtstr,...);




                                   

            


#pragma used-

#pragma library stdio.lib


/*
CodeVisionAVR C Compiler
Prototypes for mathematical functions

Portions (C) 1998-2001 Pavel Haiduc, HP InfoTech S.R.L.
Portions (C) 2000-2001 Yuri G. Salov
*/



#pragma used+

unsigned char cabs(signed char x);
unsigned int abs(int x);
unsigned long labs(long x);
float fabs(float x);
signed char cmax(signed char a,signed char b);
int max(int a,int b);
long lmax(long a,long b);
float fmax(float a,float b);
signed char cmin(signed char a,signed char b);
int min(int a,int b);
long lmin(long a,long b);
float fmin(float a,float b);
signed char csign(signed char x);
signed char sign(int x);
signed char lsign(long x);
signed char fsign(float x);
unsigned char isqrt(unsigned int x);
unsigned int lsqrt(unsigned long x);
float sqrt(float x);
float floor(float x);
float ceil(float x);
float fmod(float x,float y);
float modf(float x,float *ipart);
float ldexp(float x,int expon);
float frexp(float x,int *expon);
float exp(float x);
float log(float x);
float log10(float x);
float pow(float x,float y);
float sin(float x);
float cos(float x);
float tan(float x);
float sinh(float x);
float cosh(float x);
float tanh(float x);
float asin(float x);
float acos(float x);
float atan(float x);
float atan2(float y,float x);

#pragma used-
#pragma library math.lib


bit	time_1ms_ok;
unsigned long int time0_old,time0_new,freq_time;
unsigned long int freq;
unsigned char eep,z,i,p[9]={0,0,1,2,3,4,5,6,7},w[9]={0,1,2,3,4,5,6,7,8},tri=0,hold=0,fr,kr,zhi;
unsigned char e[9]={0b00000011,0b00000001,0b00000101,0b00000010,0b00000000,0b00000100,0b00001010,0b00001000,0b00001100};
interrupt [4] void timer2_comp_isr(void)
{
	time0_new = TCNT1;			// 1ms到,记录当前T/C0的计数值
	time_1ms_ok = 1; 
}
 spi_out(unsigned char j)
{  
  unsigned char u;
  PORTB.2=0;
  for(u=0;u<8;u++)
       { 
         if(j&0b10000000)
           {
           PORTB.3=1;
           }
          else
           {
           PORTB.3=0;
           }
         delay_us(1);
         PORTB.5=1;
         delay_us(1);
         PORTB.5=0;
         delay_us(1);
         j<<=1;
       } 
       delay_us(1);
   PORTB.2=1;

}
 
void freq_to_disbuff()
{            if(fr==0)
            {
            freq=freq*4;
            }      
             eep=freq>>24;//取频率高8位  
             spi_out(eep);
             delay_us(10);
             eep=(freq>>16)&0xff; 
             spi_out(eep);
             delay_us(10);
             eep=(freq>>8)&0xff;
             spi_out(eep); 
             delay_us(10);             
             eep=freq&0xff;//取频率低8位
             spi_out(eep); 
             delay_us(10);
             spi_out(w[i]);
             delay_us(10);           
             spi_out(tri);
             delay_us(10);
             spi_out(hold);
             delay_us(10); 
             spi_out(kr);
             delay_us(10);
             spi_out(zhi);
             delay_us(10);
             } 

 
void time()
{
 if (time_1ms_ok)
    	{	// 累计T/C0的计数值
    		if (time0_new >= time0_old) freq = freq + (time0_new - time0_old);
    		else freq = freq + (65536 - time0_old + time0_new);
    		time0_old = time0_new;
    		if (++freq_time >=125)
    		{
    			freq_time = 0;	
    					// 1000ms到,
    		  	freq_to_disbuff();
    					// 将1000ms内的脉冲计数值送显示
    			freq = 0;
    		} 
        		time_1ms_ok = 0;
    	} 
} 
void main(void)
{
unsigned char q; 
DDRD=0XFF;
DDRB.5=1;
DDRB.3=1;
DDRB.2=1; 
DDRB.0=1;
DDRB.1=1; 
DDRC.0=1;
DDRC.1=1;
DDRC=0X00;
DDRD.5=0;
PORTC.0=1;
PORTC.1=1;
PORTC.2=1;
PORTC.3=1;
PORTC.4=1;
PORTC.5=1; 
TCCR1B=0x06;					// 外部T1脚下降沿触发计数,普通模式
TCNT1=0x00;	                                        // T/C2初始化
TCCR2=0b00001111; 				// 内部时钟,128分频(16M/1024=15.625KHz),CTC模式
TCNT2=0x00;
OCR2=0x7C;					// OCR2 = 0x7C(124),(124+1)/15.625=8ms
TIMSK=0x80;	 				// 允许T/C2比较匹配中断
time0_old = 0; 
#asm("sei")      
PORTB.0=0;
PORTB.1=0;
PORTC.0=0;
PORTC.1=0;
while(1)
{  look:
  time();
   zhi=0;
    if(w[i]==7||w[i]==8)
    {
     TCCR2=0b00001111;
     fr=1;
    } 
    else
    {
    TCCR2=0b00001110;
         fr=0;
    }
    if(PINC.5==0)
            {   
                for(q=0;q<100;q++)
                    {
                     delay_us(100);
                    }
                    if(PINC.5==0)
                       { 
                           if(i!=8)
                             { 
                                 i++;
                               PORTD=p[i]; 
                              
                             }
                       }
                  while(PINC.5==0)
                       {
                       }
           }
    if(PINC.4==0)
            {   
                for(q=0;q<100;q++)
                    {
                     delay_us(100);
                    }
                    if(PINC.4==0)
                       { 
                           if(i!=0)
                             { 
                                 i--;
                               PORTD=p[i];
                               z=i+1;
                              
                             }
                       }
                  while(PINC.4==0)
                       {
                       }
           }
    if(PINC.3==0)
            {   
                for(q=0;q<100;q++)
                    {
                     delay_us(100);
                    }
                    if(PINC.3==0) 
                    { 
                      if(tri==0)
                      {
                       tri=1;
                      } 
                      else
                      {
                      tri=0;
                      }
                   
                    }
                          
                  while(PINC.3==0);
           }
 
  /* if(PINC.2==0)
            {   
                for(q=0;q<100;q++)
                    {
                     delay_us(100);
                    }
                    if(PINC.2==0) 
                    { 
                      if(hold==0)
                      {
                       hold=1;
                      } 
                      else
                      {
                      hold=0;
                      }
                   
                    }
                          
                  while(PINC.2==0);
           }      */
           if(PINC.2==0)
           {
            for(q=0;q<100;q++)
                    {
                     delay_us(100);
                    }
                    
                       while(PINC.2==0);
                       zhi=1;
                       while(1)
                       {           
                                    time();
                                   if(PINC.2==0)
                                   {
                                    for(q=0;q<200;q++)
                                                   {
                                                     delay_us(100);
                                                   }
                                         if(PINC.2==0)
                                         {
                                         while(PINC.2==0);
                                         goto look;
                                         }          
                                   }
                       
                       
            
                                   if(PINC.5==0)
                                         {   
                                              for(q=0;q<200;q++)
                                                   {
                                                     delay_us(100);
                                                   }
                                              if(PINC.5==0)
                                                   { 
                                                      if(kr!=8)
                                                   { 
                                                       kr++;
                                                       PORTB.0=(e[kr]&0b00000001);
                                                       PORTB.1=((e[kr]>>1)&0b00000001); 
                                                       PORTC.0=((e[kr]>>2)&0b00000001); 
                                                       PORTC.1=((e[kr]>>3)&0b00000001); 
                                                    }
                                                    }
                                              while(PINC.5==0)
                                                    {
                                                    }
                                          }
                                  if(PINC.4==0)
                                          {   
                                               for(q=0;q<200;q++)
                                                    {
                                                      delay_us(100);
                                                    }
                                               if(PINC.4==0)
                                                    { 
                                                       if(kr!=0)
                                                    { 
                                                       kr--;
                                                       PORTB.0=(e[kr]&0b00000001);
                                                       PORTB.1=((e[kr]>>1)&0b00000001); 
                                                       PORTC.0=((e[kr]>>2)&0b00000001); 
                                                       PORTC.1=((e[kr]>>3)&0b00000001); 
                              
                                                    }
                                                    }
                                              while(PINC.4==0)
                                                   {
                                                   }
                                }
           
                       }
           }
           
           
           
           
           
           
           
           
           
           
}
}

⌨️ 快捷键说明

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