資源簡介
用51單片機完成的數(shù)字萬年歷同時帶數(shù)字溫度計,程序完整,自帶proteus仿真圖。

代碼片段和文件信息
#include
#include“DS18B20_3.H“
#define?uint?unsigned?int
#define?uchar?unsigned?char
uchar?amiaoshifenriyuenianweekflagkey1ntemp;
//flag用于讀取頭文件中的溫度值,和顯示溫度值
#define?yh?0x80?//LCD第一行的初始位置因為LCD1602字符地址首位D7恒定為1(100000000=80)
#define?er?0x80+0x40?//LCD第二行初始位置(因為第二行第一個字符位置地址是0x40)
//液晶屏的與C51之間的引腳連接定義(顯示數(shù)據(jù)線接C51的P0口)
sbit?rs=P2^0;
sbit?en=P2^2;
sbit?rw=P2^1;?//如果硬件上rw接地,就不用寫這句和后面的rw=0了
sbit?led=P2^6;?//LCD背光開關(guān)
//DS1302時鐘芯片與C51之間的引腳連接定義
sbit?IO=P1^1;
sbit?SCLK=P1^0;
sbit?RST=P1^2;
sbit?ACC0=ACC^0;
sbit?ACC7=ACC^7;
/************************************************************
ACC累加器=A
ACC.0=E0H?
ACC.0就是ACC的第0位。Acc可以位尋址。
累加器ACC是一個8位的存儲單元,是用來放數(shù)據(jù)的。但是,這個存儲單元有其特殊的地位,
是單片機中一個非常關(guān)鍵的單元,很多運算都要通過ACC來進行。以后在學(xué)習(xí)指令時,
常用A來表示累加器。但有一些地方例外,比如在PUSH指令中,就必須用ACC這樣的名字。
一般的說法,A代表了累加器中的內(nèi)容、而ACC代表的是累加器的地址。?
***************************************************************/
//校時按鍵與C51的引腳連接定義
sbit?key1=P1^5;??//設(shè)置鍵
sbit?key2=P1^6;??//加鍵
sbit?key3=P1^7;??//減鍵
sbit?buzzer=P1^3;//蜂鳴器,通過三極管9012驅(qū)動,端口低電平響
/**************************************************************/
uchar?code?tab1[]={“20??-??-???“};?//年顯示的固定字符
uchar?code?tab2[]={“??:??:??“};//時間顯示的固定字符
//延時函數(shù),后面經(jīng)常調(diào)用
void?delay(uint?xms)//延時函數(shù),有參函數(shù)
{
uint?xy;
for(x=xms;x>0;x--)
?for(y=110;y>0;y--);
}
/********液晶寫入指令函數(shù)與寫入數(shù)據(jù)函數(shù),以后可調(diào)用**************/
/*在這個程序中,液晶寫入有關(guān)函數(shù)會在DS1302的函數(shù)中調(diào)用,所以液晶程序要放在前面*/
write_1602com(uchar?com)//****液晶寫入指令函數(shù)****
{
rs=0;//數(shù)據(jù)/指令選擇置為指令
rw=0;?//讀寫選擇置為寫
P0=com;//送入數(shù)據(jù)
delay(1);
en=1;//拉高使能端,為制造有效的下降沿做準(zhǔn)備
delay(1);
en=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
}
write_1602dat(uchar?dat)//***液晶寫入數(shù)據(jù)函數(shù)****
{
rs=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù)
rw=0;?//讀寫選擇置為寫
P0=dat;//送入數(shù)據(jù)
delay(1);
en=1;?//en置高電平,為制造下降沿做準(zhǔn)備
delay(1);
en=0;?//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
}
lcd_init()//***液晶初始化函數(shù)****
{
write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數(shù)據(jù)
write_1602com(0x0c);//開顯示不顯示光標(biāo)
write_1602com(0x06);//整屏不移動,光標(biāo)自動右移
write_1602com(0x01);//清顯示
write_1602com(yh+1);//日歷顯示固定符號從第一行第1個位置之后開始顯示
for(a=0;a<14;a++)
{
write_1602dat(tab1[a]);//向液晶屏寫日歷顯示的固定符號部分
//delay(3);
}
write_1602com(er+2);//時間顯示固定符號寫入位置,從第2個位置后開始顯示
for(a=0;a<8;a++)
{
write_1602dat(tab2[a]);//寫顯示時間固定符號,兩個冒號
//delay(3);
}
}
/*********************over***********************/
/***************DS1302有關(guān)子函數(shù)********************/
void?write_byte(uchar?dat)//寫一個字節(jié)
{
ACC=dat;
RST=1;
for(a=8;a>0;a--)
{
IO=ACC0;
SCLK=0;
SCLK=1;
ACC=ACC>>1;
}
}
uchar?read_byte()//讀一個字節(jié)
{
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)//向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù)
{
RST=0;
SCLK=0;
RST=1;
write_byte(add);
write_byte(dat);
SCLK=1;
RST=0;
}
uchar?read_1302(uchar?add)//從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址
{
uchar?temp;
RST=0;
SCLK=0;
RST=1;
write_byte(add);
temp=read_byte();
SCLK=1;
RST=0;
return(temp);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????909??2010-01-08?21:42??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd?1302.PWI
????.......??????1038??2010-01-10?23:18??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602_Opt.Bak
?????文件??????88627??2010-01-10?21:54??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\Last?Loaded?lcd1602.DBK
?????文件??????85538??2009-03-12?19:53??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\Backup?Of?lcd?1302.DBK
?????文件????????128??2010-01-10?23:23??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602.plg
?????文件??????17276??2010-01-10?23:23??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602.c
?????文件??????35589??2010-01-10?23:23??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602.M51
?????文件???????6055??2010-01-10?23:23??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602.hex
?????文件??????85836??2009-03-17?18:55??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\Last?Loaded?lcd?1302.DBK
?????文件???????1007??2010-01-10?23:51??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\說明.txt
?????文件???????1662??2010-01-09?00:27??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602.Uv2
?????文件??????97907??2010-01-10?23:42??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602.DSN
?????文件???????3884??2010-01-09?00:11??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\LCD18B20.h
?????文件???????1383??2010-01-10?23:55??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602.PWI
?????文件???????3765??2010-01-08?23:48??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\DS18B20_3.H
?????文件?????????46??2010-01-10?23:23??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602.lnp
?????文件??????27455??2010-01-10?23:23??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602.LST
?????文件??????33289??2010-01-10?23:23??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602.OBJ
?????文件??????27996??2010-01-10?23:23??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602
?????文件???????1035??2010-01-10?23:23??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)\lcd1602.Opt
?????目錄??????????0??2010-01-09?00:34??1602+ds1302+18B20萬年歷顯示溫度星期(完全通過)
-----------?---------??----------?-----??----
???????????????520425????????????????????21
評論
共有 條評論