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

📄 testavrkit.i

📁 AVR开发板电路图/PCB/示范程序
💻 I
📖 第 1 页 / 共 2 页
字号:
// CodeVisionAVR C Compiler
// (C) 1998-2005 Pavel Haiduc, HP InfoTech S.R.L.

// I/O registers definitions


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

// I/O registers definitions for the ATmega16


#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 PINA=0x19;
sfrb DDRA=0x1a;
sfrb PORTA=0x1b;
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;
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 OCDR=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 OCR0=0X3c;
sfrb SPL=0x3d;
sfrb SPH=0x3e;
sfrb SREG=0x3f;
#pragma used-

//***** Bit Definitions

// GIMSK / GICR
	
// GIFR

// TIMSK

// TIFR

// SPMCR
	
// TWCR


// MCUCR
	

// MCUSR

// TCCR0

// SFIOR

// TCCR1A

// TCCR1B

// TCCR2

// ASSR

// WDTCR

// EECR

// PORTA

// DDRA

// PINA

// PORTB

// DDRB

// PINB

// PORTC

// DDRC

// PINC

// PORTD

// DDRD

// PIND

// SPSR

// SPCR

// UCSRA

// UCSRB

//UCSRC

// ACSR

// ADMUX

// ADCSR

// TWAR



// 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-

//#define ENDOFLINE 

#pragma used+

void TransmitByte(unsigned char c);   //发送一个字节到USART
unsigned char ReceiveByte(void);      //从USART中读取一个字节
void TransmitLine(char *s);           //发送字符串到USART,以回车符结束
void TransmitLineF(flash char *s);    //同上
void TransmitString(char *s);         //发送任意字符串到USART
void TransmitStringF(flash char *s);  //同上
void USART_Init(unsigned char BaudRate);  //初始化USART,BaudRate为速度
void TestRate(void);                      //测试USART速度 
void ReceiveCMD(unsigned char * CmdBuf); //从USART中读取一条命令行
void ReceiveString(unsigned char * CmdBuf);  //从USART中读取一条字符串
#pragma used-
#pragma library USART.lib





//Type definitions 
typedef unsigned char byte;
typedef unsigned int word;


//音乐频率

const word tone_frq[]=
{ 0,
  //低音
  7372800/2   /262, 7372800/2   /277, 7372800/2   /294, 7372800/2   /311, 7372800/2   /330, 7372800/2   /349,
  7372800/2   /370, 7372800/2   /392, 7372800/2   /415, 7372800/2   /440, 7372800/2   /466, 7372800/2   /494, 
  //中音
  7372800/2   /523, 7372800/2   /554, 7372800/2   /578, 7372800/2   /622, 7372800/2   /659, 7372800/2   /698, 
  7372800/2   /740, 7372800/2   /784, 7372800/2   /831, 7372800/2   /880, 7372800/2   /932, 7372800/2   /988,  
 //高音 
 7372800/2   /1046, 7372800/2   /1109,7372800/2   /1175,7372800/2   /1245,7372800/2   /1318,7372800/2   /1397,
 7372800/2   /1480, 7372800/2   /1568,7372800/2   /1661,7372800/2   /1760,7372800/2   /1865,7372800/2   /1976
};
  
//音乐简谱定义
//低音
//中音
//高音

//节拍定义,以四分音符为一拍





#pragma used+

char * ByteToHex(unsigned char bByte);  //Byte格式转为Hex格式
unsigned char HexToByte(char * Hex);    //Hex格式转为Byte格式
void ByteToHexBuffer(unsigned char bByte, unsigned char * Hexs); ////Byte格式转为Hex格式Buffer
#pragma used-
#pragma library Types.lib


//TWI define




#pragma used+

void TWI_init(unsigned char Rate);           //TWI 初始化 Rate为速度
void TWI_start(void);                        //启动TWI信号
void TWI_stop(void);                         //结束TWI信号
unsigned char TWI_read(unsigned char ACK);   //读取TWI一个字节
void TWI_write(unsigned char Data);          //写入TWI一个字节
void TWI_DefaultInit(void);                  //TWI最缺省的初始化

