首页 > 分享 > 课程设计题三十三:基于单片机的电子钟

课程设计题三十三:基于单片机的电子钟

1)设计任务:设计一个能 显示当前的年、月、日、时、分、秒,具有闹钟功能的的电子时钟。

2)指标要求

(1)可实现12小时制和24小时制转换。

(2)年、月、日、时、分均可以单独设置,设置时该项目闪烁。 

(3)计时精度误差:≤1秒/日。

(4)液晶显示。 

(5)能实现闹钟功能。

(6)电源:1节5号干电池(1.5V)。

获取该程序的方式:

1、CSDN下载:

https://download.csdn.net/download/qq_38351824/11267293

2、关注微信公众号下载:

     ① 关注微信公众号:Tech云  

     ②

3、可以关注点赞并在下方评论,我给你邮箱发过去。

一、Protues仿真图(添加温度显示功能):

二、Protues仿真图(12-24进制转换):

三、程序源码(添加温度显示功能):

因为注释非常的全,这里就不再进行讲解了。

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

#include "E2PROM52_Sumjess.h"

#include "Dateconversion_Sumjess.h"

#include "intrins.h"

bit flag_200ms ;

bit flag_100ms ;

sbit beep = P1^4;

bit flag_beep_en;

uint clock_value;

sbit dq = P2^0;

uint temperature ;

uchar flag_nl;

uchar menu_1,menu_2;

uchar key_time,flag_value;

bit key_500ms ;

uchar n_nian,n_yue,n_ri;

#include "DS1302_Sumjess.h"

#include "LCD1602_Sumjess.h"

void write_eeprom()

{

SectorErase(0x2000);

byte_write(0x2000, fen1);

byte_write(0x2001, shi1);

byte_write(0x2002, open1);

byte_write(0x2058, a_a);

}

void read_eeprom()

{

fen1 = byte_read(0x2000);

shi1 = byte_read(0x2001);

open1 = byte_read(0x2002);

a_a = byte_read(0x2058);

}

void init_eeprom()

{

read_eeprom();

if(a_a != 1)

{

fen1 = 3;

shi1 = 8;

open1 = 1;

a_a = 1;

write_eeprom();

}

}

void init_18b20()

{

bit q;

dq = 1;

delay_uint(1);

dq = 0;

delay_uint(80);

dq = 1;

delay_uint(10);

q = dq;

delay_uint(20);

dq = 1;

}

void write_18b20(uchar dat)

{

uchar i;

for(i=0;i<8;i++)

{

dq = 0;

dq = dat & 0x01;

delay_uint(5);

dq = 1;

dat >>= 1;

}

}

uchar read_18b20()

{

uchar i,value;

for(i=0;i<8;i++)

{

dq = 0;

value >>= 1;

dq = 1;

if(dq == 1)

value |= 0x80;

delay_uint(5);

}

return value;

}

uint read_temp()

{

uint value;

uchar low;

init_18b20();

write_18b20(0xcc);

write_18b20(0x44);

delay_uint(50);

init_18b20();

write_18b20(0xcc);

write_18b20(0xbe);

EA = 0;

low = read_18b20();

value = read_18b20();

EA = 1;

value <<= 8;

value |= low;

value *= 0.625;

return value;

}

----由于篇幅的问题,只显示一部分,请下载后自行观看,程序非常的全-----

-----关注公众号免费下载-----

四、程序源码(12-24进制转换):

因为注释非常的全,这里就不再进行讲解了。

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

#include "E2PROM52_Sumjess.h"

#include "Dateconversion_Sumjess.h"

#include "intrins.h"

bit flag_200ms ;

bit flag_100ms ;

sbit beep = P1^4;

bit flag_beep_en;

uint clock_value;

uchar flag_nl,flag_n2;

uchar menu_1,menu_2;

uchar key_time,flag_value;

bit key_500ms ;

uchar n_nian,n_yue,n_ri;

#include "DS1302_Sumjess.h"

#include "LCD1602_Sumjess.h"

void write_eeprom()

