单片机
返回首页

AVR单片机硬件I2C接口驱动程序

2016-09-23 来源:eefocus

今天上午写了atmega16的I2C硬件接口程序,程序不难,只是给初学的朋友一个思路,不过通过和51的软件模拟I2C程序比较发现,AVR的I2C硬件接口使程序更简单了,
 程序功能:先由atmega16向EEPROM中某地址写数字71,然后再从EEPROM里读出来显示到数码管上;
AVR单片机硬件I2C接口驱动程序 - 瀚海浸月 - 瀚海浸月
 
#include
#include
unsigned char const  duacode[]={0x3f,0x06,0x5b,0x4f,
                                                          0x66,0x6d,0x7d,0x07,
          0x7f,0x6f,0x77,0x7c,
          0x39,0x5e,0x79,0x71};  //0-f 数字模*/
void delay(unsigned int);
void display(unsigned int);
void send1byte(unsigned char address,unsigned char data);
unsigned char read1byte(unsigned char address);
#define START TWCR=BIT(7)|BIT(5)|BIT(2)
#define STOP TWCR=BIT(7)|BIT(4)|BIT(2)
#define WRITE(x) {TWDR=x; TWCR=BIT(7)|BIT(2);} 
void main()
{unsigned char i=0;
 DDRC=0xff;
 while(1)
  { 
   send1byte(4,71);
   i=read1byte(4);
   display(i);
   
  } 
}
void send1byte(unsigned char address,unsigned char data)
{
  START;
  while(!(TWCR&0x80));
  WRITE(0xa0);
  while(!(TWCR&0x80));
  WRITE(address);
  while(!(TWCR&0x80));
  WRITE(data);
  while(!(TWCR&0x80));
  STOP;
  delay(2);
}
unsigned char read1byte(unsigned char address)
{
 unsigned char temp;
 START;
 while(!(TWCR&0x80));
 WRITE(0xa0);
 while(!(TWCR&0x80));
 WRITE(address);
 while(!(TWCR&0x80));
 START;
 while(!(TWCR&0x80));
 WRITE(0xa1);
 while(!(TWCR&0x80));
 TWCR=BIT(7)|BIT(2);
 while(!(TWCR&0x80)); 
 temp=TWDR; 
 STOP;
 return temp; 
}
void display(unsigned int dat)
{
 unsigned char a[4],i;
 for(i=0;i<4;i++)
  {
a[3-i]=dat%10;
dat/=10;
}
DDRB=0xff; DDRD=0xff;
for(i=0;i<4;i++)
 {
   PORTB=duacode[a[i]];
   PORTD&=~BIT(i);
   delay(10);
   PORTD|=BIT(i);
 }
}
 
void delay(unsigned int x)
{
unsigned int a; unsigned char b;
for(a=x;a>0;a--)
  for(b=100;b>0;b--);
}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 如何构建一个触摸传感器电路

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章