




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
北京郵電大學(xué)
單片機小學(xué)期實驗報告
2012年9月12日
目錄
1硬件設(shè)計---------------------------------------3
1.1設(shè)計要求---------------------------------------------3
1.2硬件框圖---------------------------------------------3
1.3硬件選擇---------------------------------------------3
2軟件設(shè)計----------------------------------------6
2.1編程環(huán)境及語言----------------------------------------6
2.2程序框圖----------------------------------------------6
3電路設(shè)計---------------------------------------6
3.1DS1302電路--------------------------------------------6
3.2LCD1602電路------------------------------------------7
3.34*4鍵盤電路-------------------------------------------7
3.4蜂鳴器電路---------------------------------------------8
3.5綜合電路-----------------------------------------------8
4程序設(shè)計---------------------------------------9
5操作方法---------------------------------------37
6運行結(jié)果---------------------------------------37
7實驗過程排錯------------------------------------38
8心得體會及建議---------------------------------38
8.1心得體會-----------------------------------------------38
8.2建議---------------------------------------------------38
9附錄-------------------------------------------38
9.1組內(nèi)分工-----------------------------------------------38
9.2參考文獻-----------------------------------------------38
1硬件設(shè)計
1.1設(shè)計要求
實現(xiàn)年月日、時分秒、星期的顯示功能,鬧鈴功能。用鍵盤來實現(xiàn)日期和時間的調(diào)整功
能,調(diào)整要求星期能自動更新,能實現(xiàn)位調(diào),且閏年時2月份的天數(shù)自動變?yōu)?9。顯示格
式:四位年,兩位月,兩位日,星期顯示數(shù)字,兩位時,兩位分,兩位秒。比如:
YYYY-MM-DDX
HH:MM:SS
鬧鈴要求用鍵盤定時間,到時間后蜂鳴器響5s左右。
1.2硬件框圖
日期時間由硬件軟件結(jié)合產(chǎn)生;鍵盤完成當(dāng)前日期時間的調(diào)整和鬧鈴定時功能。過程與
結(jié)果由控制芯片分別輸出到顯示器上,鬧鈴鈴聲設(shè)為蜂鳴器鳴叫。
1.3硬件選擇
1).顯示模塊
由于八段數(shù)碼管連線多且復(fù)雜,因此選擇的是ds1602液晶顯示屏。
八段數(shù)碼管的優(yōu)點:亮度高,顯示大。驅(qū)動部份的軟件簡單;缺點:與液晶相比,耗電
及體積大。數(shù)碼管只能單純的顯示數(shù)字,不能生動的表達各個參數(shù)的信息,消耗電力也比led
液晶顯示器大。
LCD液晶顯示器它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊,在單
片機系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個優(yōu)點:
顯示質(zhì)量高,由于液晶顯示器每一個點在收到信號后就一直保持那種色彩和亮度,恒定
發(fā)光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點。因此,液晶顯示器畫質(zhì)
高且不會閃爍。
數(shù)字式接口,液晶顯示器都是數(shù)字式的,和單片機系統(tǒng)的接口更加簡單可靠,操作更加
方便。
體積小、重量輕,液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來達到顯示的目的,
在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。
功耗低,相對而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動IC上,因而耗
電量比其它顯示器要少得多。Led液晶能一屏把本設(shè)計所要顯示的信息表達完整。而且led
耗電小,體積小很適合與室內(nèi)使用。
本設(shè)計的要求日期時間以數(shù)字表示、星期用3位英文字符表示共21個字符,lcd1602
能顯示32個字符,足以完成顯示功能。Lcdl602有16個引腳,各個引腳功能見下表:
引腳號引腳名電平輸入/輸出作用
1VSS電源地
2VDDVcc電源(+5v)
3VEE對比調(diào)整電壓
4RS0/1輸入0=輸入指令,1=輸入數(shù)據(jù)
5R/W0/1輸入0=向led寫入數(shù)據(jù)或指令
1=從led讀取數(shù)據(jù)
6E1,1->0輸入使能信號,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背光負極
表ITlcdl602引腳及功能
2).控制芯片
學(xué)校提供的Atmegal6芯片
高性能、低功耗的8位AVR微處理器
先進的RISC結(jié)構(gòu)
131條指令
大多數(shù)指令執(zhí)行時間為單個時鐘周期
32個8位通用工作寄存器
全靜態(tài)工作
工作于16MHz時性能高達16MIPS
只需兩個時鐘周期的硬件乘法器
非易失性程序和數(shù)據(jù)存儲器
16K字節(jié)的系統(tǒng)內(nèi)可編程Flash,擦寫壽命:10,000次
具有獨立鎖定位的可選Boot代碼區(qū),通過片上Boot程序?qū)崿F(xiàn)系統(tǒng)內(nèi)編程,真正的同時讀寫操
作
512字節(jié)的EEPROM,擦寫壽命:100,000次
1K字節(jié)的片內(nèi)SRAM
可以對鎖定位進行編程以實現(xiàn)用戶程序的加密
JTAG接口(與IEEE1149.1標(biāo)準(zhǔn)兼容)
符合JTAG標(biāo)準(zhǔn)的邊界掃描功能
支持?jǐn)U展的片內(nèi)調(diào)試功能
通過JTAG接口實現(xiàn)對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).日期時間生成模塊
低功耗時鐘芯片DS1302可以對年、月、日、時、分、秒進行計時,且具有閏年補償?shù)?/p>
多種功能。DS1302用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點的記錄上,能實現(xiàn)
數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄。這種記錄對長時間的連續(xù)測控系統(tǒng)結(jié)果的分析以及對異
常數(shù)據(jù)出現(xiàn)的原因的查找有重要意義。
采用DS1302作為記錄測控系統(tǒng)中的數(shù)據(jù)記錄,其軟硬件設(shè)計簡單,時間記錄準(zhǔn)確,既
避免了連續(xù)記錄的大工作量,又避免了定時記錄的盲目性,給連續(xù)長時間的測量、控制系統(tǒng)
的正常運行及檢查都來了很大的方便,可廣泛應(yīng)用于長時間連續(xù)的測控系統(tǒng)中。在測量控制
系統(tǒng)中,特別是長時間無人職守的測控系統(tǒng)中,經(jīng)常需要記錄某些具有特殊意義的數(shù)據(jù)及其
出現(xiàn)的時間。記錄及分析這些特殊意義的數(shù)據(jù),對測控系統(tǒng)的性能分析及正常運行具有重要
的意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時采樣或定時采樣,沒有具體的時間記錄,因此只能記錄
數(shù)據(jù)而無法準(zhǔn)確記錄其出現(xiàn)的時間;若采用單片機計時,一方面需要采用計數(shù)器,占用硬件
資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費單片機的資源,而且某些測控系統(tǒng)可能不
允許。而在系統(tǒng)中采用DS1302則能很好地解決這個問題
圖3-4DS1302內(nèi)部結(jié)構(gòu)圖
2軟件設(shè)計
2.1編程環(huán)境及語言
本設(shè)計是在ICCV7AVR中編程的,然后通過AVRstudio下載的。
2.2程序框圖
3電路設(shè)計
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與單片機接口電路
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液晶與單片機接口電路
3.34*4鍵盤電路
■^―FKmCK
》H1/T1
4lt2*WO1HT2
4—imiNtDCO
:“而
0網(wǎng)10*
IB&U6O
-2—?vra:K
ATBBDA16
圖3-34*4key與單片機接口電路
3.4蜂鳴器電路
PD1ZFKD
POCOOIB
POSOOM
,Xdd
PDTJOC2
ARBF□Q
AMCC
圖3-4蜂鳴器與單片機接口電路
3.5綜合電路
4程序設(shè)計
代碼分析
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液晶寫入一個字符串
參數(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ù)名稱:LCD1602_readBF
功能:1602液晶清屏
參數(shù):無
返回值:busy-為1時忙,為0時可以接收指令
ucharLCD1602_readBF(void)
ucharbusy;
busy=LCD1602_rcadbyte(iCnid);//讀回BF標(biāo)志和地址
if(busy&0x80)〃忙
busy=l;
else//不忙,可以寫入
busy=0;
returnbusy;
函數(shù)名稱:LCD1602_gotoXY
功能:移動到指定位置
參數(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〃時
#dcfineC_DAY0x86〃日
#defineC_MTH0x88〃月
#dcfineC_WK0x8A//星期DATE
#defineC_YR0x8C//年
#defineC_WP0x8E〃控制(寫保護)
#defineC_CHARGE0x90〃涓流充電
#defineC_BURSTOxBE//時鐘多字節(jié)
〃配置
#defineCLK_HALT0x80〃停止時鐘控制位SECONDbit7
#defineCLK_START0x00〃啟動時鐘
#dcfineM12_240x80〃12/24小時值選擇位HOURbit7
#definePROTECT0x80〃寫保護控制位CONTROLbit7
#defineUPROTECT0x00〃寫保護控制位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);〃將時鐘端(RTC_CLK)數(shù)據(jù)端
(RTJDATA)片選端(RTC_CS)設(shè)置為輸出
//RTC_CS_DDRI=BIT(RTC_CS);
)
函數(shù)名稱:DS1302_writeB
功能:向DS13()2寫入一個字節(jié)數(shù)據(jù)(沒有RST操作)
參數(shù):byte-要寫入的數(shù)據(jù)
返回值:無
voidDS1302_writeB(ucharbyte)
uchari;
for(i=0;i<8;i++)〃8位數(shù)據(jù)計數(shù)
(
RTC_PORT&=~BIT(RTC_CLK);〃拉低時鐘端
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)整時鐘和脈沖寬度
RTC_PORTI=BIT(RTC_CLK);//時鐘上升沿(DS1302采樣數(shù)據(jù))
byte?=l;〃數(shù)據(jù)右移1位,為送出新數(shù)據(jù)位做準(zhǔn)備
函數(shù)名稱:DS1302_readB
功能:從DS1302讀出一個字節(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ù)計數(shù)
(
byte?=l;//保存讀入的數(shù)據(jù)位
RTC_PORTI=BIT(RTC_CLK);//時鐘上升沿
Delayus(lO);〃延時,調(diào)整時鐘脈沖寬度
RTC_PORT&=~BIT(RTC_CLK);〃時鐘下降沿,DS1302輸出數(shù)據(jù)位
Delayus(lO);//等待數(shù)據(jù)變化(MEGA16太快,必須等待DS1302的數(shù)據(jù)位
輸出,否則不能正確讀出)
if(RTC_PIN&BIT(RTC_DATA))//當(dāng)前位是否是高電平
(
bytel=BIT(RTC_CLK);〃是高電平就將返回數(shù)據(jù)的當(dāng)前位置1
)
else
byte&=-BIT(RTC_CLK);〃是低電平就將返回數(shù)據(jù)的當(dāng)前位置0
I
RTC_DDRI=BIT(RTC_DATA);〃最后將數(shù)據(jù)端口設(shè)置為輸出
returnbyte;〃返回讀出的數(shù)據(jù)
函數(shù)名稱:DS1302_writeD
功能:向DS1302的某個地址寫入一個字節(jié)數(shù)據(jù)
參數(shù):addi地址值(寄存器或RAM)
data-要寫入的地址
返回值:無
voidDS1302_writeD(ucharaddr.uchardata)
RTC_CS_PORT&=~BIT(RTC_CS);〃拉低片選端
RTC_PORT&=~BIT(RTC_CLK);〃拉低時鐘端
Delayus(lO);
RTC_CS_PORT1=BIT(RTC_CS);〃拉高片選端
Delayus(lO);〃調(diào)整片選脈沖
DS1302_writeB(addr);〃寫入操作命令(地址:)
Delayus(lO);
RTC_PORT&=~BIT(RTC_CLK);〃拉低時鐘端
Delayus(lO);
DS1302_writeB(data);〃寫入數(shù)據(jù)
RTC_PORT&=~BIT(RTC_CLK);〃拉低時鐘端
Delayus(lO);〃調(diào)整片選脈沖
RTC_CS_PORT&=~BIT(RTC_CS);//拉低片選端
)
函數(shù)名稱:DS1302_readD
功能:從DS1302的某個地址讀出一個字節(jié)數(shù)據(jù)
參數(shù):addr-地址值(寄存器或RAM)
返回值:data--讀出的數(shù)據(jù)
ucharDS1302_readD(ucharaddr)
(
uchardata;
RTC_CS_PORT&=~BIT(RTC_CS);〃拉低片?選端
RTC_PORT&=~BIT(RTC_CLK);//拉低時鐘端
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);//拉低時鐘端
RTC_CS_PORT&=~BIT(RTC_CS);〃拉低片選端
returndata;〃返回讀111的數(shù)據(jù)
}
函數(shù)名稱:DS13O2_setT
功能:設(shè)置DS1302的時間
參數(shù):ptTimeD-設(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]);//秒分時日月星期年
addr+=2;
Delayms(l);
)
DS1302_writeD(C_WPIWR,PROTECT);〃控制命令,WP位為1,不允許寫操作
}
函數(shù)名稱:DS1302_getT
功能:讀取DS1302的當(dāng)前時間
參數(shù):time口-讀取的時間數(shù)組
返回值:無
voidDS1302_getT(uchartime口)
{
uchari;
/〃〃〃/下面的是單次讀寫///〃〃〃//〃/〃///〃〃///
/*ucharaddr=0x80;〃讀取地址從秒寄存器開始
for(i=();i<7;i++)
(
time[i]=DS1302_readD(addrlRD);〃秒分時日月星期年
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:時鐘多字節(jié)讀取命令
for(i=0;i<8;i++)//時間數(shù)據(jù)的存放格式是:
//秒,分,時,日,月,星期,年,控制
time[il=DS1302_readB();//【7個數(shù)據(jù)(BCD格式)+1個控制】
RTC_CS_PORT&=-B1T(RTC_CS);〃拉彳氐片選端
RTC_PORT&=~B1T(RTC_CLK);//拉低時鐘端(時鐘端在不操作時為
低)
函數(shù)名稱:DS1302_check
功能:檢測DS1302是否正常工作
參數(shù):無
返回值:exist-為TRUE為檢測到DS1302,為FALSE為沒檢測到
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);〃啟動振蕩器,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)換個位
函數(shù)名稱:ASCILBCD
功能:將ascii碼轉(zhuǎn)換成壓縮BCD碼
參數(shù):
返回值:無
ucharASCII_BCD(ucharLCDstrh,ucharLCDstrl)
ucharLCDstr=(LCDstrh*16)1(LCDstrl&OxOf);
returnLCDstr;
)
函數(shù)名稱:Get_change
功能:將輸入的時間數(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ù)據(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ù)據(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)前時間(第】行格式:年-月一日星期;第2行格式:時-分-秒)
參數(shù):time口-時間數(shù)組
返回值:無
//#defineLCDa_RSPCO〃定義三個控制引腳
//#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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建體育職業(yè)技術(shù)學(xué)院《城市更新與場所營造》2023-2024學(xué)年第二學(xué)期期末試卷
- 珠海藝術(shù)職業(yè)學(xué)院《傳播學(xué)概論A》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年高速公路瀝青路面鋪設(shè)工程分包施工合同
- 2025精簡版房屋裝修合同協(xié)議書
- 2025勞動合同的范本下載
- 2025超市勞動合同模板
- 2025商業(yè)辦公室租賃合同范本
- 2025臨時用工合同范本
- 農(nóng)村田地買合同樣本
- 2025蘇州市房屋租賃合同
- 家用掃地機器人機械結(jié)構(gòu)設(shè)計
- (高清版)JTGT 5440-2018 公路隧道加固技術(shù)規(guī)范
- 職場C位指南-大學(xué)生職業(yè)素養(yǎng)養(yǎng)成智慧樹知到期末考試答案章節(jié)答案2024年云南林業(yè)職業(yè)技術(shù)學(xué)院
- 2.6高壓電力電容器運行與維護
- 美學(xué)與人生智慧樹知到期末考試答案2024年
- GB/T 3953-2024電工圓銅線
- 碘缺乏病知識宣傳課件
- 曙光醫(yī)院網(wǎng)上查報告
- (附加條款版)醫(yī)院勞務(wù)合同書
- GA/T 1093-2023安全防范人臉識別應(yīng)用出入口控制人臉識別技術(shù)要求
- 港口危貨作業(yè)單位主要安全管理人員試題及答案(536道)
評論
0/150
提交評論