#pragma used-
#pragma library TWI.lib


#pragma used+

//EEPROM_Write 写一个字节到EEPROM
void EEPROM_Write(unsigned char H_ADD, unsigned char Type, unsigned int M_ADD, unsigned char Data);

//EEPROM_Read 从EEPROM中读取一个字节
unsigned char EEPROM_Read(unsigned char H_ADD, unsigned char Type, unsigned int M_ADD);

#pragma used-
#pragma library TWIAPP.lib

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

// Prototypes for string functions



#pragma used+

char *strcat(char *str1,char *str2);
char *strcatf(char *str1,char flash *str2);
char *strchr(char *str,char c);
signed char strcmp(char *str1,char *str2);
signed char strcmpf(char *str1,char flash *str2);
char *strcpy(char *dest,char *src);
char *strcpyf(char *dest,char flash *src);
unsigned char strcspn(char *str,char *set);
unsigned char strcspnf(char *str,char flash *set);
unsigned int strlenf(char flash *str);
char *strncat(char *str1,char *str2,unsigned char n);
char *strncatf(char *str1,char flash *str2,unsigned char n);
signed char strncmp(char *str1,char *str2,unsigned char n);
signed char strncmpf(char *str1,char flash *str2,unsigned char n);
char *strncpy(char *dest,char *src,unsigned char n);
char *strncpyf(char *dest,char flash *src,unsigned char n);
char *strpbrk(char *str,char *set);
char *strpbrkf(char *str,char flash *set);
signed char strpos(char *str,char c);
char *strrchr(char *str,char c);
char *strrpbrk(char *str,char *set);
char *strrpbrkf(char *str,char flash *set);
signed char strrpos(char *str,char c);
char *strstr(char *str1,char *str2);
char *strstrf(char *str1,char flash *str2);
unsigned char strspn(char *str,char *set);
unsigned char strspnf(char *str,char flash *set);
char *strtok(char *str1,char flash *str2);
 

unsigned int strlen(char *str);
void *memccpy(void *dest,void *src,char c,unsigned n);
void *memchr(void *buf,unsigned char c,unsigned n);
signed char memcmp(void *buf1,void *buf2,unsigned n);
signed char memcmpf(void *buf1,void flash *buf2,unsigned n);
void *memcpy(void *dest,void *src,unsigned n);
void *memcpyf(void *dest,void flash *src,unsigned n);
void *memmove(void *dest,void *src,unsigned n);
void *memset(void *buf,unsigned char c,unsigned n);

#pragma used-
#pragma library string.lib



#asm
.equ __ds1302_port=0x15 
.equ __ds1302_sclk=4
.equ __ds1302_io=5
.equ __ds1302_rst=6
#endasm

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

  Prototypes for the Dallas Semiconductors
  DS1302 Real Time Clock functions

  BEFORE #include -ING THIS FILE YOU
  MUST DECLARE THE I/O ADDRESS OF THE
  DATA REGISTER OF THE PORT AT WHICH
  DS1302 IS CONNECTED AND
  THE DATA BITS USED FOR IO, SCLK and RST pins 

  EXAMPLE FOR PORTB:
    
  	#asm
        .equ __ds1302_port=0x18
        .equ __ds1302_io=2
        .equ __ds1302_sclk=1
        .equ __ds1302_rst=4
    #endasm
    #include <ds1302.h>
*/




#pragma used+

unsigned char ds1302_read(unsigned char addr);
void ds1302_write(unsigned char addr,unsigned char data);
unsigned char rtc_switch(void);
void rtc_start(void);
void rtc_stop(void);
void rtc_init(unsigned char tc_on,unsigned char diodes,unsigned char res);
void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec);
void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec);
void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year);
void rtc_set_date(unsigned char date,unsigned char month,unsigned char year);
void rtc_get_time_bcd(unsigned char *hour,unsigned char *min,unsigned char *sec);
void rtc_set_time_bcd(unsigned char hour,unsigned char min,unsigned char sec);
void rtc_get_date_bcd(unsigned char *date,unsigned char *month,unsigned char *year);
void rtc_set_date_bcd(unsigned char date,unsigned char month,unsigned char year);

