資源簡介
本設(shè)計由數(shù)據(jù)顯示模塊、溫度采集模塊、時間處理模塊和調(diào)整設(shè)置模塊四個模塊組成。系統(tǒng)以AT89S52單片機(jī)為控制器,以串行時鐘日歷芯片DS1302記錄日歷和時間,它可以對年、月、日、時、分、秒進(jìn)行計時,還具有閏年補(bǔ)償?shù)榷喾N功能。溫度采集選用DS18B20芯片,萬年歷采用直觀的數(shù)字顯示,數(shù)據(jù)顯示采用1602A液晶顯示模塊,可以在LCD上同時顯示年、月、日、星期、時、分、秒,還具有時間校準(zhǔn)等功能。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,具有廣闊的市場前景。
代碼片段和文件信息
#include
#include?
#define?uint?unsigned?int
#define?uchar?unsigned?char
uchar?amiaoshifenriyueniankeynumtemp/*時間分段標(biāo)志*/year1month1day1;
#define?h1?0x80?//LCD第一行的初始化位置
#define?h2?0x80+0x40?//LCD第二行初始化位置
//定義1602相關(guān)管腳
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;//設(shè)置累加器
sbit?ACC7=ACC^7;
//按鍵
sbit?key1=P3^2;
sbit?key2=P3^3;
sbit?key3=P3^4;
void?delay2(uint?s)//延時,用于溫度程序部分
{
while(s--);//區(qū)分i,用s表示
}
void?delay(uint?z)//延時函數(shù)
{
uint?xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void?writecom(uchar?com)//寫入指令函數(shù)
{
rs=0;
rw=0;
P0=com;
delay2(1);
en=1;
delay2(1);
en=0;
}
void?writedata(uchar?dat)//寫入數(shù)據(jù)函數(shù)
{
rs=1;
rw=0;?
P0=dat;
delay2(1);
en=1;
delay2(1);
en=0;
}
void?print(uchar?a3uchar?*str)//寫字符串函數(shù)(沒有延時)
{
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初始化函數(shù)
{
writecom(0x38);//設(shè)置為兩行顯示,8位顯示
writecom(0x0c);//開顯示,不顯示光標(biāo)
writecom(0x06);//光標(biāo)右移
writecom(0x01);//清屏
}
/*和DS1302時鐘芯片有關(guān)的函數(shù)*/
void?write_byte(uchar?dat)//寫一個字節(jié)函數(shù)
{
ACC=dat;
RST=1;
for(a=8;a>0;a--)
{
IO=ACC0;
SCLK=0;
SCLK=1;
ACC=ACC>>1;
}
}
uchar?read_byte()//讀一個字節(jié)函數(shù)
{
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)//向時鐘芯片寫入函數(shù),指定地址,數(shù)據(jù)
{
RST=0;
SCLK=0;
RST=1;
write_byte(add);
write_byte(dat);
SCLK=1;
RST=0;
}
uchar?read_1302(uchar?add)//從芯片讀出數(shù)據(jù),指定地址
{
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碼轉(zhuǎn)換為十進(jìn)制函數(shù)
{
uchar?shijin;
shijin=bcd>>4;
return(shijin=shijin*10+(bcd&=0x0f));//返回十進(jìn)制數(shù)
}
void?ds1302_init()//1302時鐘芯片初始化函數(shù)
{
RST=0;
SCLK=0;
write_1302(0x8e0x00);//允許寫
write_1302(0x8e0x80);//打開保護(hù)
}
/*下面是相關(guān)數(shù)據(jù)的顯示函數(shù)*/
//時分秒顯示函數(shù)
void?writetime(uchar?adduchar?dat)//寫入時分秒
{
uchar?gwsw;
gw=dat%10;//取得個位數(shù)
sw=dat/10;//取得十位數(shù)
writecom(h2+add);//第二行顯示
writedata(0x30+sw);//顯示該數(shù)字
writedata(0x30+gw);
}
//年月日顯示函數(shù)
void?writeday(uchar?adduchar?dat)//寫入年月日函數(shù)
{
uchar?gwsw;
gw=dat%10;//取得個位數(shù)字
sw=dat/10;//取得十位數(shù)字
writecom(h1+add);//在第一行顯示
writedata(0x30+sw);
writedata(0x30+gw);//顯示
}
//按鍵掃描函數(shù)
void?keyscan()
{
if(key1==0)//設(shè)置鍵按下
{
delay(5);//延時
if(key1==0)
{
while(!key1);
keynum++;
if(keynum==8)
keynum=1;//返回
switch(keynum)
{
case?1:TR0=0;//關(guān)閉定時器
???writecom(h2+0x0b);//秒的位置
???writecom(0x0f);//設(shè)置為光標(biāo)閃爍
???temp=(miao)/10*16+(miao)%10;//秒化為bcd碼
???write_1302(0x8e0x00);
???write_1302(0x800x80|temp);//秒數(shù)據(jù)寫入
???write_1302(0x8e0x80);
???bre
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-06-01?20:42??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\
?????目錄???????????0??2018-06-01?20:42??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\
?????文件????????6204??2014-07-03?15:48??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\bitong
?????文件????????4684??2014-07-03?15:48??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\bitong.hex
?????文件??????????25??2014-07-03?15:48??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\bitong.lnp
?????文件???????25182??2014-07-03?15:48??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\bitong.M51
?????文件?????????190??2018-05-02?20:16??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\bitong.plg
?????文件????????9626??2014-07-03?15:48??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\dg.c
?????文件???????23633??2014-07-03?15:48??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\dg.LST
?????文件???????10064??2014-07-03?15:48??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\dg.OBJ
?????文件?????????830??2014-05-25?19:29??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\dg.opt.bak
?????文件????????2086??2014-03-18?17:05??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\dg.Uv2.bak
?????文件???????55324??2018-05-02?20:16??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\dg.uvopt
?????文件???????13177??2014-05-25?21:13??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\dg.uvproj
?????文件?????????818??2014-03-18?17:05??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\dg_Opt.Bak
?????文件????????1648??2013-06-14?14:15??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\dg_Uv2.Bak
?????文件???????55332??2014-12-21?22:02??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\1-源程序\dg_uvopt.bak
?????目錄???????????0??2018-06-01?20:42??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\
?????目錄???????????0??2018-06-01?20:42??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\1602資料\
?????文件??????262017??2005-12-14?04:18??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\1602資料\1602液晶說明.pdf
?????文件??????268206??2011-06-21?11:47??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\1602資料\1602液晶資料[1].pdf
?????文件?????1205196??2007-01-28?21:05??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\1602資料\EN_TC1602.pdf
?????文件?????1347951??2010-08-18?09:54??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\1602資料\字符手冊.pdf
?????文件??????473904??2014-05-26?21:24??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\at89c52.docx
?????文件???????52224??2014-05-26?23:08??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\AT89S52的中文資料.doc
?????文件??????324643??2010-01-14?19:33??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\DS1302.pdf
?????文件??????154112??2011-06-15?20:13??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\DS18B20使用手冊.doc
?????文件?????1396755??2014-04-09?23:18??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\STC89C52中文資料.pdf
?????文件??????201216??2014-05-26?21:22??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\10-芯片資料\STC89C52單片機(jī).doc
?????目錄???????????0??2018-06-01?20:42??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\11-參考論文\
?????文件??????549888??2012-10-11?16:41??51單片機(jī)液晶萬年歷(LCD1602)萬用板制作\11-參考論文\1602萬年歷設(shè)計論文.doc
............此處省略92個文件信息
評論
共有 條評論