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

📄 tiaoshi.c

📁 不用任何时钟芯片,直接用单片机来进行显示,计时,且可闹铃,调时
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit n0=P1^0;
sbit n1=P1^1;
sbit n2=P1^2;
sbit n3=P1^3;
sbit n4=P1^4;
sbit led=P1^7;	  //led为1时,使发光二极管点亮;
uchar dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar second=0,minute=0,hour=0,clock_s=0,clock_m=0,clock_h=0;//时分秒及闹钟的时分秒!
uint t0_zc=0;
uchar t_move=0,flag=0,flag2=0,k1=0,k2=0;//t_move指移位情况,为1当前对秒操作,为2对分操作,为3对时操作

			//flag为状态位,为1进入闹钟显示及操作状态,flag2为了则立即停止闹铃!


void time0() interrupt 1
{t0_zc++;
if(t0_zc==4000)
{t0_zc=0;
second++;
if(second==60)
{second=0;
minute++;
if(flag2==1)flag2=0; //下一次分更新时,看是否刚在闹铃,是的话,闹一分钟就停止!
k1=hour^clock_h;   //当时钟与闹钟的相同时,异或是0;
k2=minute^clock_m; //同理,看是否到闹钟所设定的时间;
if(k1==0)
 {if(k2==0)flag2=1;}
if(minute==60)
{minute=0;
hour++;
if(hour==24)
{hour=0;}
}
}
}
}




void delay(uchar i)
 {uchar j;
 for(;i>0;i--)
 for(j=248;j>0;j--);
 }



uchar keyscan(void)
{uchar keyword=0;
uchar tmp;
tmp=P1&0x1f;
if(tmp!=0x1f)
{delay(20);
tmp=P1&0x1f;
if(tmp!=0x1f)
{if(n0==0)keyword=1;
while(n0==0);
if(n1==0)keyword=2;
while(n1==0);
if(n2==0)keyword=3;
while(n2==0);
if(n3==0)keyword=4;
while(n3==0);
if(n4==0)keyword=5;
while(n4==0);
 }
 }
 return keyword;
 }



 



 void update(uchar keyword)
 {if(keyword!=0)
 {switch(keyword)
 {case 1:
 flag2=0;
 TR0=0;
 EA=0;
 t_move=1;
 break;

 case 2:
 flag2=0;
 if(t_move==1)second=0;
 if(t_move==2)
 {if(flag==1)		   //先前按下了闹铃键,对闹铃显示单元操作!
 {clock_m++;
  if(clock_m==60)clock_m=0;}
 else minute++;
 if(minute==60)minute=0;
 }
 
 if(t_move==3)
 {if(flag==1)
 {clock_h++;
 if(clock_h==24)clock_h=0;}
 else hour++;
 if(hour==24)hour=0;
 }
 break;

 case 3:
  flag2=0;
 t_move++;
 if(t_move==4)t_move=1;
 break;

 case 4:
  flag2=0;
 TR0=1;
 EA=1;
 t_move=0;
 flag=0;
 break;

 case 5:
  flag2=0;
 flag=1;
 t_move=2;
 break;
 
 default:break;
 }
 }
 }



 void display(void)
 {
 if(flag==0)
 {uchar m=1;
 if(t_move==1)m=50;
 P0=dispcode[second%10];
 P2=0x1f;
 delay(m);
 P0=dispcode[second/10];
 P2=0x2f;
 delay(m);

 m=1;		   
 if(t_move==2)m=50;
 P0=dispcode[minute%10];
 P2=0x37;
 delay(m);
 P0=dispcode[minute/10];
 P2=0x3b;
 delay(m);

 m=1;
 if(t_move==3)m=50;
 P0=dispcode[hour%10];
 P2=0x3d;
 delay(m);
 P0=dispcode[hour/10];
 P2=0x3e;
 delay(m);
if(flag2==1)led=0;
else led=1;
}


if(flag==1)
{uchar m=1;
 if(t_move==1)m=50;
 P0=dispcode[clock_s%10];
 P2=0x1f;
 delay(m);
 P0=dispcode[clock_s/10];
 P2=0x2f;
 delay(m);

 m=1;		   
 if(t_move==2)m=50;
 P0=dispcode[clock_m%10];
 P2=0x37;
 delay(m);
 P0=dispcode[clock_m/10];
 P2=0x3b;
 delay(m);

 m=1;
 if(t_move==3)m=50;
 P0=dispcode[clock_h%10];
 P2=0x3d;
 delay(m);
 P0=dispcode[clock_h/10];
 P2=0x3e;
 delay(m);
 }
}

 
 
 
 void main(void)
 {uchar keyword;
TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while(1)
 {keyword=keyscan();
 update(keyword);
 display();
 }
 }

⌨️ 快捷键说明

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