#pragma used-
#pragma library ds1302v2.lib




#asm
    .equ __i2c_port=0x12
    .equ __scl_bit=0
    .equ __sda_bit=1
#endasm

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

  Prototypes for I2C bus master functions

  BEFORE #include -ING THIS FILE YOU
  MUST DECLARE THE I/O ADDRESS OF THE
  DATA REGISTER OF THE PORT AT WHICH
  THE I2C BUS IS CONNECTED AND
  THE DATA BITS USED FOR SDA & SCL

  EXAMPLE FOR PORTB:

    #asm
        .equ __i2c_port=0x18
        .equ __sda_bit=3
        .equ __scl_bit=4
    #endasm
    #include <i2c.h>
*/


#pragma used+
void i2c_init(void);
unsigned char i2c_start(void);
void i2c_stop(void);
unsigned char i2c_read(unsigned char ack);
unsigned char i2c_write(unsigned char data);
#pragma used-


/******************************************************************/
/*    LCD Library
/*    
/*    Designed by Aleyn.wu
/*    E-mail: Aleyn@e-midas.cn
/*    Last Update:2006.03.10
/*
/******************************************************************/

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

// I/O registers definitions




/*******************************************************************/
//#ifndef LCDSET

//#endif
/********************************************************************/











#pragma used+
void LCD_ClearBus();
void LCD_WaitforBusy();
void LCD_Action(unsigned char Data);
void LCD_Ctrl(unsigned char CtrlWord);
void LCD_Write(unsigned char Data);
void LCD_PutStr(char *ss);
void LCD_Init();

#pragma used-
#pragma library LCDv2.lib


#pragma warn-
eeprom unsigned char EEPROMS[512];
#pragma warn+


void Pause(void)
{
  TransmitLineF("Press any key to start...");
  ReceiveByte();
}


void TestAllPort(void)
{
  unsigned char LED_A;
  unsigned char LED_B;
  unsigned char LED_C;
  unsigned char LED_D;
  unsigned char LED_E;
  unsigned char LED_F;
  unsigned char LED_G;
  
  TransmitLineF("Cable setting: LEDG <--> PortA,B,C,D,E,F,G");  
  Pause();
  
                UCSRA=0x00;
  UCSRB=0x00;
  UCSRC=0x00;
  UBRRH=0x00;
  UBRRL=0x00;  
    
  
  DDRA=0xFF;
  DDRB=0xFF;
  DDRC=0xFF;
  DDRD=0xFF;
            
  LED_A=0B11001100;
  LED_B=0B11110000;
  LED_C=0B11111111;
  LED_D=0B10101010;
  LED_E=0B11000011;
  LED_F=0B11010100;
  LED_G=0B01010011;
  
  while (1)
  {
    PORTA=LED_A;
    PORTB=LED_B;
    PORTC=LED_B;
    PORTD=LED_D;
                		
    LED_A=~LED_A;
    LED_B=~LED_B;    
    LED_C=~LED_C;
    LED_D=~LED_D;
    LED_E=~LED_E;
    LED_F=~LED_F;
    LED_G=~LED_G;
	
    delay_ms(500);
  }
}
/**************************************************************************/
void TestKeyPress(void)
{
  //flash unsigned char *Msg ="Press"
  register unsigned char Key;
  TransmitLineF("Cable setting: LEDG <--> PortA, KEY <--> PortC");  
  Pause();
  
  DDRA=0xFF;
  DDRC=0x00;
  
  //Key=PINC;
  
  while (1)
  {
    /*
	if (!Key&(1<<0)) TransmitLineF("Press K0");
    if (!Key&(1<<1)) TransmitLineF("Press K1");
    if (!Key&(1<<2)) TransmitLineF("Press K2");
    if (!Key&(1<<3)) TransmitLineF("Press K3");
    if (!Key&(1<<4)) TransmitLineF("Press K4");
    if (!Key&(1<<5)) TransmitLineF("Press K5");
    if (!Key&(1<<6)) TransmitLineF("Press K6");
    if (!Key&(1<<7)) TransmitLineF("Press K7");
	PORTA=Key;
	while (~PINC);*/
	
	Key=~PINC;	
	if (Key)
	{
	  while (~PINC);
	}
	if (Key&(1<<0)) TransmitLineF("Press K0");
    if (Key&(1<<1)) TransmitLineF("Press K1");
    if (Key&(1<<2)) TransmitLineF("Press K2");
    if (Key&(1<<3)) TransmitLineF("Press K3");
    if (Key&(1<<4)) TransmitLineF("Press K4");
    if (Key&(1<<5)) TransmitLineF("Press K5");
    if (Key&(1<<6)) TransmitLineF("Press K6");
    if (Key&(1<<7)) TransmitLineF("Press K7");	
  }
}
/*****************************************************************************/

