单片机编写多功能电子时钟

本文介绍了如何使用51单片机和相关芯片如LCD1602、DS18B20等,实现一个具备万年历、闹钟、温度传感和自动报警功能的多功能电子时钟。通过提供的源代码,详细展示了时钟的初始化、时间与日期的显示、温度读取与转换、以及温度和闹钟设置等功能的实现。
摘要由CSDN通过智能技术生成

 

单片机编写多功能电子时钟

此电子时钟可实现可调时万年历.闹铃.温度传感和温度自动报警系统。

主要使用51单片机.lcd1602.DS18B20.DS1602等集成芯片。

 

源程序如下:

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int 
#define uchar unsigned char
sbit rs=P3^0;
sbit rw=P3^1;//1602读写控制
sbit e=P3^2;
sbit clk=P2^4;
sbit io=P2^5;//18b20i/o口
sbit rst=P2^6;
sbit BF=P0^7;
sbit key_system=P1^0;//模式选择
sbit key_jia=P1^1;
sbit key_jian=P1^2;
sbit key_clock=P1^3;
sbit dq=P2^7;  //1302数据的传输
sbit beep=P2^1;//蜂鸣器
bit presence;
uchar key_num,num1,num2,num0,num3;
uchar a,b,c,d,month,day,second,mini,hour,week,flag;
uchar year;
float f_temp;
uint tempds;
uchar code table[10]={"0123456789"};
uchar code table1[]="  :  :  ";
uchar code table3[]={"Mon Tue Wen Thu Fri Sat Sun"};
uchar code table_date[]="Set Date";
uchar code table_time[]="Set Time";
uchar code table_clock[]="Set Clock";
uchar code zifu_table[]="Good Luck";
uchar code tempdis_table[]="Set Temperature";
uchar code table2[]=
{0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,
0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11,
0x0f,0x09,0x09,0x09,0x0f,0x09,0x09,0x0f,
0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};
uchar  table4[ ] ={"  .   C"};
uchar temp_table[]={0x00,0x00};
uchar clock_table[]={0x00,0x00,0x00};
uchar table_temperature[]={0x00,0x00,0x00,0x00};
uchar date,clock_second,clock_mini,clock_hour;
uchar s,ss,g,gg;//设定报警温度
void delayus(uint z)
{
while(--z>0);}
void delay(uint z)
{uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);}

       

bit busytest(void)// LCD1602的初始化及有关函数的定义
{bit result;
rs=0;
rw=1;
e=1;
delayus(5);
result=BF;
e=0;
return result;}
void write_com(uint com)//1602写命令函数
{while(busytest()==1);
rs=0;
rw=0;
e=0;
delayus(2);
P0=com;
delayus(5);
e=1;
delayus(5);
e=0;}
void write_data(uint dat)//1602写数据函数
{while(busytest()==1);
rs=1;
rw=0;
e=0;
P0=dat;
delayus(5);
e=1;
delayus(5);
e=0;}
void lcd_init()//1602的初始化
{delay(15);
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x06);
delay(5);
write_com(0x0c);
delay(5);
write_com(0x01);
delay(5);}
 
 

void dsinputbyte(uchar d)//1302写入一个字节函数
{uchar i;
clk=0;
rst=1;
for(i=0;i<8;i++)
{io=d&0x01;
delayus(2);
clk=1;      
delayus(2);
clk=0;
d>>=1;
}}
uchar dsoutputbyte(void)//1302输出一个字节函数
{uchar i,datr;
clk=0;
delayus(2);
for(i=0;i<8;i++)
{datr>>=1;
if(io==1)
datr|=0x80;
clk=1;
delayus(2);
clk=0;      
delayus(2);}
return datr;}
void  write_1302(uchar add,uchar dat)//1302的写函数
{rst=0;
clk=0;
rst=1;
dsinputbyte(add);
dsinputbyte(dat);
clk=0;
rst=0;}
uc

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值