📄 mcu1.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 + -