找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1483|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

這個IIC總線程序?yàn)槭裁疵看伍_啟之后顯示的數(shù)據(jù)為原來的一半?不是應(yīng)該接著單片機(jī)關(guān)...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:494791 發(fā)表于 2019-3-25 10:03 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
bit write=0;
sbit scl=P2^1;
sbit sda=P2^0;
uchar sec,tcnt;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uint x,y;
uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,
                      0x6d,0x7d,0x07,0x7f,0x6f};
void delay()
{ ; ; }
void delay1ms(uint z)
{  
   for(x=z;x>0;x--)
     for(y=110;y>0;y--);
}
void start()   //開始信號
{
  sda=1;
  delay();
  scl=1;
  delay();
  sda=0;
  delay();
}
void stop()       //結(jié)束信號
{
  sda=0;
  delay();
  scl=1;
  delay();
  sda=1;
  delay();
}
void respons()
{
   uchar i;
   scl=1;
   delay();
   while((sda==1)&&(i<250))
   i++;
   scl=0;
   delay();
}
void init()    //初始化函數(shù)
{
   sda=1;
   delay();
   scl=1;
   delay();
}
void writebyte(uchar date)    //寫
{
   uchar i,temp;
   temp=date;
   for(i=0;i<8;i++)
   {
        temp=temp<<1;//將temp左移一位,最高位移入CY位,然后將CY賦給SDA進(jìn)而在SCL的控制下發(fā)送出去
     scl=0;
     delay();
     sda=CY;
     delay();
     scl=1;
     delay();
   }
   scl=0;
   delay();
   sda=1;
   delay();
}
uchar readbyte()
{
  uchar i,k;
  scl=0;
  delay();
  sda=1;
  delay();
  for(i=0;i<8;i++)
  {
       scl=1;
     delay();
     k=(k<<1)|sda;//將k左移一位后與SDA進(jìn)行或運(yùn)算,依次把8個獨(dú)立的位放入1字節(jié)中完成接收
     scl=0;
     delay();
  }
  return k;
}
void writeadd(uchar address,uchar date)//向任一地址寫一字節(jié)的數(shù)據(jù)
{
    start();
    writebyte(0xa0);//發(fā)送從器件地址
    respons();
    writebyte(address);    // 發(fā)送地址
    respons();
    writebyte(date);//發(fā)送數(shù)據(jù)
    respons();
    stop();
}
uchar readadd(uchar address)//從中任一地址讀取一字節(jié)的數(shù)據(jù)
{
   uchar date;
   start();
   writebyte(0xa0);//發(fā)送從器件地址
   respons();
   writebyte(address);// 發(fā)送地址
   respons();
   start();
   writebyte(0xa1);// 發(fā)送數(shù)據(jù)
   date=readbyte();//讀數(shù)據(jù)
   stop();
   return date;
}
void display(uchar yiwei,uchar erwei)
{
      LSA=0;
      LSB=0;
      LSC=0;
      P0=table[erwei];
      delay1ms(10);
      LSA=1;
      LSB=0;
      LSC=0;
      P0=table[yiwei];
      delay1ms(10);
}
void main()
{
   init();
   sec=readadd(2);//讀出保存的數(shù)據(jù)賦給sec
   if(sec>100)
    sec=0;
   TMOD=0x01;
   ET0=1;
   EA=1;
   TH0=0x3c;
   TL0=0xb0;
   TR0=1;
   while(1)
   {
        display(sec/10,sec%10);
     if(write==1)
     {
       write=0;
       writeadd(2,sec);
     }
   }
}
void time0() interrupt 1
{
   TH0=0x3c;
   TL0=0xb0;
   tcnt++;
   if(tcnt==20)
   {
         tcnt=0;
      sec++;
      write=1;
      if(sec==100)
      sec=0;
   }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:466164 發(fā)表于 2019-3-25 22:37 | 只看該作者
從新上電可能初始值剛好激發(fā)程序,建議你把EA=1放最后打開。閥門從最小到最大。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表