AVR驱动7279
0赞
/*******************************************************************************
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);
}