unsigned char ShowLed(unsigned char LED)
{
  unsigned char LEDS[20]={
                         0x7F&(~0b01000000),                  //0
                         0b00000010|0b00000100,                    //1
                         0b00000001|0b00000010|0b01000000|0b00010000|0b00001000,  //2
                         0b00000001|0b00000010|0b01000000|0b00000100|0b00001000,  //3
                         0b00100000|0b01000000|0b00000010|0b00000100,        //4
                         0b00000001|0b00100000|0b01000000|0b00000100|0b00001000,  //5
                         0x7F&(~0b00000010),                  //6
                         0b00000001|0b00000010|0b00000100,              //7
                         0x7F,                           //8
                         0x7F&(~0b00010000),                  //9
                         0b00100000|0b00010000|0b01000000|0b00000010|0b00000100,  //H
                         0b00000001|0b00100000|0b01000000|0b00010000|0b00001000,  //ERR
                         0b00000001,                          //A
                         0b00000010,                          //B
                         0b00000100,                          //C
                         0b00001000,                          //D
                         0b00010000,                          //E
                         0b00100000,                          //F
                         0b01000000,                          //G
                         0b10000000                           //.
                         };
  unsigned char LEDSHOW;
 if (LED<=11)
   {LEDSHOW = LEDS[LED];}
 else if ((LED>='0') && (LED<='9'))
   {LEDSHOW = LEDS[LED-'0'];}
 else if (LED=='.')
   {LEDSHOW = LEDS[19];}
 else if ((LED>='a') && (LED<='g'))
   {LEDSHOW = LEDS[LED-'a'+12];}
 else if ((LED>='A') && (LED<='G'))
   {LEDSHOW = LEDS[LED-'A'+12];} 
 else if (LED=='-')
   {LEDSHOW = LEDS[19];}
 else if ((LED=='H')||(LED=='h'))
   {LEDSHOW = LEDS[10];}
 else 
   {LEDSHOW = LEDS[11];}
 return LEDSHOW; 
}
void TestDLED(void)
{
unsigned char LED[6];
unsigned char State;
unsigned char Index;
unsigned int i;
PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0xFF;

PORTD=0x00;
DDRD=0xFF;

PORTA=0x00;
DDRA=0xFF;

State=0;

  TransmitLineF("Cable setting: DLED2 <--> PortA, DLED1 <--> PortC"); 
  Pause();
  
for (i=0;i<6;i++) LED[i]=ShowLed(i);
Index=0;
while (1)
      {
       	if (UCSRA&(1<<7)) 
       	 {
       	   State=0;
	         for (i=5;i>=1;i--) LED[i]=LED[i-1];
	         LED[0]=ShowLed(UDR);
       	 }
        PORTA=~LED[Index];  //for M16;
        PORTC=1<<Index;
        Index++;
        if (Index>=6) Index=0;
       switch (State)
      {
      case 3:
         {
         for (i=0;i<6;i++) LED[i]=ShowLed(8);
         break;
         }
      case 4:
        {
         for (i=0;i<6;i++) LED[i]=ShowLed(i);
         break;
         }
      }
			delay_ms(1);
      }

}
/*****************************************************************************/

⌨️ 快捷键说明

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