单片机
返回首页

单片机学习——IIC总线及EEPROM实验之一

2016-01-20 来源:eefocus

题目:简单的流水灯实验。用EEPROM实现。

解决方案:(c语言编程)

#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay1(uint);
sbit scl=P3^3;
sbit sda=P3^4;
void delay()    //短延时子程序

 ;; 
}
void init()  //初使化子程序
{
 sda=1;
 scl=1;
}

void start()   //开始子程序
{
 sda=1;
 delay();
 scl=1;
 delay();
 sda=0;
 delay();
}

void stop()
{
 sda=0;
 delay();
 scl=1;
 delay();
 sda=1;
 delay();
}
void write_byte(uchar dat)  //写入字节子程序
{
 uchar a,temp;
 temp=dat;
 for(a=0;a<8;a++)
 {
  temp=temp<<1;
  scl=0;
  delay();
  sda=CY;
  delay();
  scl=1;
  delay();
 }
 scl=0;
 delay();
 sda=1;
 delay();
}

uchar read_byte()   //读出字节子程序
{
 uchar a,b,c;
 scl=0;
 delay();
 sda=1;
 delay();
 for(a=0;a<8;a++)
 {
  scl=1;
  delay();
  b=sda;
  c=(c<<1)|b;
  scl=0;
  delay();
 }
 return c;
}

void respon()  //响应子程序
{
 uchar a;
 scl=1;
 delay();
 while((sda==1)&&(a<100))a++;
 scl=0;
 delay();
 
}
void write(uchar add,uchar dat)    //写入子程序
{
 start();
 write_byte(0xa0);
 respon();
 write_byte(add);
 respon();
 write_byte(dat);
 respon();
 stop();
}
uchar read(uchar add)   //读出子程序
{
 uchar dat;
 start();
 write_byte(0xa0);
 respon();
 write_byte(add);
 respon();
 start(); 
 write_byte(0xa1);
 respon();
 dat=read_byte();
 respon();
 stop();
 return dat;
}
void main()  //main 函数
{
 uchar i;
 init();
 while(1)
 {
  for(i=0;i<16;i++)
      {
   write(3,table[i]);
   delay1(10);
   P0=read(3);
        }
 }
   
void delay1(uint a) {   //延时子函数
 uint i,j;
 for(j=a;j>0;j--)
     for(i=2500;i>0;i--) ;
}

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

  • SOC系统级芯片设计实验

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

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

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

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

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

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

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章