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

📄 89clockc1.c

📁 单片机开发资料光盘-双龙-686M.zip
💻 C
字号:
#include<reg51.h>

sbit     bee=	 P2^0;
sbit     key =   P2^1;
sbit     dat =   P2^2;
sbit     clk =   P2^3;
sbit     cs  =   P2^4;

bit beep;
unsigned char data led[]={0,0,0,0,0,0};
unsigned char data *ledpoint;
unsigned char data timecnt;

struct time                   //定义结构体time
{
 unsigned char second;
 unsigned char minute;
 unsigned char hour;
} time;
 	
void delay(unsigned char mst)       //延时子程序
 {  unsigned char i;
     for (i=0; i<mst; i++)
			;
 }

 void send(unsigned char temp)      //发送子程序
{
	unsigned char i;
	cs=0;
	delay(7);
	for(i=0;i<8;i++)
	{
      dat=(temp&0x80)?1:0;
      clk=1;
      delay(1);
      clk=0;
      delay(1);
      temp=temp<<1;
    }  
    dat=1;

}

 
 receive(void)                      //接收子程序
{
 unsigned char i,rec_buf;
 dat=1;
 delay(7); 
 for(i=8;i>0;i--)
 { 
  rec_buf=rec_buf<<1;
  clk=1;
  delay(1);
  rec_buf=(dat==0)?rec_buf&0xfe:rec_buf|0x01;
  clk=0;
  delay(1);
 } 
 dat=0;
 return rec_buf;
}

void write279(unsigned char cmd1, unsigned char cmd2)
{
	send(cmd1);
	send(cmd2);                              
	cs=1;
}

 
void initdis()                     //初始化时间  
{
 unsigned char	i;
 write279(0x88,0x7f);
 for(i=0xc8;i<2+0xc8;i++)
 {				 
  write279(i,0);
 }
  write279(0x92,1);
 for(i=0xcb;i<2+0xcb;i++)
 {
  write279(i,0);
 }
  write279(0x95,1);
 for(i=0xce;i<2+0xce;i++)
 {
  write279(i,0);
 }  

  beep=0;
}



void display(unsigned char ledcnt,dischar)                    //显示子程序
{
  write279(ledcnt,dischar);
  *(ledpoint++)=dischar;
}

void bitblink(unsigned char m)
{
 if(m==5|m==2) m=m-1;
 if(m==0xff)   m=7;
 m=1<<m;
 m^=0xff;
 write279(0x88,m);
}

   
keyscan(void)                //键扫子程序
{
 static bit keypress=0;
 static signed char keycode;
 if(key==0)
 {
  if(keypress==0)
  {
   send(0x15);
   keycode=receive();
   cs=1;
   keypress=1;
  } 
   return 0xff;
 }

 if(keypress==1)
 {
  keypress=0;
  return   keycode; 
 }
 return 0xff;
}

void judgetime()                //判断时间是否正确
{
 unsigned char i;
 for(i=0;i<6;i++)
 {				 
  if(led[i]>=10)
  {
   goto settime0;
  }
 }
 time.hour=led[0]*10+led[1];
 time.minute=led[2]*10+led[3];
 time.second=led[4]*10+led[5];
 if(time.hour>=24)
 {
   goto settime0;

 }
 if(time.minute>=60)
 {
   goto settime0;
 }
 if(time.second>=60)
 {
   goto settime0;
 }
 return;
settime0:
 initdis();
 time.hour=0;
 time.minute=0;
 time.second=0;
 
}     

opentime()                        //初始化定时器
{
	timecnt=0;
 	TH0 =0xeb;                
 	TL0 =0x2b;
 	TMOD = TMOD | 0x01;                          
 	TR0 = 1;                                     
 	ET0 = 1;                                     
 	EA = 1;                                    
}

void  dissecond()                    //显示秒
{
  write279(0xc9,time.second/10);
  write279(0xc8,time.second%10);
}
 
void disminute()                   //显示分
{
  write279(0xcc,time.minute/10);
  write279(0xcb,time.minute%10);
}
 
void dishour()                     //显示小时
{
  write279(0xcf,time.hour/10);
  write279(0xce,time.hour%10);
}    
              

void timer0 () interrupt 1   //溢出中断子程序
{
	TH0=0xeb;
	TL0=0x2b;
	TR0=1;
 if((++timecnt)>=125)
 {
  timecnt=0;
  if((++time.second)>=60)
  {
   time.second=0;
   if((++time.minute)>=60)
   {
	beep=1;
  	time.minute=0;
	if((++time.hour)>=24)
	{
	 time.hour=0;	
	}    
	dishour();
   }
  disminute();
  }
  dissecond();
 }
}

	
main()
{
	unsigned char i,j,n,c,ledbit;
	key=1;
	clk=0;
	cs =1;
	send(0xa4);
	cs=1;
	initdis();
    ledbit=0xcf;
 	ledpoint=led;
	n=7;
	while((c=keyscan())!=0x17)
	{

     if(c!=0xff)
	 {
	  if(ledbit==0xc7) 
	  {
	   ledbit=0xcf;
	   ledpoint=led;
	   n=7;
	  }
	  if((ledbit==0xcd)|(ledbit==0xca))
      {
	   ledbit=ledbit-1;
	   n=n-1;
	  }
      display(ledbit--,c);
      bitblink(--n);
     }	
	}
	write279(0x88,0xff);
	judgetime();
	opentime();
ww:
 while(beep)
 {
  for(j=0;j<10;j++)
  {
  for(i=0;i<80;i++)
   {
    bee=~bee;
    delay(20);
   }
  }
  beep=0;
 }
  goto ww;
}

⌨️ 快捷键说明

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