51单片机IO口模拟驱动AT24c02

发布者:恬淡如云最新更新时间:2016-01-15 来源: eefocus关键字:51单片机  IO口模拟  驱动AT24c02 手机看文章 扫描二维码
随时随地手机看文章
#include

#include

void somenop()
{
 uchar i=5;
 while(i--)
 {
  _nop_();
 }
}

//8位扫描显示,共阳数码管
uchar shum[]={
              0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void delaym()
{
 uchar i;
 for(i=0;i<0xff;i++);
 
}

void init();
void star();
void stop();
void ack();
void write_byte(uchar date);
uchar read_byte();
sbit scl=P1^2;
sbit sda=P1^3;
uchar sec,min=30,tt;

void init()
{
 sda=1;
 somenop();
 scl=1;
 somenop();
  
}

void star()
{
 sda=1;
 somenop();
 scl=1;
 somenop();
 sda=0;
 somenop();
}
void stop()
{
 sda=0;
 somenop();
 scl=1;
 somenop();
 sda=1;
 somenop();
}
void ack()
{
 scl=1;
 somenop();
 
 scl=0;
 somenop();
}
void write_byte(uchar date)
{
 uchar i,temp;
 temp=date;
 for(i=0;i<8;i++)
 {
        scl=0;
  somenop();
  
        if((temp&0x80)==0x80)
       sda=1;}
  else
  { sda=0;}
  temp=temp<<1;
  somenop();
  scl=1;
  somenop();
  scl=0;
  somenop();
 }
 scl=0;
 somenop();
 sda=1;
 somenop();
}
uchar read_byte()
{
 uchar i,temp1,j;
 scl=0;
 somenop();
 sda=1;
 somenop();
 for(i=0;i<8;i++)
 {
  scl=1;
  somenop();
  j=sda;
  temp1=(temp1<<1)|j;
  scl=0;
  somenop();
 }
   return temp1;
}


void write_address(uchar address,uchar date)
{
 star();
 write_byte(0xa0);
 ack();
 write_byte(address);
 ack();
 write_byte(date);
 ack();
 stop();
}
uchar read_address(uchar address)
   
    uchar redata;
 star();
 write_byte(0xa0);
 ack();
 write_byte(address);
 ack();
 star();
 write_byte(0xa1);
 ack();
 redata=read_byte();
 stop();
 return redata;
}


void timer0() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 tt++;
    if(tt==20)
 {
        tt=0;
  sec++;
  if(sec==60)
         {sec=0;min++;
          
          if(min==60)
          { min=0;}
           write_address(100,min); delaym();
         }
        write_address(10,sec); delaym();  //把秒写入AT24C02的10地址
                                         //单片机写数据会占用一些时间,所以延时一会儿较好
        
 }
}

void int0(void) interrupt 0
{
 EA=0;
 min++;
 if(min==60)
 {
  min=0;
 }
 write_address(100,min);    //把分写入AT24C02的100地址
 delaym();
  EA=1;
}


void disp()
{
 P0=shum[sec%10];//sec 个位
 P2=0x08;
 delaym();

 P0=shum[sec/10];//sec 十位
 P2=0x04;
 delaym();

 P0=shum[min%10]&0x7f;   //加小数点
 P2=0x02;
 delaym();

 P0=shum[min/10];
 P2=0x01;
 delaym();
}

void main()
{
    TMOD=0x01;
 ET0=1;
    EX0=1;
    IT0=1;
    EA=1;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
    TR0=1;
     init();
        sec=read_address(10);     //从AT24C02的10地址读出秒数据
        min=read_address(100);   //从AT24C02的100地址读出分数据

        while(1)
        {
          disp();
        }
}

 

 


关键字:51单片机  IO口模拟  驱动AT24c02 引用地址:51单片机IO口模拟驱动AT24c02

上一篇:单片机控制GSM模块TC35的方法
下一篇:精巧的4*4键盘程序

推荐阅读最新更新时间:2024-03-16 14:44

