#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define trig PORTB_PB0
#define trig_dir DDRB_DDRB0
#define echo PORTB_PB1
#define echo_dir DDRB_DDRB1
#define BUZZ PORTK_PK5
#define BUZZ_dir DDRK_DDRK5
#define CONT1 PORTK_PK3
#define CONT2 PORTK_PK2
#define CONT3 PORTK_PK1
#define CONT4 PORTK_PK0
#define CONT1_dir DDRK_DDRK3
#define CONT2_dir DDRK_DDRK2
#define CONT3_dir DDRK_DDRK1
#define CONT4_dir DDRK_DDRK0
#define DATA PTP
#define DATA_dir DDRP
#define BUS_CLOCK 32000000
#define OSC_CLOCK 16000000
unsigned char data5=0,data6=0,data3=0,data4=0;
unsigned char single=1;
unsigned char shuma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned int data1,data2;
unsigned char distance;
unsigned int count;
void delay(void)
{
unsigned int i,j;
for(j=0;j<20;j++)
for(i=0;i<60000;i++);
}
void INIT_port(void)
{
CONT1_dir=1;
CONT2_dir=1;
CONT3_dir=1;
CONT4_dir=1;
CONT1=0;
CONT2=0;
CONT3=0;
CONT4=0;
DATA_dir=0xff;
DATA=0x00;
}
void INIT_RTI(void)
{
CRGINT=0x80;
RTICTL=0x3f;
}
void INIT_PLL(void)
{
CLKSEL_PLLSEL=0;
PLLCTL_PLLON=0;
REFDV=0b10000001;
SYNR=0b01000011;
PLLCTL_PLLON=1;
while(CRGFLG_LOCK==0);
CLKSEL_PLLSEL=1;
}
void INIT_ECT(void)
{
ECT_TSCR1_TEN=1;
ECT_TIOS_IOS0=1;
ECT_TSCR2=0x05;
}
void INIT_trig(void)
{
trig_dir=1;
trig=1;
}
void INIT_echo(void)
{
echo_dir=0;
echo=0;
}
void INIT_BUZZ(void)
{
BUZZ_dir=1;
BUZZ=0;
}
void INIT_PAI(void)
{
ECT_PACTL=0x50;
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 7 void scan(void)
{
CRGFLG_RTIF=1;
switch(single)
{
case 1:
CONT1=1;CONT2=0;CONT3=0;CONT4=0;
DATA=shuma[data5]; break;
case 2:
CONT1=0;CONT2=1;CONT3=0;CONT4=0;
DATA=shuma[data6]; break;
case 3:
CONT1=0;CONT2=0;CONT3=1;CONT4=0;
DATA=shuma[data3]; break;
case 4:
CONT1=0;CONT2=0;CONT3=0;CONT4=1;
DATA=shuma[data4]; break;
default:break
#include "derivative.h" /* derivative-specific definitions */
#define trig PORTB_PB0
#define trig_dir DDRB_DDRB0
#define echo PORTB_PB1
#define echo_dir DDRB_DDRB1
#define BUZZ PORTK_PK5
#define BUZZ_dir DDRK_DDRK5
#define CONT1 PORTK_PK3
#define CONT2 PORTK_PK2
#define CONT3 PORTK_PK1
#define CONT4 PORTK_PK0
#define CONT1_dir DDRK_DDRK3
#define CONT2_dir DDRK_DDRK2
#define CONT3_dir DDRK_DDRK1
#define CONT4_dir DDRK_DDRK0
#define DATA PTP
#define DATA_dir DDRP
#define BUS_CLOCK 32000000
#define OSC_CLOCK 16000000
unsigned char data5=0,data6=0,data3=0,data4=0;
unsigned char single=1;
unsigned char shuma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned int data1,data2;
unsigned char distance;
unsigned int count;
void delay(void)
{
unsigned int i,j;
for(j=0;j<20;j++)
for(i=0;i<60000;i++);
}
void INIT_port(void)
{
CONT1_dir=1;
CONT2_dir=1;
CONT3_dir=1;
CONT4_dir=1;
CONT1=0;
CONT2=0;
CONT3=0;
CONT4=0;
DATA_dir=0xff;
DATA=0x00;
}
void INIT_RTI(void)
{
CRGINT=0x80;
RTICTL=0x3f;
}
void INIT_PLL(void)
{
CLKSEL_PLLSEL=0;
PLLCTL_PLLON=0;
REFDV=0b10000001;
SYNR=0b01000011;
PLLCTL_PLLON=1;
while(CRGFLG_LOCK==0);
CLKSEL_PLLSEL=1;
}
void INIT_ECT(void)
{
ECT_TSCR1_TEN=1;
ECT_TIOS_IOS0=1;
ECT_TSCR2=0x05;
}
void INIT_trig(void)
{
trig_dir=1;
trig=1;
}
void INIT_echo(void)
{
echo_dir=0;
echo=0;
}
void INIT_BUZZ(void)
{
BUZZ_dir=1;
BUZZ=0;
}
void INIT_PAI(void)
{
ECT_PACTL=0x50;
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 7 void scan(void)
{
CRGFLG_RTIF=1;
switch(single)
{
case 1:
CONT1=1;CONT2=0;CONT3=0;CONT4=0;
DATA=shuma[data5]; break;
case 2:
CONT1=0;CONT2=1;CONT3=0;CONT4=0;
DATA=shuma[data6]; break;
case 3:
CONT1=0;CONT2=0;CONT3=1;CONT4=0;
DATA=shuma[data3]; break;
case 4:
CONT1=0;CONT2=0;CONT3=0;CONT4=1;
DATA=shuma[data4]; break;
default:break