C51做闹钟:用1602显示时间,到时间,蜂鸣器响或者灯亮,按K4停止

C51做闹钟:用1602显示时间,到点时间,蜂鸣器响或者灯亮,按K4停止在这里插入图片描述

小灯亮
 #include <reg51.h>

	sbit k4=P3^3;
	sbit led = P2^1;

	 sbit rs=P2^6;
	 sbit rw=P2^5;
	 sbit e=P2^7;

	  char flag=0,count=0;
	  int miao = 57;
	  int fen = 59;
	  int shi = 6;
   	void delayms(int ms);
	bit check_busy();
	void lcdcom(unsigned char com);
	void lcddat(unsigned char dat);
   void main()
   {
	lcdcom(0x01);//清屏
	lcdcom(0x06);//光标右移,地址自动加1
	lcdcom(0x0e);//显示开,有光标,光标不闪烁
	lcdcom(0x38);//8位数据总线,2行显示,5*7点阵




	lcdcom(0x80);
	lcddat('t');
	lcddat('i');
	lcddat('m');
	lcddat('e');
	lcddat(':');

	 
	TMOD = 0X01; //定时器0 工作方式为1,16位定时器
    TH0 = 0X3C;
 	TL0=0xB0;//定时器50ms,设置初始值
 	ET0=1;  //打开定时器0的中断开关(允许定时器0中断)
 	EA=1;  //总中断打开
 	TR0=1;  //启动定时器0



	 while(1)
	{
			lcdcom(0xc6);
			lcddat(0+0x30);
			lcddat(shi%10+0x30);
			lcddat(':');
            lcddat(fen/10+0x30);
			lcddat(fen%10+0x30);
			lcddat(':');
			lcddat(miao/10+0x30);
			lcddat(miao%10+0x30);
			if(shi==7&&fen==0&&miao==0)	
			{ 	flag==1	;
			    led =0;
			}
			if (k4==0)
			  {flag =0; led=1;}
				 while(k4==0);	 
		 		delayms(10);
		 		IE0=0;

			 }

	
}
void time0() interrupt 1
{
	TH0 = 0X3C;
	TL0=0XB0;  //定时器50ms,初始的的值
	count++;
	if(count ==20)
	{
	    miao++;
		count=0;
		if(miao==60)
		{
			fen ++;
			miao=0;	
		}
		if(fen==60)
		{	
			 shi++;
			fen =0;
			miao =0;
		}
	}
}	

void delayms(int ms)
	{	  int i,j;
	   for(j=0;j<ms;j++)
	    for(i=0;i<180;i++);

	}
	 bit check_busy()
	 {	  bit stat;
		  rs=0;//读状态
		  rw=1;//读有效
		  e=0;
		  delayms(1);
		  e=1;
		  delayms(1);
		  stat=P0&0x80;
		  e=0;
		  delayms(1);
		  return stat;
	 }

	 void lcdcom(unsigned char com)
	 {	  while( check_busy());
		  rs=0;//写指令
		  rw=0;//写有效
		  e=0;
		  delayms(1);
		  P0=com;	//指令,此时1602并不接收
		  e=1;		   //产生下降沿,1602接收指令
		  delayms(1);
		  e=0;
		  delayms(1);		
	 }
	 void lcddat(unsigned char dat)
	 {	  while( check_busy());
		  rs=1;//写数据
		  rw=0;//写有效
		  e=0;
		  delayms(1);
		  P0=dat;	//数据,此时1602并不接收
		  e=1;		   //产生下降沿,1602接收数据
		  delayms(1);
		  e=0;
		  delayms(1);		
	 }


蜂鸣器响
 #include <reg51.h>

	sbit k4=P3^3;
	sbit led = P2^1;

	 sbit rs=P2^6;
	 sbit rw=P2^5;
	 sbit e=P2^7;

	 char flag=0,count=0;
	 char i;
	 int miao = 58;
	 int fen = 59;
	 int shi = 6;
	 sbit beep=P1^5;//定义蜂鸣器的引脚
   	void delayms(int ms);
	bit check_busy();
	void lcdcom(unsigned char com);
	void lcddat(unsigned char dat);
   void main()
   {
	lcdcom(0x01);//清屏
	lcdcom(0x06);//光标右移,地址自动加1
	lcdcom(0x0e);//显示开,有光标,光标不闪烁
	lcdcom(0x38);//8位数据总线,2行显示,5*7点阵




	lcdcom(0x80);
	lcddat('t');
	lcddat('i');
	lcddat('m');
	lcddat('e');
	lcddat(':');

	 
	TMOD = 0X01; //定时器0 工作方式为1,16位定时器
    TH0 = 0X3C;
 	TL0=0xB0;//定时器50ms,设置初始值
 	ET0=1;  //打开定时器0的中断开关(允许定时器0中断)
 	EA=1;  //总中断打开
 	TR0=1;  //启动定时器0



	 while(1)
	{
			lcdcom(0xc6);
			lcddat(0+0x30);
			lcddat(shi%10+0x30);
			lcddat(':');
            lcddat(fen/10+0x30);
			lcddat(fen%10+0x30);
			lcddat(':');
			lcddat(miao/10+0x30);
			lcddat(miao%10+0x30);
		
			if(	k4==0)     
		  {	
		  	delayms(1);
		  	flag=0; 
		 	while(k4==0);
			delayms(1);	 
	      }
	}

	
}
void time0() interrupt 1
{
	TH0 = 0X3C;
	TL0=0XB0;  //定时器50ms,初始的的值
	count++;
	if(count ==20)
	{
	    miao++;
		count=0;
		if(miao==60)
		{
			fen ++;
			miao++;	
		}
		if(fen==60)
		{	
			 shi++;
			fen =0;
			miao =0;
		}
		
	} 
	if(shi==7&&fen==0&&miao==0)
				   flag=1	;
	 if (flag ==1) beep=~beep;
		 
}	

void delayms(int ms)
	{	  int i,j;
	   for(j=0;j<ms;j++)
	    for(i=0;i<60;i++);

	}
	 bit check_busy()
	 {	  bit stat;
		  rs=0;//读状态
		  rw=1;//读有效
		  e=0;
		  delayms(1);
		  e=1;
		  delayms(1);
		  stat=P0&0x80;
		  e=0;
		  delayms(1);
		  return stat;
	 }

	 void lcdcom(unsigned char com)
	 {	  while( check_busy());
		  rs=0;//写指令
		  rw=0;//写有效
		  e=0;
		  delayms(1);
		  P0=com;	//指令,此时1602并不接收
		  e=1;		   //产生下降沿,1602接收指令
		  delayms(1);
		  e=0;
		  delayms(1);		
	 }
	 void lcddat(unsigned char dat)
	 {	  while( check_busy());
		  rs=1;//写数据
		  rw=0;//写有效
		  e=0;
		  delayms(1);
		  P0=dat;	//数据,此时1602并不接收
		  e=1;		   //产生下降沿,1602接收数据
		  delayms(1);
		  e=0;
		  delayms(1);		
	 }


蜂鸣器的用法:
	beep 是P1^5引脚,给高低电频(自定义脉冲信号)使蜂鸣器响起,
给低电平就响,高电平不响。
	如果蜂鸣器的声音过小时,Because 是程序中的延迟时间过长。
这时需要延迟时间缩短,尽量减少用while循环。

如果有帮助的话,请点个赞~~~

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值