地址转换-51单片机C编程
80C51单片机C编程时中,用sbit定义可位寻址的特殊功能寄存器的位变量(感觉说是常量更确切)时,编译器会进行处理,把sbit 后面给的地址值 转换成 相应的可进行位寻址的特殊功能寄存器 bit位 的位地址。转换不了时uVision报错,编译不通过。 比如,在头文件reg51.h中,定义了 sfr P0 = 0x80,该地址标识的是51芯片的P0端口的8个引脚。(一个字节)。 同时reg51.h中还定义了 sfr SP = 0x81。 如果自己定义 sbit TEST1 = 0x81;实验时会发现:TEST1实际表示的是0x80标识的8bits中的第二个bit位,表示成0x80.1。 按照一般的理解:TEST1应该是地址0
[单片机]
地址转换-<font color='red'>51单片机</font>C编程
51单片机CPU的基本构成及作用
单片机是什么,是在一个集成硅片中集成了一些部件,构成了一个微型的计算机系统的东西,这些只是对单片机的基础概念是简单了解,会用单片机C语言的编程来实现一些简单的ALU的操作,但是这些还是远远不够的,我们还需要了解单片机的运行机制,工作原理。 这一期来了解一些关于单片机的其他重要知识,51单片机的CPU是多少位,CPU的主要作用是什么,51单片机它的基本构成是由哪些部件或者哪些东西来构成的。 51单片机它的CPU位数是多少位? 51单片机是8位的CPU,表示数据处理一次能够处理的数据的位宽是8个比特位,也就是一个字节,这个叫做它的位数,51单片机除了具备八位的CPU之外,实际上它有两个,它还有一个位处理器,一个字节处理器,所以
[单片机]
<font color='red'>51单片机</font>CPU的基本构成及作用
8051单片机的内部RAM的结构
  51 系列单片机数据存储器的管理:   51 系列单片机对数据存储器 RAM 的管理是通过 16bit 的特殊功能寄存器 DPTR(Data Pointer)   来实现,每个 RAM 单元 (byte) 也对应一个特定的地址编码 (Address) ,因此, 51 系列单片机的地址的编码范围 ( 通常称为寻址范围 ) :   0000 0000 0000 0000B ~ 1111 1111 1111 1111B (二进制)    0  0   0  0 H ~  F  F  F   F H (十六进制)          0    ~      65535   (十进制)   因此 51 系列单片机的 RAM 寻
[单片机]
80<font color='red'>51单片机</font>的内部RAM的结构
利用8051单片机串行口串并转换输出程序
;利用8051串行口,和并行输出串行移位寄存器74LS164, ;扩展一位数码显示在数码显示器上循环显示0-9这10个数字。 ;晶振频率为11.0592MHZ ;4C00为50ms定时常数 ORG 0000H LJMP START ORG
[单片机]
以AT89C51单片机为核心的高频开关电源并联均流系统设计
  模块化是开关电源的发展趋势,并联运行是电源产品大容量化的一个有效方案,可以通过设计N+l冗余电源系统,实现容量扩展。本系统是多台高频开关电源(1000A/15V)智能模块并联,电源单元和监控单元均以AT89C51单片机为核心,电源单元的均流由监控单元来协调,监控单元既可以与各电源单元通信,也可以与PC通信,实现远程监控。   1    PWM控制电路   TL494是一种性能优良的脉宽调制控制器,TL494由5V基准电压、振荡器、误差放大器、比较器、触发器、输出控制电路、输出晶体管、空载时间电路构成。其主要引脚的功能为:    脚1和脚2分别为误差比较放大器的同相输入端和反相输入端;   脚15和脚16分别为控制比较放
[电源管理]
以AT89C<font color='red'>51单片机</font>为核心的高频开关电源并联均流系统设计
基于51单片机的多功能时钟温度计 DS1302+LCD1602
本设计是由STC89C52单片机为控制核心,具有在线编程功能,低功耗;时钟电路由DS1302提供,它是一种高性能、低功耗的时钟电路,工作电压为3V~5V;所以采用DS1302作为本设计的日历芯片;显示部份使用LCD1602B液晶模块进行数字显示,1602B液晶模块可以显示2行16个字符,有8位数据总线D0—D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。该模块也可以只用D4-D7作为四位数据分两次传送,这样就可以节省MCU的I/O口资源,系统主要由晶振电路、复位电路、时钟电路部分、中央处理单元、晶显示部分组成。 电路原理图如下: 制作出来的实物图如下: Altium Designer画的
[单片机]
基于<font color='red'>51单片机</font>的多功能时钟温度计 DS1302+LCD1602
PIC单片机与51单片机的区别
(1)总线结构:MCS-51单片机的总线结构是冯-诺依曼型,计算机在同一个存储空间取指令和数据,两者不能同时进行;而PIC单片机的总线结构是哈佛结构,指令和数据空间是完全分开的,一个用于指令,一个用于数据,由于可以对程序和数据同时进行访问,所以提高了数据吞吐率。正因为在PIC单片机中采用了哈佛双总线结构,所以与常见的微控制器不同的一点是:程序和数据总线可以采用不同的宽度。数据总线都是8位的,但指令总线位数分别位12、14、16位。 (2)流水线结构:MCS-51单片机的取指和执行采用单指令流水线结构,即取一条指令,执行完后再取下一条指令;而PIC的取指和执行采用双指令流水线结构,当一条指令被执行时,允许下一条指令同时被取出,这样
[单片机]
51单片机的简介——特殊功能寄存器(SFR)
上一篇文章我介绍了AT89C51单片机的几个重要的引脚,这一次我来介绍一下AT89C51单片机中的特殊功能寄存器(SFR),SFR不是一个寄存器而是一组寄存器的总称,SFR包括如下寄存器: 寄存器符号 寄存器地址 地址区间 功能介绍 B F0H F0H~FFH B寄存器 ACC E0H E0H~EFH 累加器 PSW D0H D0H~DFH 程序状态字 TH2* CDH 定时器/计数器2(高8位) TL2* CCH 定时器/计数器2(低8位
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved