版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
北京郵電大學(xué)
單片機(jī)小學(xué)期實(shí)驗(yàn)報(bào)告
2012年9月12日
目錄
1硬件設(shè)計(jì)---------------------------------------3
1.1設(shè)計(jì)要求---------------------------------------------3
1.2硬件框圖---------------------------------------------3
1.3硬件選擇---------------------------------------------3
2軟件設(shè)計(jì)----------------------------------------6
2.1編程環(huán)境及語言----------------------------------------6
2.2程序框圖----------------------------------------------6
3電路設(shè)計(jì)---------------------------------------6
3.1DS1302電路--------------------------------------------6
3.2LCD1602電路------------------------------------------7
3.34*4鍵盤電路-------------------------------------------7
3.4蜂鳴器電路---------------------------------------------8
3.5綜合電路-----------------------------------------------8
4程序設(shè)計(jì)---------------------------------------9
5操作方法---------------------------------------37
6運(yùn)行結(jié)果---------------------------------------37
7實(shí)驗(yàn)過程排錯(cuò)------------------------------------38
8心得體會(huì)及建議---------------------------------38
8.1心得體會(huì)-----------------------------------------------38
8.2建議---------------------------------------------------38
9附錄-------------------------------------------38
9.1組內(nèi)分工-----------------------------------------------38
9.2參考文獻(xiàn)-----------------------------------------------38
1硬件設(shè)計(jì)
1.1設(shè)計(jì)要求
實(shí)現(xiàn)年月日、時(shí)分秒、星期的顯示功能,鬧鈴功能。用鍵盤來實(shí)現(xiàn)日期和時(shí)間的調(diào)整功
能,調(diào)整要求星期能自動(dòng)更新,能實(shí)現(xiàn)位調(diào),且閏年時(shí)2月份的天數(shù)自動(dòng)變?yōu)?9。顯示格
式:四位年,兩位月,兩位日,星期顯示數(shù)字,兩位時(shí),兩位分,兩位秒。比如:
YYYY-MM-DDX
HH:MM:SS
鬧鈴要求用鍵盤定時(shí)間,到時(shí)間后蜂鳴器響5s左右。
1.2硬件框圖
日期時(shí)間由硬件軟件結(jié)合產(chǎn)生;鍵盤完成當(dāng)前日期時(shí)間的調(diào)整和鬧鈴定時(shí)功能。過程與
結(jié)果由控制芯片分別輸出到顯示器上,鬧鈴鈴聲設(shè)為蜂鳴器鳴叫。
1.3硬件選擇
1).顯示模塊
由于八段數(shù)碼管連線多且復(fù)雜,因此選擇的是ds1602液晶顯示屏。
八段數(shù)碼管的優(yōu)點(diǎn):亮度高,顯示大。驅(qū)動(dòng)部份的軟件簡(jiǎn)單;缺點(diǎn):與液晶相比,耗電
及體積大。數(shù)碼管只能單純的顯示數(shù)字,不能生動(dòng)的表達(dá)各個(gè)參數(shù)的信息,消耗電力也比led
液晶顯示器大。
LCD液晶顯示器它是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊,在單
片機(jī)系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個(gè)優(yōu)點(diǎn):
顯示質(zhì)量高,由于液晶顯示器每一個(gè)點(diǎn)在收到信號(hào)后就一直保持那種色彩和亮度,恒定
發(fā)光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點(diǎn)。因此,液晶顯示器畫質(zhì)
高且不會(huì)閃爍。
數(shù)字式接口,液晶顯示器都是數(shù)字式的,和單片機(jī)系統(tǒng)的接口更加簡(jiǎn)單可靠,操作更加
方便。
體積小、重量輕,液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來達(dá)到顯示的目的,
在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。
功耗低,相對(duì)而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動(dòng)IC上,因而耗
電量比其它顯示器要少得多。Led液晶能一屏把本設(shè)計(jì)所要顯示的信息表達(dá)完整。而且led
耗電小,體積小很適合與室內(nèi)使用。
本設(shè)計(jì)的要求日期時(shí)間以數(shù)字表示、星期用3位英文字符表示共21個(gè)字符,lcd1602
能顯示32個(gè)字符,足以完成顯示功能。Lcdl602有16個(gè)引腳,各個(gè)引腳功能見下表:
引腳號(hào)引腳名電平輸入/輸出作用
1VSS電源地
2VDDVcc電源(+5v)
3VEE對(duì)比調(diào)整電壓
4RS0/1輸入0=輸入指令,1=輸入數(shù)據(jù)
5R/W0/1輸入0=向led寫入數(shù)據(jù)或指令
1=從led讀取數(shù)據(jù)
6E1,1->0輸入使能信號(hào),1=讀取信息
1->0(下降沿)執(zhí)行指令
7DB00/1輸入/輸出數(shù)據(jù)總線lineO
8DB10/1輸入/輸出數(shù)據(jù)總線linel
9DB20/1輸入/輸出數(shù)據(jù)總線line2
10DB30/1輸入/輸出數(shù)據(jù)總線line3
11DB40/1輸入/輸出數(shù)據(jù)總線line4
12DB50/1輸入/輸出數(shù)據(jù)總線line5
13DB60/1輸入/輸出數(shù)據(jù)總線line6
14DB70/1輸入/輸出數(shù)據(jù)總線line7
15AVccLed背光正極
14KLed背光負(fù)極
表ITlcdl602引腳及功能
2).控制芯片
學(xué)校提供的Atmegal6芯片
高性能、低功耗的8位AVR微處理器
先進(jìn)的RISC結(jié)構(gòu)
131條指令
大多數(shù)指令執(zhí)行時(shí)間為單個(gè)時(shí)鐘周期
32個(gè)8位通用工作寄存器
全靜態(tài)工作
工作于16MHz時(shí)性能高達(dá)16MIPS
只需兩個(gè)時(shí)鐘周期的硬件乘法器
非易失性程序和數(shù)據(jù)存儲(chǔ)器
16K字節(jié)的系統(tǒng)內(nèi)可編程Flash,擦寫壽命:10,000次
具有獨(dú)立鎖定位的可選Boot代碼區(qū),通過片上Boot程序?qū)崿F(xiàn)系統(tǒng)內(nèi)編程,真正的同時(shí)讀寫操
作
512字節(jié)的EEPROM,擦寫壽命:100,000次
1K字節(jié)的片內(nèi)SRAM
可以對(duì)鎖定位進(jìn)行編程以實(shí)現(xiàn)用戶程序的加密
JTAG接口(與IEEE1149.1標(biāo)準(zhǔn)兼容)
符合JTAG標(biāo)準(zhǔn)的邊界掃描功能
支持?jǐn)U展的片內(nèi)調(diào)試功能
通過JTAG接口實(shí)現(xiàn)對(duì)Flash、EEPROM、熔絲位和鎖定位的編程
140
P1.0VCC
239
Pl.lPO.O(ADO)
338
Pl.2PO.l(ADl)
437
Pl.3P0.2(AD2)
536
Pl.4P0.3(AD3)
635
Pl.5P0.4(AD4)
734
Pl.6P().5(AD5)
833
Pl.7P0.6(AD6)
9八32
RSTP0J1AD7)
1031
P3.()(RXD)EA/VPP
1130
P3.KTXD)ALE/PROG
1229
P3.2(INT0)PSEN
1328
P3.3(INT1)P2.7(A15)
1427
P3.4(T0)P2.6(A14)
1526
P3.5(T1)P2.5(A13)
1625
P3.6(WR)P2.4(A12)
1724
P3.7(RD)P2.3(A11)
1823
XTAL2P2.2(A10)
1922
XTAL1P2.1(A9)
2021
GNDP2.0(A8)
ATMEGA16的管腳
3).日期時(shí)間生成模塊
低功耗時(shí)鐘芯片DS1302可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏年補(bǔ)償?shù)?/p>
多種功能。DS1302用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄上,能實(shí)現(xiàn)
數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄。這種記錄對(duì)長(zhǎng)時(shí)間的連續(xù)測(cè)控系統(tǒng)結(jié)果的分析以及對(duì)異
常數(shù)據(jù)出現(xiàn)的原因的查找有重要意義。
采用DS1302作為記錄測(cè)控系統(tǒng)中的數(shù)據(jù)記錄,其軟硬件設(shè)計(jì)簡(jiǎn)單,時(shí)間記錄準(zhǔn)確,既
避免了連續(xù)記錄的大工作量,又避免了定時(shí)記錄的盲目性,給連續(xù)長(zhǎng)時(shí)間的測(cè)量、控制系統(tǒng)
的正常運(yùn)行及檢查都來了很大的方便,可廣泛應(yīng)用于長(zhǎng)時(shí)間連續(xù)的測(cè)控系統(tǒng)中。在測(cè)量控制
系統(tǒng)中,特別是長(zhǎng)時(shí)間無人職守的測(cè)控系統(tǒng)中,經(jīng)常需要記錄某些具有特殊意義的數(shù)據(jù)及其
出現(xiàn)的時(shí)間。記錄及分析這些特殊意義的數(shù)據(jù),對(duì)測(cè)控系統(tǒng)的性能分析及正常運(yùn)行具有重要
的意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時(shí)采樣或定時(shí)采樣,沒有具體的時(shí)間記錄,因此只能記錄
數(shù)據(jù)而無法準(zhǔn)確記錄其出現(xiàn)的時(shí)間;若采用單片機(jī)計(jì)時(shí),一方面需要采用計(jì)數(shù)器,占用硬件
資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費(fèi)單片機(jī)的資源,而且某些測(cè)控系統(tǒng)可能不
允許。而在系統(tǒng)中采用DS1302則能很好地解決這個(gè)問題
圖3-4DS1302內(nèi)部結(jié)構(gòu)圖
2軟件設(shè)計(jì)
2.1編程環(huán)境及語言
本設(shè)計(jì)是在ICCV7AVR中編程的,然后通過AVRstudio下載的。
2.2程序框圖
3電路設(shè)計(jì)
3.1DS1302電路
PC5/TDIK
FC€OIMC1五4
PCr/TO9C2a
IDORXDu
PDVTXDU2
?D2HNm_!L-5—vcci工
IKMNT1r-2—VCC2
P0WC1I3
PD8OC1A-it|口X1
-a.L__冏
”7821___CTML
X2
AREF
AVCC
圖3-1dsl302與單片機(jī)接口電路
3.2LCD1602電路
LCD1
U1016L
U1
2
PCDGCL
IC1G0A
-2-mi
IC2TCK
-2-XTA12
IC3T18
■C5g
JO
■心DO)EDI
亙M1ADC1FC</TO9C1
S_,心DC2FCI/TO9C2
437
至IA4AK4■DQRXD
35
IASADCSIDVTXD
Jl
,頷oce,詢m
方IDHNT1
POifiCil
圖3-21602液晶與單片機(jī)接口電路
3.34*4鍵盤電路
■^―FKmCK
》H1/T1
4lt2*WO1HT2
4—imiNtDCO
:“而
0網(wǎng)10*
IB&U6O
-2—?vra:K
ATBBDA16
圖3-34*4key與單片機(jī)接口電路
3.4蜂鳴器電路
PD1ZFKD
POCOOIB
POSOOM
,Xdd
PDTJOC2
ARBF□Q
AMCC
圖3-4蜂鳴器與單片機(jī)接口電路
3.5綜合電路
4程序設(shè)計(jì)
代碼分析
Yj1602函數(shù):
voidLCD1602_sendbyte(ucharDatCmd,uchardByte)
{
if(DatCmd==iCmd)〃指令操作
LCDa_CLR_RS;
else
LCDa_SET_RS;
LCDa_CLR_RW;〃寫操作
LCDa_SET_E;
LCDa_DO=dByte;〃寫入數(shù)據(jù)
Delayms⑴;
LCDa_CLR_E;
)
函數(shù)名稱:LCD1602_sendstr
功能:向1602液晶寫入一個(gè)字符串
參數(shù):ptSlring-字符串指針
返回值:無
voidLCD1602_sendstr(uchar*ptString)
while((*ptString)!='\0')〃字符串未結(jié)束
LCD1602_sendbyte(iDat,*ptString++);
)
)
函數(shù)名稱:LCD1602_clear
功能:1602液晶清屏
參數(shù):無
返回值:無
voidLCD1602_clear(void)
LCD1602_sendbyte(iCmd,LCDa_CLS);
Delayms⑵;〃清屏指令寫入后,2ms的延時(shí)是很必要的!!!
函數(shù)名稱:LCD1602_readBF
功能:1602液晶清屏
參數(shù):無
返回值:busy-為1時(shí)忙,為0時(shí)可以接收指令
ucharLCD1602_readBF(void)
ucharbusy;
busy=LCD1602_rcadbyte(iCnid);//讀回BF標(biāo)志和地址
if(busy&0x80)〃忙
busy=l;
else//不忙,可以寫入
busy=0;
returnbusy;
函數(shù)名稱:LCD1602_gotoXY
功能:移動(dòng)到指定位置
參數(shù):Row-指定的行
Col--指定的列
返回值:無
voidLCD1602_gotoXY(ucharRow,ucharCol)
{
switch(Row)〃選擇行
(
case2:
LCD1602_sendbyte(iCmd,LCDa_L2+Col);break;〃寫入第2行的指定列
default:
LCD1602_sendbyte(iCmd,LCDa_Ll+Col);break;〃寫入第1行的指定列
)
)
函數(shù)名稱:LCD1602_initial
功能:1602液晶初始化
參數(shù):無
返回值:無
voidLCD1602_initial(void)
Delayms(lOO);//等待內(nèi)部復(fù)位
LCD1602_portini();〃端口初始化
LCD1602_sendbyte(iCmd,LCDa_FUNCTION);//功能、模式設(shè)定
while(LCDl602_readBF());
LCD1602_sendbyte(iCmd,LCDa_ON);〃打開顯示
while(LCD1602_readBF());
LCD1602_clear();〃清屏
while(LCDl602_readBF());
LCD1602_sendbyte(iCmd,LCDa.ENTRY);//輸入模式設(shè)定
)
Dsl302函數(shù):
#defineRTC_CLKPD7//PCOPB7
#defineRTC_DATAPDO//PCIPB5
#defineRTC_CSPC7
#defineRTC_DDRDDRD//DDRB
#defineRTC.PORTPORTD//PORTB
#defineRTC.PINPIND//PINB
#defineRTC_CS_DDRDDRC
#defineRTC_CS_PORTPORTC
#defineRTC_CS_PINPINC
#defineLCDg_DDR_ONDDRDl=BIT(l);//LCD背光設(shè)置
#defineLCDg.ONPORTDl=BIT(l);〃LCD背光開啟
#defineLCDg_OFFPORTD&=~BIT(1);//LCD背光關(guān)閉
〃命令
#defineRD0x01
#defineWR0x00
#defineC_SEC0x80〃秒
#defineC_MIN0x82〃分
#defineC_HR0x84〃時(shí)
#dcfineC_DAY0x86〃日
#defineC_MTH0x88〃月
#dcfineC_WK0x8A//星期DATE
#defineC_YR0x8C//年
#defineC_WP0x8E〃控制(寫保護(hù))
#defineC_CHARGE0x90〃涓流充電
#defineC_BURSTOxBE//時(shí)鐘多字節(jié)
〃配置
#defineCLK_HALT0x80〃停止時(shí)鐘控制位SECONDbit7
#defineCLK_START0x00〃啟動(dòng)時(shí)鐘
#dcfineM12_240x80〃12/24小時(shí)值選擇位HOURbit7
#definePROTECT0x80〃寫保護(hù)控制位CONTROLbit7
#defineUPROTECT0x00〃寫保護(hù)控制位CONTROLbit7
〃涓流充電控制常量
#defineTC_DlR20xA5//high1Diode+2KResistors
#defineTC_D2R8OxAB//low2Diodes+8KResistors
#defineTC_DISABLED0x00//Disabled(TCS<>1010orDS=00orRS=00)
//RAM命令
#defineC_RAMBASE0xC0//RAM0-RAM30?1地址需左移一位
函數(shù)名稱:DS1302_init
功能:初始化DS1302的數(shù)據(jù)接口
參數(shù):無
返回值:無
voidDS1302_portinit(void)
RTC_DDRI=BIT(RTC_CLK)IBIT(RTC_DATA)IBIT(RTC_CS);〃將時(shí)鐘端(RTC_CLK)數(shù)據(jù)端
(RTJDATA)片選端(RTC_CS)設(shè)置為輸出
//RTC_CS_DDRI=BIT(RTC_CS);
)
函數(shù)名稱:DS1302_writeB
功能:向DS13()2寫入一個(gè)字節(jié)數(shù)據(jù)(沒有RST操作)
參數(shù):byte-要寫入的數(shù)據(jù)
返回值:無
voidDS1302_writeB(ucharbyte)
uchari;
for(i=0;i<8;i++)〃8位數(shù)據(jù)計(jì)數(shù)
(
RTC_PORT&=~BIT(RTC_CLK);〃拉低時(shí)鐘端
if(byte&0x01)//當(dāng)前位是否是1
(
RTC_PORTI=BIT(RTC_DATA);//當(dāng)前位是1,拉高數(shù)據(jù)端
1
else
(
RTC_PORT&=~BIT(RTC_DATA);〃當(dāng)前位是0,拉低數(shù)據(jù)端
)
Delayus(lO);〃調(diào)整時(shí)鐘和脈沖寬度
RTC_PORTI=BIT(RTC_CLK);//時(shí)鐘上升沿(DS1302采樣數(shù)據(jù))
byte?=l;〃數(shù)據(jù)右移1位,為送出新數(shù)據(jù)位做準(zhǔn)備
函數(shù)名稱:DS1302_readB
功能:從DS1302讀出一個(gè)字節(jié)數(shù)據(jù)(沒有RST操作)
參數(shù):無
返回值:byte--讀出的數(shù)據(jù)
ucharDS1302_readB(void)
{
uchari,byte=O;
RTC_DDR&=~BIT(RTC_DATA);〃將數(shù)據(jù)端口設(shè)置為輸入
RTC_PORT&=~BIT(RTC_DATA);〃無上拉電阻
for(i=0;i<8;i++)〃8位數(shù)據(jù)計(jì)數(shù)
(
byte?=l;//保存讀入的數(shù)據(jù)位
RTC_PORTI=BIT(RTC_CLK);//時(shí)鐘上升沿
Delayus(lO);〃延時(shí),調(diào)整時(shí)鐘脈沖寬度
RTC_PORT&=~BIT(RTC_CLK);〃時(shí)鐘下降沿,DS1302輸出數(shù)據(jù)位
Delayus(lO);//等待數(shù)據(jù)變化(MEGA16太快,必須等待DS1302的數(shù)據(jù)位
輸出,否則不能正確讀出)
if(RTC_PIN&BIT(RTC_DATA))//當(dāng)前位是否是高電平
(
bytel=BIT(RTC_CLK);〃是高電平就將返回?cái)?shù)據(jù)的當(dāng)前位置1
)
else
byte&=-BIT(RTC_CLK);〃是低電平就將返回?cái)?shù)據(jù)的當(dāng)前位置0
I
RTC_DDRI=BIT(RTC_DATA);〃最后將數(shù)據(jù)端口設(shè)置為輸出
returnbyte;〃返回讀出的數(shù)據(jù)
函數(shù)名稱:DS1302_writeD
功能:向DS1302的某個(gè)地址寫入一個(gè)字節(jié)數(shù)據(jù)
參數(shù):addi地址值(寄存器或RAM)
data-要寫入的地址
返回值:無
voidDS1302_writeD(ucharaddr.uchardata)
RTC_CS_PORT&=~BIT(RTC_CS);〃拉低片選端
RTC_PORT&=~BIT(RTC_CLK);〃拉低時(shí)鐘端
Delayus(lO);
RTC_CS_PORT1=BIT(RTC_CS);〃拉高片選端
Delayus(lO);〃調(diào)整片選脈沖
DS1302_writeB(addr);〃寫入操作命令(地址:)
Delayus(lO);
RTC_PORT&=~BIT(RTC_CLK);〃拉低時(shí)鐘端
Delayus(lO);
DS1302_writeB(data);〃寫入數(shù)據(jù)
RTC_PORT&=~BIT(RTC_CLK);〃拉低時(shí)鐘端
Delayus(lO);〃調(diào)整片選脈沖
RTC_CS_PORT&=~BIT(RTC_CS);//拉低片選端
)
函數(shù)名稱:DS1302_readD
功能:從DS1302的某個(gè)地址讀出一個(gè)字節(jié)數(shù)據(jù)
參數(shù):addr-地址值(寄存器或RAM)
返回值:data--讀出的數(shù)據(jù)
ucharDS1302_readD(ucharaddr)
(
uchardata;
RTC_CS_PORT&=~BIT(RTC_CS);〃拉低片?選端
RTC_PORT&=~BIT(RTC_CLK);//拉低時(shí)鐘端
Dclayus(lO);
RTC_CS_PORTI=BIT(RTC_CS);//拉高片選端
Delayus(lO);〃調(diào)整片選脈沖
DS1302_writeB(addr);〃寫入操作命令(地址)
Delayus(lO);
data=DS1302_readB();〃讀出數(shù)據(jù)
Delayus(lO);
RTC_PORT&=~BIT(RTC_CLK);//拉低時(shí)鐘端
RTC_CS_PORT&=~BIT(RTC_CS);〃拉低片選端
returndata;〃返回讀111的數(shù)據(jù)
}
函數(shù)名稱:DS13O2_setT
功能:設(shè)置DS1302的時(shí)間
參數(shù):ptTimeD-設(shè)置時(shí)間數(shù)組指針
返回值:無
voidDS1302_setT(ucharptTimeD[])
(
uchari;
ucharaddr=0x80;//寫入地址從秒寄存器開始
DS1302_writeD(C_WPlWR,UPROTECT);〃控制命令,WP位為0,允許寫操作
Delayms⑸;
for(i=0;i<7;i++)
(
DS1302_writeD(addrlWR,ptTimeD[i]);//秒分時(shí)日月星期年
addr+=2;
Delayms(l);
)
DS1302_writeD(C_WPIWR,PROTECT);〃控制命令,WP位為1,不允許寫操作
}
函數(shù)名稱:DS1302_getT
功能:讀取DS1302的當(dāng)前時(shí)間
參數(shù):time口-讀取的時(shí)間數(shù)組
返回值:無
voidDS1302_getT(uchartime口)
{
uchari;
/〃〃〃/下面的是單次讀寫///〃〃〃//〃/〃///〃〃///
/*ucharaddr=0x80;〃讀取地址從秒寄存器開始
for(i=();i<7;i++)
(
time[i]=DS1302_readD(addrlRD);〃秒分時(shí)日月星期年
addr+=2;
}*/
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
/////////卜.而是多字節(jié)讀取///////〃////〃
RTC_CS_PORT&=~BIT(RTC_CS);//拉低片選端
Delayus(lO);
RTC_CS_PORTI=BIT(RTC_CS);//拉高片選端
Delayus(lO);〃調(diào)整片選脈沖
DS1302_writeB(0xbf);//Oxbf:時(shí)鐘多字節(jié)讀取命令
for(i=0;i<8;i++)//時(shí)間數(shù)據(jù)的存放格式是:
//秒,分,時(shí),日,月,星期,年,控制
time[il=DS1302_readB();//【7個(gè)數(shù)據(jù)(BCD格式)+1個(gè)控制】
RTC_CS_PORT&=-B1T(RTC_CS);〃拉彳氐片選端
RTC_PORT&=~B1T(RTC_CLK);//拉低時(shí)鐘端(時(shí)鐘端在不操作時(shí)為
低)
函數(shù)名稱:DS1302_check
功能:檢測(cè)DS1302是否正常工作
參數(shù):無
返回值:exist-為TRUE為檢測(cè)到DS1302,為FALSE為沒檢測(cè)到
ucharDS1302_check(void)
ucharexist;
DS1302_writeD(C_WPIWR,UPROTECT);〃寫入寫允許命令
DS1302_writeD(C_RAMBASEIWR,0xA5);//RAM0寫入0xA5
exist=DS1302_readD(C_RAMBASEIRD);〃讀取RAM0
if(exist==0xA5)
exist=TRUE;〃如果讀取值與寫入值相等,返回TRUE
)
else
exist=FALSE;〃如果讀取值與寫入值不相等,返回FALSE
)
returnexist;
)
函數(shù)名稱:DS1302_init
功能:初始化DS1302
參數(shù):無
返回值:無
voidDS1302_init(void)
DS1302_writeD(C_WPIWR,UPROTECT);〃寫入寫允許命令
DS1302_writeD(C_SECIWR,CLK_START);〃啟動(dòng)振蕩器,DS1302開始工作
DS1302_writeD(C_WPIWR,PROTECT);〃控制命令,WP位為1,不允許寫操作
函數(shù)名稱:BCD_ASCI1
功能:將壓縮BCD碼轉(zhuǎn)換成ascii碼
參數(shù):BCD-將要轉(zhuǎn)換的壓縮BCD碼
ptasc-轉(zhuǎn)換后的ASCH碼數(shù)組指針
返回值:無
voidBCD_ASCII(ucharBCD.ucharptasc[])
ptasc[O]=BCD/16IOx3O;//0X583538〃轉(zhuǎn)換十位
ptasc[1]=BCD&0x0FI0x30;〃轉(zhuǎn)換個(gè)位
函數(shù)名稱:ASCILBCD
功能:將ascii碼轉(zhuǎn)換成壓縮BCD碼
參數(shù):
返回值:無
ucharASCII_BCD(ucharLCDstrh,ucharLCDstrl)
ucharLCDstr=(LCDstrh*16)1(LCDstrl&OxOf);
returnLCDstr;
)
函數(shù)名稱:Get_change
功能:將輸入的時(shí)間數(shù)據(jù)匹配成getlime數(shù)組中的形式
參數(shù):LCDstr,gettime
返回值:無
voidGet_change(uchar*time,uchar*LCDstr)
(
uchari,asc[2];
for(i=();i<3;i++)
(
BCD_ASCII(time[2-i],asc);
LCDstr(7+i*2]=asc[0];
LCDstr[8+i*2]=asc[l];
)
BCD_ASCII(time[6],asc);
LCDstr[0]=ascf01;
LCDstr[l]=asc[l];
BCD_ASCII(time[4],asc);
LCDstr[2]=asc[0];
LCDstr[3]=asc[l];
BCD_ASCII(time[3],asc);
LCDstr[4]=asc[0];
LCDstr[5]=asc[l];
BCD_ASCH(time[5],asc);
LCDstr[6]=asc[l];
)
函數(shù)名稱:Input_change(LCDstr,gettime)
功能:將輸入的時(shí)間數(shù)據(jù)匹配成gettime數(shù)組中的形式
參數(shù):LCDstr,gettime
返回值:無
voidInput_change(uchar*LCDstr,uchar*gettime)
(
uchari,week;
uintday,month,year;
for(i=0;i<13;i++)
(
switch(LCDstr[i])
(
caseT:
LCDstr[i]=0x01;
break;
case2:
LCDstrli]=0x02;
break;
case3':
LCDslr[i]=0x03;
break;
case'4':
LCDstr[iJ=0x04;
break;
case5:
LCDstrfi]=0x05;
break;
case6:
LCDstrli]=0x06;
break;
case7:
LCDstrfi]=0x07;
break;
case8:
LCDstr[i]=0x08;
break;
case'9":
LCDstr[i]=0x09;
break;
caseO:
LCDstr[i]=0x00;
break;
)
)
gettime[0]=ASCII_BCD(LCDstr[11],LCDstr[12]);
gettime[l]=ASCII_BCD(LCDstr[9],LCDstr[10]);
gettime[2]=ASCII_BCD(LCDstr[7],LCDstr[8]);
geltime[3]=ASCII_BCD(LCDstr[4],LCDstr[5]);
gettime[4]=ASCII_BCD(LCDstr[2],LCDstr[3]);
gettime[5]=LCDstr[6];
gettime[6]=ASCII_BCD(LCDstr[()],LCDstr[1]);
day=(gettime[3]&0xF0)/16*10+(gettime[3]&()x()F);
month=(gettime[4]&0xF0)/l6*10+(gettime[4]&0x0F);
year=(gettime[6]&0xF0)/16*10+(gettime[6]&0x0F);
week=(day+2*month+3*(month+1)/5+year+
year/4-year/100+year/400)%7+1;
gettime[51=(week%10)&0x0F;
)
函數(shù)名稱:Noisein_change
功能:將輸入的時(shí)間數(shù)據(jù)匹配成gellime數(shù)組中的形式
參數(shù):LCDstr,gettime
返回值:無
voidNoisein_change(uchar*LCDstr,uchar*time)
(
uchari;
for(i=();i<13;i++)
(
switch(LCDstr[i])
(
case*r:
LCDstr[i]=0x01;
break;
case'2':
LCDstr[i]=0x02;
break;
case3:
LCDstr[i]=0x03;
break;
case4:
LCDstr[i]=0x04;
break;
case'5':
LCDstr[i]=0x05;
break;
case6:
LCDstr[i]=0x06;
break;
case7':
LCDslr[i]=0x07;
break;
case8:
LCDstr[i]=0x08;
break;
case9:
LCDstr[i]=0x09;
break;
caseO:
LCDstr[iJ=0x00;
break;
time[0]=ASCII_BCD(LCDstr[4],LCDstr[5]);
=ASCII_BCD(LCDstr[2],LCDstr[3]);
time[2J=ASCII_BCD(LCDstr[O],LCDstrl1J);
函數(shù)名稱:Disp_time
功能:在1602液晶上顯示當(dāng)前時(shí)間(第】行格式:年-月一日星期;第2行格式:時(shí)-分-秒)
參數(shù):time口-時(shí)間數(shù)組
返回值:無
//#defineLCDa_RSPCO〃定義三個(gè)控制引腳
//#defineLCDa_RWPCI
//#defineLCDa_EPC6
voidwrite_com(ucharcom)
PORTC&=-BIT(0);
PORTC&=-BIT(1);
PORTA=com;
PORTCI=BIT(6);
Delayus(lO);
PORTC&=-BIT(6);
voidwrite_date(uchardate)
(
PORTCI=BIT(0);
PORTC&=-BIT(1);
PORTA=dale;
PORTCI=B1T(6);
Delayus(lO);
PORTC&二?BIT(6);
voidDisp_time(ucharlime[])
(
uchari,asc[2];
ucharlinel[]={O,O,'-',O,O,'-',O,O;V';';顯示第1行的字符數(shù)組
ucharline2[9]={0,0;:1,0,0,':',0,0,1\0'};〃顯示第2行的字符數(shù)組
write_com(()x4());〃自定義字符寫ACGRAM
BCD_ASClI(timel6],asc);〃為第1行的年賦值
linel[O]=asc[()];
linel[l]=asc[l];
BCD_ASCII(time[4],asc);〃為第1行的月賦值
linelf3]=asc[O];
linel[4]=ascllj;
BCD_ASCII(time[3],asc);〃為第1行的日賦值
linel[6]=asc[0];
linel[7]=asc[ll;
s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DBJ51-T 190-2022 四川省裝配式支吊架抗震技術(shù)標(biāo)準(zhǔn)
- 2024年大學(xué)創(chuàng)新創(chuàng)業(yè)工作總結(jié)
- 《我的時(shí)間管理分享》課件
- 《村鎮(zhèn)銀行介紹》課件
- 新媒體春分營(yíng)銷策略
- 酒店前臺(tái)話務(wù)員工作總結(jié)
- 企業(yè)生涯規(guī)劃圖譜
- 2023-2024年項(xiàng)目部安全培訓(xùn)考試題及答案往年題考
- 2023年-2024年項(xiàng)目部管理人員安全教育培訓(xùn)試題及答案(各地真題)
- 化工生產(chǎn)實(shí)習(xí)報(bào)告合集十篇
- 2024年度醫(yī)院燒傷科接診統(tǒng)計(jì)報(bào)告課件
- 社區(qū)普通話培訓(xùn)課件
- 動(dòng)態(tài)負(fù)載均衡服務(wù)器集群
- 江蘇省無錫市錫山區(qū)2023-2024學(xué)年二年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- 衛(wèi)生化學(xué)期末考試習(xí)題2
- 瓣周漏護(hù)理查房
- 歷代反腐完整
- 《現(xiàn)代控制理論》(劉豹-唐萬生)
- 廣東省佛山市南海區(qū)三水區(qū)2022-2023學(xué)年七年級(jí)上學(xué)期期末歷史試題(無答案)
- 重視心血管-腎臟-代謝綜合征(CKM)
- 譯林版小學(xué)英語六年級(jí)上冊(cè)英文作文范文
評(píng)論
0/150
提交評(píng)論