{

SectorErase(0x2000);

byte_write(0x2000, fen1);

byte_write(0x2001, shi1);

byte_write(0x2002, open1);

byte_write(0x2058, a_a);

}

void read_eeprom()

{

fen1 = byte_read(0x2000);

shi1 = byte_read(0x2001);

open1 = byte_read(0x2002);

a_a = byte_read(0x2058);

}

void init_eeprom()

{

read_eeprom();

if(a_a != 1)

{

fen1 = 3;

shi1 = 8;

open1 = 1;

a_a = 1;

write_eeprom();

}

}

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i<q;i++)

for(j=0;j<120;j++);

}

void write_week(uchar hang,uchar add,uchar week)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

switch(week)

{

case 1:write_data('M');

write_data('O');

write_data('N');

break;

case 2:write_data('T');

write_data('U');

write_data('E');

break;

case 3:write_data('W');

write_data('E');

write_data('D');

break;

case 4:write_data('T');

write_data('H');

write_data('U');

break;

case 5:write_data('F');

write_data('R');

write_data('I');

break;

case 6:write_data('S');

write_data('T');

write_data('A');

break;

case 7:write_data('S');

write_data('U');

write_data('N');

break;

}

}

void init_1602_ds1302()

{

if(flag_n2 == 0)

{

write_sfm2_ds1302(1,1,shi);

write_sfm2_ds1302(1,4,fen);

write_sfm2_ds1302(1,7,miao);

write_week(2,12,week);

}

else

{

if(shi==0x20)shi=0x08;

else if(shi==0x13)shi=0x01;

else if(shi==0x14)shi=0x02;

else if(shi==0x15)shi=0x03;

else if(shi==0x16)shi=0x04;

else if(shi==0x17)shi=0x05;

else if(shi==0x18)shi=0x06;

else if(shi==0x19)shi=0x07;

else if(shi==0x21)shi=0x09;

else if(shi==0x22)shi=0x10;

else if(shi==0x23)shi=0x11;

write_sfm2_ds1302(1,1,shi);

write_sfm2_ds1302(1,4,fen);

write_sfm2_ds1302(1,7,miao);

write_week(2,12,week);

}

if(flag_nl == 0)

{

write_sfm2_ds1302(2,2,nian);

write_sfm2_ds1302(2,5,yue);

write_sfm2_ds1302(2,8,ri);

}

else

{

write_sfm2_ds1302(2,2,n_nian);

write_sfm2_ds1302(2,5,n_yue);

write_sfm2_ds1302(2,8,n_ri);

}

}

void init_time0()

{

EA = 1;

TMOD = 0X01;

ET0 = 1;

TR0 = 1;

}

void menu_dis()

{

static uchar mm,value;

if(flag_100ms == 1)

{

flag_100ms = 0;

if(open1 == 1)

{

if((miao == 0) && (fen == fen1) && (shi == shi1))

{

flag_beep_en = 1;

}

if(flag_beep_en == 1)

{

clock_value++;

if(clock_value <= 30)

beep = ~beep;

else if(clock_value > 30)

{

beep = 1;

if(clock_value > 40)

{

clock_value = 0;

}

}

value ++;

if(value >= 10)

{

value = 0;

mm++;

if(mm >= 60)

{

mm = 0;

flag_beep_en = 0;

beep = 1;

}

}

}

}

}

}

uchar key_can;

void key()

{

static uchar key_new;

key_can = 20;

P3 |= 0xff;

if((P3 & 0xff) != 0xff)

{

delay_1ms(1);

if(((P3 & 0xff) != 0xff) && (key_new == 1))

{

key_new = 0;

switch(P3 & 0xff)

{

case 0xfe: key_can = 4; break;

case 0xfd: key_can = 3; break;

case 0xfb: key_can = 2; break;

case 0xf7: key_can = 1; break;

case 0xef:key_can = 5; break;

}

}

}

else

key_new = 1;

}

void key_with()

