Stillness_Tr

AVR驱动7279

0
阅读(1462)


/*******************************************************************************
7297接口程序
FOR AVR M128
PB0--------CS
PB1--------CLK
PB2--------DAT
PB3--------KEY
*******************************************************************************/
#define DATA_IN     PINB
#define DATA_IO     DDRB
#define DATA_BUS    PORTB
#define CS          PB0
#define CLK         PB1
#define DAT         PB2
#define KEY         PB3
#define CLR_CS      DATA_BUS&=~(1<<CS)  
#define STEB_CS     DATA_BUS|=(1<<CS)
#define CLR_CLK     DATA_BUS&=~(1<<CLK)
#define STEB_CLK    DATA_BUS|=(1<<CLK)
#define CLR_DAT     DATA_BUS&=~(1<<DAT)  
#define STEB_DAT    DATA_BUS|=(1<<DAT)
#define HIGH_KEY    DATA_IN&(1<<KEY)
#define LOW_KEY     (HIGH_KEY)==0

/******************************************************************************
延迟函数
*******************************************************************************/
void delay(unsigned int time)
{
unsigned int time1;
for(time1=0;time1<time;time1++);
}
/******************************************************************************
写一个字节到7279
byte---写入数据
*******************************************************************************/
unsigned char Write_byte(unsigned char byte)
{
unsigned char i;
CLR_CS;
delay(0xb0);
for(i=0;i<8;i++)
{
   if(byte&0x80)
    STEB_DAT;
   else
    CLR_DAT;
   STEB_CLK;
   delay(0X20);
   CLR_CLK;
   delay(0X20);
   byte=byte<<1;
}
return(0);
}
/*******************************************************************************
从7279中读出一个字节数据
*******************************************************************************/
unsigned char Receive_byte()
{
unsigned char i;
unsigned char in_byte=0;
DATA_IO&=~(1<<DAT);//方向输入,上拉
STEB_DAT;
delay(0xb0);
for (i=0;i<8;i++)
   {
     STEB_CLK;
delay(0X20);
in_byte=in_byte<<1;
     if(DATA_IN&(1<<DAT))
   in_byte|=0X01;
CLR_CLK;
delay(0X20);
   }
DATA_IO|=1<<DAT;//方向输出,清零
CLR_DAT;
return (in_byte);
}
/*******************************************************************************
读取键盘值
*******************************************************************************/
unsigned char key_read()
{
  
   Write_byte(0x15);
   return(Receive_byte());
}
/******************************************************************************
初始化7279
*******************************************************************************/
void key_init(void)
{
DATA_IO= (1<<CS)|(1<<CLK)|(1<<DAT)|(0<<KEY);//方向
DATA_BUS=(1<<CS)|(0<<CLK)|(0<<DAT)|(1<<KEY);//初始电平
delay(0x4000);
Write_byte(0xa4);
}