📄 testavrkit.c
字号:
#include <io.h>
#include <delay.h>
#include <USART.h>
#include <Music.h>
#include <Types.h>
#include <TWI.h>
#include <TWIAPP.h>
#include <String.h>
#asm
.equ __ds1302_port=0x15
.equ __ds1302_sclk=4
.equ __ds1302_io=5
.equ __ds1302_rst=6
#endasm
#include <DS1302V2.h>
#asm
.equ __i2c_port=0x12
.equ __scl_bit=0
.equ __sda_bit=1
#endasm
#include <I2C.h>
#include <LCDv2.h>
#pragma warn-
eeprom unsigned char EEPROMS[512];
#pragma warn+
#define uchar unsigned char
#define uint unsigned int
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();
#if defined _CHIP_ATMEGA128_ | defined _CHIP_ATMEGA128L_
UCSR1A=0x00;
UCSR1B=0x00;
UCSR1C=0x00;
UBRR1H=0x00;
UBRR1L=0x00;
#else
UCSRA=0x00;
UCSRB=0x00;
UCSRC=0x00;
UBRRH=0x00;
UBRRL=0x00;
#endif
DDRA=0xFF;
DDRB=0xFF;
DDRC=0xFF;
DDRD=0xFF;
#if defined _CHIP_ATMEGA128_ | defined _CHIP_ATMEGA128L_
DDRE=0xFF;
DDRF=0xFF;
DDRG=0xFF;
#endif
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;
#if defined _CHIP_ATMEGA128_ | defined _CHIP_ATMEGA128L_
PORTE=LED_E;
PORTF=LED_F;
PORTG=LED_G;
#endif
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");
}
}
/*****************************************************************************/
#define LED_A 0b00000001
#define LED_B 0b00000010
#define LED_C 0b00000100
#define LED_D 0b00001000
#define LED_E 0b00010000
#define LED_F 0b00100000
#define LED_G 0b01000000
#define LED_T 0b10000000
unsigned char ShowLed(unsigned char LED)
{
unsigned char LEDS[20]={
0x7F&(~LED_G), //0
LED_B|LED_C, //1
LED_A|LED_B|LED_G|LED_E|LED_D, //2
LED_A|LED_B|LED_G|LED_C|LED_D, //3
LED_F|LED_G|LED_B|LED_C, //4
LED_A|LED_F|LED_G|LED_C|LED_D, //5
0x7F&(~LED_B), //6
LED_A|LED_B|LED_C, //7
0x7F, //8
0x7F&(~LED_E), //9
LED_F|LED_E|LED_G|LED_B|LED_C, //H
LED_A|LED_F|LED_G|LED_E|LED_D, //ERR
LED_A, //A
LED_B, //B
LED_C, //C
LED_D, //D
LED_E, //E
LED_F, //F
LED_G, //G
LED_T //.
};
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<<RXC))
{
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);
}
}
/*****************************************************************************/
#define SND_TNE PORTD^=0x80
const byte music_dt0[]=
{L6,P8,M1,P8,M3,P8,M1,P8,M2,P4,M1,P8,L7,P8,M3,P4,M2,P4,L6,P2,
M1,P8,M3,P8,M5,P8,M5,P8,M6,P4,M5,P8,M4,P8,M3,P2,
M4,P4,M5,P4,M7,P8,M6,P8,M3,P4,M3,P8,
L7,P4,L6,P8,M3,P8,M2,P8,M4,P4,M4,P8,0,P8,
M5,P8,M4,P8,M3,P4,M2,P8,M1,P8,M3,P4,M2,P4,L6,P2,L6,P8,0,P8,
0,P4,0,0};
unsigned char delay_inc=0x0C;
unsigned char time_inc=0x01;
void delay(word t)
{
uint i;
// uchar j;
for (i=0;i<t;i++) i+=delay_inc;
// for(j=1;j<8;j++);
}
void TestSound(void)
{
//struct MUSICDAT * music_dat;
//unsigned char c;
unsigned int i,j,k;
unsigned char name;
unsigned int time;
DDRD|=0x80;
TransmitLineF("Cable setting: Sound.SSD--PortD.PD7");
//if time_inc
while (1)
{
TransmitLineF("Please input Speed:");
time_inc=ReceiveByte();
i=0;
while (i<sizeof(music_dt0))
{
name=music_dt0[i];
time=music_dt0[i+1];
for (k=0;k<time;k++)
for (j=0;j<=time_inc;j++)
{
SND_TNE;
delay(tone_frq[name]);
SND_TNE;
delay(tone_frq[name]);
}
delay_ms(20);
i+=2;
}
}
//while ((name==0)&&(time==0));
}
/*****************************************************************************/
void TestDS1302(void)
{
//unsigned char State=0;
unsigned char Cmd;
//unsigned char i,j;
unsigned char RTC[6];
unsigned char Buffer[10];
TransmitLineF("Cable setting: ");
TransmitLineF(" VCC <--> DS1302.VCC");
TransmitLineF(" PORTC.4 <--> DS1302.SCL");
TransmitLineF(" PORTC.5 <--> DS1302.SDA");
TransmitLineF(" PORTC.6 <--> DS1302.RST");
TransmitLineF(" GND <--> DS1302.GND");
TransmitLineF(" ");
TransmitLineF("DS1302 Menu");
TransmitLineF("---------------------");
TransmitLineF("1.Start/Stop Timer");
TransmitLineF("2.Get Date");
TransmitLineF("3.Get Time");
TransmitLineF("4.Reset Date");
TransmitLineF("5.Reset Time");
TransmitLineF("---------------------");
TransmitLineF("Please choose item:");
while (1)
{
Cmd=ReceiveByte();
switch (Cmd)
{
case '1':
{
rtc_switch();
rtc_get_time(&RTC[2],&RTC[1],&RTC[0]);
TransmitStringF("DS1302 state is :");
ByteToHexBuffer(RTC[0],&Buffer[0]);
Buffer[2]=0;
TransmitLine(Buffer);
break;
}
case '2':
{
rtc_get_date_bcd(&RTC[5],&RTC[4],&RTC[3]);
ByteToHexBuffer(RTC[3],&Buffer[0]);
Buffer[2]='-';
ByteToHexBuffer(RTC[4],&Buffer[3]);
Buffer[5]='-';
ByteToHexBuffer(RTC[5],&Buffer[6]);
Buffer[8]=0;
TransmitStringF("Current date is 20");
TransmitLine(Buffer);
break;
}
case '3':
{
rtc_get_time_bcd(&RTC[2],&RTC[1],&RTC[0]);
ByteToHexBuffer(RTC[2],&Buffer[0]);
Buffer[2]=':';
ByteToHexBuffer(RTC[1],&Buffer[3]);
Buffer[5]=':';
ByteToHexBuffer(RTC[0],&Buffer[6]);
Buffer[8]=0;
TransmitStringF("Current time is ");
TransmitLine(Buffer);
break;
}
case '4':
{
RTC[3]=1; //date
RTC[4]=1; //month
RTC[5]=0; //year
rtc_set_date(RTC[3],RTC[4],RTC[5]);
delay_ms(10);
rtc_get_date_bcd(&RTC[5],&RTC[4],&RTC[3]);
ByteToHexBuffer(RTC[3],&Buffer[0]);
Buffer[2]='-';
ByteToHexBuffer(RTC[4],&Buffer[3]);
Buffer[5]='-';
ByteToHexBuffer(RTC[5],&Buffer[6]);
Buffer[8]=0;
TransmitStringF("Reset date is 20");
TransmitLine(Buffer);
break;
}
case '5':
{
RTC[2]=0; //
RTC[1]=0; //month
RTC[0]=0; //year
rtc_set_time(RTC[2],RTC[1],RTC[0]);
delay_ms(10);
rtc_get_time_bcd(&RTC[2],&RTC[1],&RTC[0]);
ByteToHexBuffer(RTC[2],&Buffer[0]);
Buffer[2]=':';
ByteToHexBuffer(RTC[1],&Buffer[3]);
Buffer[5]=':';
ByteToHexBuffer(RTC[0],&Buffer[6]);
Buffer[8]=0;
TransmitStringF("Reset time is ");
TransmitLine(Buffer);
break;
}
default :
{
TransmitLineF("Bad Command.");
}
}
}
}
/*****************************************************************************/
#define URD PORTA.0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -