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

📄 atmega8.c

📁 10:8的双通道音频矩阵源码
💻 C
字号:
/*===================================
AtMega8.c
===================================*/
#include "G40A8.h"

/*===================================
===================================*/
void DelayMs(unsigned int x)  //at 4.000MHz
{
  unsigned int j;
  while(x--)
  {
    for(j=560;j;j--);
    WDR();
  }
}
/*=============================
=============================*/
void UartTxdStr(unsigned char const *p)
{
  while(*p!='\0')
  {
    UartTxd(*p++);
  }
}
/*=======================
I2C driver
=======================*/

#define SDA_0() DDR |= SDA
#define SDA_1() DDR &=~SDA
#define SCL_0() DDR |= SCL
#define SCL_1() DDR &=~SCL
#define GetSDA() (PIN&SDA)
#define GetSCL() (PIN&SCL)

#define iic_off() {SDA_1();SCL_1();}
#define iic_on()  PORT&=~(SDA|SCL)
#define iic_delay(x)  {unsigned char j;for(j=x;j;j--);}

#define IICDT 5  //延时

/*================
================*/
unsigned char iic_start(void)
{
  iic_on();
  SDA_1();SDA_1();
  SCL_1();SCL_1();
  if(GetSDA()==0 || GetSCL()==0)
  {
    SCL_0();
    iic_delay(IICDT);
    SCL_1();
    iic_delay(IICDT);
    return 0;
  }
  else
  {
    SDA_0();
	iic_delay(IICDT);
    return 1;
  }
}
/*================
================*/
void iic_stop(void)
{
  SDA_0();
  iic_delay(IICDT);
  SCL_1();
  iic_delay(IICDT);
  SDA_1();
}

/*================
================*/
void iic_ack(void)
{
  SDA_0();
  iic_delay(IICDT);
  SCL_1();
  iic_delay(IICDT<<1);
  SCL_0();
  iic_delay(IICDT);
  SDA_1();
}
/*================
================*/
unsigned char iic_send(unsigned char x)
{
  unsigned char i;
  SCL_0();
  iic_delay(IICDT);
  for(i=0;i<8;i++)
  {
	if( x & 0x80 )
	  SDA_1();
    else
	  SDA_0();
	x=x<<1;
	iic_delay(IICDT);
    SCL_1();
    iic_delay(IICDT<<1);
    SCL_0();
    iic_delay(IICDT);
  }
  SDA_1();
  iic_delay(IICDT);
  SCL_1();
  i=0;
  while(GetSDA()!=0)
  {
    i++;
	if(i>(IICDT<<1))
	  return 0;
  }
  SCL_0();
  iic_delay(IICDT);
  return 1;
}

//**************接收一个字节********
unsigned char iic_receive(void)
{
  unsigned char i,data=0;
  SDA_1();
  for(i=0;i<8;i++)
  {
    data<<=1;
    iic_delay(IICDT);
    SCL_1();
    iic_delay(IICDT);
	if(GetSDA())
	  data++;
    iic_delay(IICDT);
    SCL_0();
    iic_delay(IICDT);
  }
  return data;
}
/*===================================
END
===================================*/

⌨️ 快捷键说明

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