基于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