{

if(key_can == 1)

{

menu_1++;

if(menu_1 == 1)

{

menu_2 = 1;

write_string(1,0," : : W: ");

write_string(2,0," 20 - - ");

}

if(menu_1 == 2)

{

menu_2 = 1;

write_string(1,0," set clock ");

write_string(2,0," Y 00:00 ");

}

if(menu_1 > 2)

{

menu_1 = 0;

write_guanbiao(1,2,0);

init_1602_dis_csf();

}

}

if(key_can == 2)

{

flag_200ms = 1;

if(menu_1 == 1)

{

menu_2 ++;

if(menu_2 > 7)

menu_2 = 1;

}

if(menu_1 == 2)

{

menu_2 ++;

if(menu_2 > 3)

menu_2 = 1;

}

}

if(menu_1 == 1)

{

if(menu_2 == 1)

{

if(key_can == 3)

{

shi+=0x01;

if((shi & 0x0f) >= 0x0a)

shi = (shi & 0xf0) + 0x10;

if(shi >= 0x24)

shi = 0;

}

if(key_can == 4)

{

if(shi == 0x00)

shi = 0x24;

if((shi & 0x0f) == 0x00)

shi = (shi | 0x0a) - 0x10;

shi -- ;

}

}

if(menu_2 == 2)

{

if(key_can == 3)

{

fen+=0x01;

if((fen & 0x0f) >= 0x0a)

fen = (fen & 0xf0) + 0x10;

if(fen >= 0x60)

fen = 0;

}

if(key_can == 4)

{

if(fen == 0x00)

fen = 0x5a;

if((fen & 0x0f) == 0x00)

fen = (fen | 0x0a) - 0x10;

fen -- ;

}

}

if(menu_2 == 3)

{

if(key_can == 3)

{

miao+=0x01;

if((miao & 0x0f) >= 0x0a)

miao = (miao & 0xf0) + 0x10;

if(miao >= 0x60)

miao = 0;

}

if(key_can == 4)

{

if(miao == 0x00)

miao = 0x5a;

if((miao & 0x0f) == 0x00)

miao = (miao | 0x0a) - 0x10;

miao -- ;

}

}

if(menu_2 == 4)

{

if(key_can == 3)

{

week+=0x01;

if((week & 0x0f) >= 0x0a)

week = (week & 0xf0) + 0x10;

if(week >= 0x08)

week = 1;

}

if(key_can == 4)

{

if(week == 0x01)

week = 0x08;

if((week & 0x0f) == 0x00)

week = (week | 0x0a) - 0x10;

week -- ;

}

}

if(menu_2 == 5)

{

if(key_can == 3)

{

nian+=0x01;

if((nian & 0x0f) >= 0x0a)

nian = (nian & 0xf0) + 0x10;

if(nian >= 0x9a)

nian = 1;

}

if(key_can == 4)

{

if(nian == 0x01)

nian = 0x9a;

if((nian & 0x0f) == 0x00)

nian = (nian | 0x0a) - 0x10;

nian -- ;

}

}

if(menu_2 == 6)

{

if(key_can == 3)

{

yue+=0x01;

if((yue & 0x0f) >= 0x0a)

yue = (yue & 0xf0) + 0x10;

if(yue >= 0x13)

yue = 1;

}

if(key_can == 4)

{

if(yue == 0x01)

yue = 0x13;

if((yue & 0x0f) == 0x00)

yue = (yue | 0x0a) - 0x10;

yue -- ;

}

}

if(menu_2 == 7)

{

if(key_can == 3)

{

ri+=0x01;

if((ri & 0x0f) >= 0x0a)

ri = (ri & 0xf0) + 0x10;

if(ri >= 0x32)

ri = 0;

}

if(key_can == 4)

{

if(ri == 0x01)

ri = 0x32;

if((ri & 0x0f) == 0x00)

ri = (ri | 0x0a) - 0x10;

ri -- ;

}

}

write_sfm2_ds1302(1,2,shi);

write_sfm2_ds1302(1,5,fen);

write_sfm2_ds1302(1,8,miao);

write_sfm1(1,14,week);

write_sfm2_ds1302(2,3,nian);

write_sfm2_ds1302(2,6,yue);

write_sfm2_ds1302(2,9,ri);

switch(menu_2)

{

case 1: write_guanbiao(1,2,1); break;

case 2: write_guanbiao(1,5,1); break;

case 3: write_guanbiao(1,8,1); break;

case 4: write_guanbiao(1,14,1); break;

case 5: write_guanbiao(2,3,1); break;

case 6: write_guanbiao(2,6,1); break;

case 7: write_guanbiao(2,9,1); break;

}

write_time();

}

if(menu_1 == 2)

{

if(menu_2 == 1)

{

if(key_can == 3)

{

open1 = 1;

}

if(key_can == 4)

{

open1 = 0;

}

}

if(menu_2 == 2)

{

if(key_can == 3)

{

shi1+=0x01;

if((shi1 & 0x0f) >= 0x0a)

shi1 = (shi1 & 0xf0) + 0x10;

if(shi1 >= 0x24)

shi1 = 0;

}

if(key_can == 4)

{

if(shi1 == 0x00)

shi1 = 0x24;

if((shi1 & 0x0f) == 0x00)

shi1 = (shi1 | 0x0a) - 0x10;

shi1 -- ;

}

}

if(menu_2 == 3)

{

if(key_can == 3)

{

fen1+=0x01;

if((fen1 & 0x0f) >= 0x0a)

fen1 = (fen1 & 0xf0) + 0x10;

if(fen1 >= 0x60)

fen1 = 0;

}

if(key_can == 4)

{

if(fen1 == 0x00)

fen1 = 0x5a;

if((fen1 & 0x0f) == 0x00)

fen1 = (fen1 | 0x0a) - 0x10;

fen1 -- ;

}

}

if(open1 == 1)

write_string(2,4,"Y");

else

write_string(2,4,"N");

write_sfm2_ds1302(2,7,shi1);

write_sfm2_ds1302(2,10,fen1);

switch(menu_2)

{

case 1: write_guanbiao(2,4,1); break;

case 2: write_guanbiao(2,7,1); break;

case 3: write_guanbiao(2,10,1); break;

}

write_eeprom();

}

}

