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

📄 时钟iic.c

📁 iic总线的单片机C程序
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#define  unchar  unsigned  char
#define  unint   unsigned  int
sbit   sda=P1^5;
sbit   scl=P1^6;
 sbit dula=P2^0	;
 sbit wela=P2^1; 
unchar  code  shu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unchar  code  wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unchar   hour,minute,second,i;
unchar hour1,hour0,minute1,minute0,second1,second0;
void   delay(void)                
{  unchar a;
  for(a=0;a<10;a++)
    {}
 }

void  start()                  
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}

void  stop()                   
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}

void   responsion()          
{
unchar  i=0;
scl=1;
delay();
while((sda==1)&&(i<250))         
i++;
scl=0;
delay();
}

void  write_date(unchar date)     
{
unchar  i=0,temp=0;
temp=date;
for(i=0;i<8;i++)
  {
    temp=temp<<1;
scl=0;
    delay();
sda=CY;
    delay();
scl=1;
    delay();
  }
  scl=0;
  delay();
  sda=1;
  delay();
}

unchar  read_date()                   
{
    unchar i,date;
    scl=0;
    delay();
    sda=1;
    delay();
for(i=0;i<8;i++)
   {
      scl=1;
       delay();
   date=(date<<1)|sda;
   scl=0;
         delay();
   }
   return   date;
}

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

void write_add(unchar address,unchar date)         
{
start();
write_date(0xa0);
responsion();
write_date(address);
responsion();
write_date(date);
responsion();
stop();
}

unchar read_add(unchar address)               
{
unchar date;
start();
write_date(0xa0);
responsion();
write_date(address);
responsion();
start();
write_date(0xa1);
responsion();
date=read_date();
stop();
return date;
}

void   delay1(unchar z)                       
{
  unchar  x,y;
  for(x=z;x>0;x--)
     for(y=100;y>0;y--);
}

void  time()                                      
{
  if(i>=20)
  {
     i=0;
     second+=1;
  second1=second/10;
     second0=second%10;
     write_add(5,second1);
    delay1(10);
     write_add(6,second0);
    if(second==59)
    {
     second=0;
     minute+=1;
     minute1=0x00+minute/10;
     minute0=0x00+minute%10;  
     write_add(3,minute1);
     delay1(10);
     write_add(4,minute0);
    }
   if(minute==59)
    {
   minute =0;
   hour+=1;
   hour1=0x00+hour/10;
   hour0=0x00+hour%10;
   write_add(1,hour1);
   delay1(10);
   write_add(2,hour0);
   }
   if(hour==24)
   hour=0;
}
}
void   display()
{   
    P0=0x7f;
    wela=1;  
    wela=0;
    P0=shu[read_add(1)];
   	dula=1;
	dula=0;
	P0=0xff;
	dula=1;
	dula=0;
	 
	 P0= 0xbf;
	 wela=1;  
     wela=0;
	 P0=shu[read_add(2)];
   	 dula=1	;
	 dula=0;
	 P0=0xff;
	 dula=1;
	 dula=0;
  	 
	 P0=0xdf;
	 wela=1;  
     wela=0;
     P0=0x40;
	 dula=1;
	 dula=0;
	 P0=0xff;
	 dula=1;
	 dula=0;
	 
	 P0=0xef;
	 wela=1;
	 wela=0;
	 P0=shu[read_add(3)];
	 dula=1;
	 dula=0;
	 P0=0xff;
	 dula=1;
	 dula=0;
	 
	 P0=0xf7;
	 wela=1;
	 wela=0;
     P0=shu[read_add(4)];
	 dula=1;
	 dula=0;
	 P0=0xff;
	 dula=1;
	 dula=0;

	 P0=0xfb;
	 wela=1;
	 wela=0;
	 P0=0xbf;
	 dula=1;
	 dula=0;
	 P0=0xff;
	 dula=1;
	 dula=0;

	 P0=0xfd;
	 wela=1;
	 wela=0;
	 P0=shu[read_add(5)];
	 dula=1;
	 dula=0;
	 P0=0x40;
	 dula=1;
	 dula=0;
	 
	 P0=0xf7;
	 wela=1;
	 wela=0;
	 P0=shu[read_add(6)];
	 dula=1;
	 dula=0;
	 P0=0xff;
	 dula=1;
	 dula=0;
 
}

void   memory()
{
second1=read_add(5);
second0=read_add(6);
second=second1*10+second0;
minute1=read_add(3);
minute0=read_add(4);
minute=minute1*10+minute0;
hour1=read_add(1);
hour0=read_add(2);
hour=hour1*10+hour0;
}
void  main()
{
TMOD=0x01;                        
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
    EA=1;
    ET0=1;
    TR0=1;

   init();
   memory();
   while(1)
   {
   time();
   display();
   }
}
void   timing()   interrupt   1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
}

⌨️ 快捷键说明

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