资源简介

本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。系统以AT89S52单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。温度采集选用DS18B20芯片,万年历采用直观的数字显示,数据显示采用1602A液晶显示模块,可以在LCD上同时显示年、月、日、星期、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。

资源截图

代码片段和文件信息

#include
#include 
#define uint unsigned int
#define uchar unsigned char
uchar amiaoshifenriyueniankeynumtemp/*时间分段标志*/year1month1day1;

#define h1 0x80 //LCD第一行的初始化位置
#define h2 0x80+0x40 //LCD第二行初始化位置

//定义1602相关管脚
sbit rs=P1^2;
sbit en=P1^0;
sbit rw=P1^1;

//DS1302芯片的管脚定义
sbit IO=P1^5;
sbit SCLK=P1^4;
sbit RST=P1^6;

sbit ACC0=ACC^0;//设置累加器
sbit ACC7=ACC^7;

//按键
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;

void delay2(uint s)//延时,用于温度程序部分
{
while(s--);//区分i,用s表示
}

void delay(uint z)//延时函数
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void writecom(uchar com)//写入指令函数
{
rs=0;
rw=0;
P0=com;
delay2(1);
en=1;
delay2(1);
en=0;
}
void writedata(uchar dat)//写入数据函数
{
rs=1;
rw=0; 
P0=dat;
delay2(1);
en=1;
delay2(1);
en=0;
}
void print(uchar a3uchar *str)//写字符串函数(没有延时)
{
writecom(a3|0x80);
while(*str!=‘\0‘)
{
//delay(100);//延时一下
writedata(*str++);
}
*str=0;
}
void print2(uchar a2uchar *str)//用于头字条的显示延时
{
writecom(a2|0x80);
while(*str!=‘\0‘)
{
delay(130);//延时一下
writedata(*str++);
}
*str=0;
}
void lcdinit()//1602初始化函数
{
writecom(0x38);//设置为两行显示,8位显示
writecom(0x0c);//开显示,不显示光标
writecom(0x06);//光标右移
writecom(0x01);//清屏
}
/*和DS1302时钟芯片有关的函数*/

void write_byte(uchar dat)//写一个字节函数
{
ACC=dat;
RST=1;
for(a=8;a>0;a--)
{
IO=ACC0;
SCLK=0;
SCLK=1;
ACC=ACC>>1;
}
}
uchar read_byte()//读一个字节函数
{
RST=1;
for(a=8;a>0;a--)
{
ACC7=IO;
SCLK=1;
SCLK=0;
ACC=ACC>>1;
}
return (ACC);
}
void write_1302(uchar adduchar dat)//向时钟芯片写入函数,指定地址,数据
{
RST=0;
SCLK=0;
RST=1;
write_byte(add);
write_byte(dat);
SCLK=1;
RST=0;
}
uchar read_1302(uchar add)//从芯片读出数据,指定地址
{
uchar temp;
RST=0;
SCLK=0;
RST=1;
write_byte(add);
temp=read_byte();
SCLK=1;
RST=0;
return(temp);
}
uchar turnBCD(uchar bcd)//BCD码转换为十进制函数
{
uchar shijin;
shijin=bcd>>4;
return(shijin=shijin*10+(bcd&=0x0f));//返回十进制数
}
void ds1302_init()//1302时钟芯片初始化函数
{
RST=0;
SCLK=0;
write_1302(0x8e0x00);//允许写
write_1302(0x8e0x80);//打开保护
}
/*下面是相关数据的显示函数*/
//时分秒显示函数
void writetime(uchar adduchar dat)//写入时分秒
{
uchar gwsw;
gw=dat%10;//取得个位数
sw=dat/10;//取得十位数
writecom(h2+add);//第二行显示
writedata(0x30+sw);//显示该数字
writedata(0x30+gw);
}
//年月日显示函数
void writeday(uchar adduchar dat)//写入年月日函数
{
uchar gwsw;
gw=dat%10;//取得个位数字
sw=dat/10;//取得十位数字
writecom(h1+add);//在第一行显示
writedata(0x30+sw);
writedata(0x30+gw);//显示
}
//按键扫描函数
void keyscan()
{
if(key1==0)//设置键按下
{
delay(5);//延时
if(key1==0)
{
while(!key1);
keynum++;
if(keynum==8)
keynum=1;//返回
switch(keynum)
{
case 1:TR0=0;//关闭定时器
   writecom(h2+0x0b);//秒的位置
   writecom(0x0f);//设置为光标闪烁
   temp=(miao)/10*16+(miao)%10;//秒化为bcd码
   write_1302(0x8e0x00);
   write_1302(0x800x80|temp);//秒数据写入
   write_1302(0x8e0x80);
   bre

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-06-01 20:42  51单片机液晶万年历(LCD1602)万用板制作\
     目录           0  2018-06-01 20:42  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\
     文件        6204  2014-07-03 15:48  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\bitong
     文件        4684  2014-07-03 15:48  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\bitong.hex
     文件          25  2014-07-03 15:48  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\bitong.lnp
     文件       25182  2014-07-03 15:48  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\bitong.M51
     文件         190  2018-05-02 20:16  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\bitong.plg
     文件        9626  2014-07-03 15:48  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\dg.c
     文件       23633  2014-07-03 15:48  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\dg.LST
     文件       10064  2014-07-03 15:48  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\dg.OBJ
     文件         830  2014-05-25 19:29  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\dg.opt.bak
     文件        2086  2014-03-18 17:05  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\dg.Uv2.bak
     文件       55324  2018-05-02 20:16  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\dg.uvopt
     文件       13177  2014-05-25 21:13  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\dg.uvproj
     文件         818  2014-03-18 17:05  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\dg_Opt.Bak
     文件        1648  2013-06-14 14:15  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\dg_Uv2.Bak
     文件       55332  2014-12-21 22:02  51单片机液晶万年历(LCD1602)万用板制作\1-源程序\dg_uvopt.bak
     目录           0  2018-06-01 20:42  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\
     目录           0  2018-06-01 20:42  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\1602资料\
     文件      262017  2005-12-14 04:18  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\1602资料\1602液晶说明.pdf
     文件      268206  2011-06-21 11:47  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\1602资料\1602液晶资料[1].pdf
     文件     1205196  2007-01-28 21:05  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\1602资料\EN_TC1602.pdf
     文件     1347951  2010-08-18 09:54  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\1602资料\字符手册.pdf
     文件      473904  2014-05-26 21:24  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\at89c52.docx
     文件       52224  2014-05-26 23:08  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\AT89S52的中文资料.doc
     文件      324643  2010-01-14 19:33  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\DS1302.pdf
     文件      154112  2011-06-15 20:13  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\DS18B20使用手册.doc
     文件     1396755  2014-04-09 23:18  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\STC89C52中文资料.pdf
     文件      201216  2014-05-26 21:22  51单片机液晶万年历(LCD1602)万用板制作\10-芯片资料\STC89C52单片机.doc
     目录           0  2018-06-01 20:42  51单片机液晶万年历(LCD1602)万用板制作\11-参考论文\
     文件      549888  2012-10-11 16:41  51单片机液晶万年历(LCD1602)万用板制作\11-参考论文\1602万年历设计论文.doc
............此处省略92个文件信息

评论

共有 条评论