基于51单片机可以设置的闹钟

基于51单片机可以设置的闹钟

  • 项目

    • 前言
      • 所用到的元器件
      • 操作步骤
      • 程序
      • B站实物演示
  • 计划任务

  • 完成任务
    请添加图片描述

所用到的元器件

DS1302时钟模块1个,按键4个,74HC595寄存器,阴极四位数码管,有缘蜂鸣器,常闭开关1个,89C51单片机。

操作步骤

当时间设置开关按下,就可以开始设置时间,按时设置是设置小时的,按分设置是设置分钟的,需要修改时间时先设置好想设置的小时和分钟在按时间设置确认按键,需要定时时先设置好想设置的小时和分钟在按定时时设置确认按键,当实际时间等于闹钟时间时,蜂鸣器响起,就达到了时钟设置和闹钟设置的效果。

程序
//如有不懂的地方加作者Q:2188263281
#include<reg51.h>
#include<intrins.h>
#include <DS1302.h>
#define uchar unsigned char
#define uint unsigned int

void delay(uint x);

sbit SHCP=P2^0;
sbit STCP=P2^2;
sbit DS=P2^1;
sbit led=P2^3;

sbit sw1=P1^0;
sbit sw2=P1^1;
sbit sw3=P1^2;
sbit sw4=P1^3;
sbit sw5=P1^4;
sbit sw6=P1^5;

unsigned char DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char TIME[7] = {0, 0x59, 0x17, 0x15, 0x04, 0x03, 0x20};

unsigned char h,f;
unsigned char s1,s2,s3,s4;

void SendBy595(unsigned char value)
{
	unsigned char i;
	
	for(i=0;i<8;i++)
	{
		
       if(value&0x80)
	      DS=1;
	   else
	      DS=0;
		SHCP=1;
		_nop_();
		_nop_();
		SHCP=0;
		value=value<<1;
	}
}
	
void main()
{
  DS1302_Init();
	while(1)
	{
	 if(sw5 == 0)
	 {
	  if(sw1 == 0)
		{
		  delay(20);
		 if(sw1 == 0)
		 {
		   h+=1;
		   if(h>23)
		   {
			 h=0;
		   }
		   delay(200);
		 }
		}
		
		if(sw2 == 0)
		{
          delay(20);
		 if(sw2 == 0)
		 {
		   f+=1;
		   if(f>60)
		   {
			 f=0;
		   }
		   delay(200);
		 }
		}

		s1 =h/10;
		s2 =h%10;
		s3 =f/10;
	    s4 =f%10;
	    delay(8);

		 P3=0xfe;
		 SendBy595(DSY_CODE[s1]);
		 STCP=1;
	     _nop_();
		 _nop_();
		 STCP=0;
		 led = 0;
		 delay(8);
	
		 P3=0xfd;
		 SendBy595(DSY_CODE[s2]);
		 STCP=1;
	     _nop_();
		 _nop_();
		 STCP=0;
		 led = 1;
	
		 delay(8);
	
		 P3=0xfb;
		 SendBy595(DSY_CODE[s3]);
		 STCP=1;
	     _nop_();
		 _nop_();
		 STCP=0;
		 led = 0;
		 delay(8);
	
		 P3=0xf7;
		 SendBy595(DSY_CODE[s4]);
		 STCP=1;
	     _nop_();
		 _nop_();
		 STCP=0;
		 led = 0;
		 delay(8);

		 if(sw3 == 0)
		 {
		  TIME[2] = h;
	      TIME[1] = f;
          DS1302_Init();
		 }
	 }else
	 {
	 DS1302_ReadTime();
	 P3=0xfe;
	 SendBy595(DSY_CODE[TIME[2]/16]);
	 STCP=1;
     _nop_();
	 _nop_();
	 STCP=0;
	 led = 0;
	 delay(8);

	 P3=0xfd;
	 SendBy595(DSY_CODE[TIME[2]&0x0f]);
	 STCP=1;
     _nop_();
	 _nop_();
	 STCP=0;
	 led = 1;

	 delay(8);

	 P3=0xfb;
	 SendBy595(DSY_CODE[TIME[1]/16]);
	 STCP=1;
     _nop_();
	 _nop_();
	 STCP=0;
	 led = 0;
	 delay(8);

	 P3=0xf7;
	 SendBy595(DSY_CODE[TIME[1]&0x0f]);
	 STCP=1;
     _nop_();
	 _nop_();
	 STCP=0;
	 led = 0;
	 delay(8);
	 //------------------------------------------
	}
  }
}

void delay(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}

B站实物演示

https://www.bilibili.com/video/BV1UM411X7uA/?vd_source=5735c7303757c68529636ff26c7a755d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代坐电子工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值