void main()

{

beep = 0;

delay_1ms(150);

P0 = P1 = P2 = P3 = 0xff;

init_time0();

init_1602();

init_1602_dis_csf();

init_eeprom();

delay_1ms(650);

while(1)

{

key();

if(key_can < 10)

{

if(flag_beep_en == 0)

key_with();

else

{

flag_beep_en = 0;

beep = 1;

clock_value = 0;

read_time();

}

if(menu_1 == 0)

{

if(key_can == 4)

{

flag_nl = ~flag_nl;

if(flag_nl == 0)

write_string(2,0,"2016");

else

write_string(2,0,"N ");

}

else if(key_can == 5)

{

flag_n2 = ~flag_n2;

}

}

}

if(flag_200ms == 1)

{

flag_200ms = 0;

if(menu_1 == 0)

{

read_time();

init_1602_ds1302();

}

}

menu_dis();

delay_1ms(1);

}

}

void time0() interrupt 1

{

static uchar value;

TH0 = 0X3C;

TL0 = 0XB0;

value ++;

if((value % 2) == 0)

flag_100ms = 1;

if(value >= 6)

{

value = 0;

flag_200ms = 1;

}

}

相关知识

课程设计宠物自动喂食机设计
智能鱼缸控制系统:基于51单片机的毕业设计源码推荐
《基于单片机的智能水族箱系统设计毕业论文》.doc
基于单片机自动宠物喂食器设计.doc
基于单片机的宠物投喂系统模板,基于单片机的宠物投喂系统文档下载
基于单片机的智能鱼缸
【毕设选题】基于C51单片机的毕业设计题目项目汇总
基于单片机的智能宠物喂食系统设计
单片机设计:基于单片机的智能鱼缸控制系统的设计与实现
基于单片机的宠物喂食系统设计

网址: 课程设计题三十三:基于单片机的电子钟 https://m.mcbbbk.com/newsview1103663.html

所属分类:萌宠日常
上一篇: 深圳最大的宠物市场在哪里?深圳买
下一篇: 春节需求猛增 盒马北上广深上线宠