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循环。

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

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Arduino Uno和LCD1602以及DS18B20显示当前环境温度的Arduino代码: ``` #include <OneWire.h> //引用OneWire库 #include <LiquidCrystal.h> //引用LCD库 //定义DS18B20引脚 #define DS18B20_PIN 2 //初始化LCD LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //这里的引脚根据你的实际连线来设置 //初始化OneWire OneWire oneWire(DS18B20_PIN); void setup() { //初始化LCD lcd.begin(16, 2); lcd.print("Temp:"); } void loop() { //读取DS18B20温度 int16_t raw; uint8_t data[9]; oneWire.reset(); oneWire.write(0xCC); oneWire.write(0x44); delay(800); oneWire.reset(); oneWire.write(0xCC); oneWire.write(0xBE); for (uint8_t i = 0; i < 9; i++) { data[i] = oneWire.read(); } raw = (data[1] << 8) | data[0]; float temperature = (float)raw / 16.0; //显示温度到LCD lcd.setCursor(6, 0); lcd.print(temperature, 1); lcd.write(0xDF); //显示温度符号 lcd.print("C"); delay(1000); //每秒更新一次温度 } ``` 在这个代码中,我们使用了OneWire库来读取DS18B20温度传感器的温度数据,并使用LiquidCrystal库来控制LCD显示。在`setup()`函数中,我们初始化了LCD,并在第一行显示"Temp:"。在`loop()`函数中,我们使用`OneWire`库读取DS18B20传感器的温度数据,并将温度值显示在LCD的第一行。在第二行,我们显示了温度符号"°C"。最后,我们通过`delay(1000)`函数让温度每秒更新一次。 请注意,在使用上述代码之前,您需要先安装OneWire和LiquidCrystal库。在Arduino IDE中,打开“工具”->“库管理器”,搜索并安装这两个库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值