




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
北京郵電大學
單片機小學期實驗報告
2012年9月12日
目錄
1硬件設計---------------------------------------3
1.1設計要求---------------------------------------------3
1.2硬件框圖---------------------------------------------3
1.3硬件選擇---------------------------------------------3
2軟件設計----------------------------------------6
2.1編程環境及語言----------------------------------------6
2.2程序框圖----------------------------------------------6
3電路設計---------------------------------------6
3.1DS1302電路--------------------------------------------6
3.2LCD1602電路------------------------------------------7
3.34*4鍵盤電路-------------------------------------------7
3.4蜂鳴器電路---------------------------------------------8
3.5綜合電路-----------------------------------------------8
4程序設計---------------------------------------9
5操作方法---------------------------------------37
6運行結果---------------------------------------37
7實驗過程排錯------------------------------------38
8心得體會及建議---------------------------------38
8.1心得體會-----------------------------------------------38
8.2建議---------------------------------------------------38
9附錄-------------------------------------------38
9.1組內分工-----------------------------------------------38
9.2參考文獻-----------------------------------------------38
1硬件設計
1.1設計要求
實現年月日、時分秒、星期的顯示功能,鬧鈴功能。用鍵盤來實現日期和時間的調整功
能,調整要求星期能自動更新,能實現位調,且閏年時2月份的天數自動變為29。顯示格
式:四位年,兩位月,兩位日,星期顯示數字,兩位時,兩位分,兩位秒。比如:
YYYY-MM-DDX
HH:MM:SS
鬧鈴要求用鍵盤定時間,到時間后蜂鳴器響5s左右。
1.2硬件框圖
日期時間由硬件軟件結合產生;鍵盤完成當前日期時間的調整和鬧鈴定時功能。過程與
結果由控制芯片分別輸出到顯示器上,鬧鈴鈴聲設為蜂鳴器鳴叫。
1.3硬件選擇
1).顯示模塊
由于八段數碼管連線多且復雜,因此選擇的是ds1602液晶顯示屏。
八段數碼管的優點:亮度高,顯示大。驅動部份的軟件簡單;缺點:與液晶相比,耗電
及體積大。數碼管只能單純的顯示數字,不能生動的表達各個參數的信息,消耗電力也比led
液晶顯示器大。
LCD液晶顯示器它是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊,在單
片機系統中應用晶液顯示器作為輸出器件有以下幾個優點:
顯示質量高,由于液晶顯示器每一個點在收到信號后就一直保持那種色彩和亮度,恒定
發光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點。因此,液晶顯示器畫質
高且不會閃爍。
數字式接口,液晶顯示器都是數字式的,和單片機系統的接口更加簡單可靠,操作更加
方便。
體積小、重量輕,液晶顯示器通過顯示屏上的電極控制液晶分子狀態來達到顯示的目的,
在重量上比相同顯示面積的傳統顯示器要輕得多。
功耗低,相對而言,液晶顯示器的功耗主要消耗在其內部的電極和驅動IC上,因而耗
電量比其它顯示器要少得多。Led液晶能一屏把本設計所要顯示的信息表達完整。而且led
耗電小,體積小很適合與室內使用。
本設計的要求日期時間以數字表示、星期用3位英文字符表示共21個字符,lcd1602
能顯示32個字符,足以完成顯示功能。Lcdl602有16個引腳,各個引腳功能見下表:
引腳號引腳名電平輸入/輸出作用
1VSS電源地
2VDDVcc電源(+5v)
3VEE對比調整電壓
4RS0/1輸入0=輸入指令,1=輸入數據
5R/W0/1輸入0=向led寫入數據或指令
1=從led讀取數據
6E1,1->0輸入使能信號,1=讀取信息
1->0(下降沿)執行指令
7DB00/1輸入/輸出數據總線lineO
8DB10/1輸入/輸出數據總線linel
9DB20/1輸入/輸出數據總線line2
10DB30/1輸入/輸出數據總線line3
11DB40/1輸入/輸出數據總線line4
12DB50/1輸入/輸出數據總線line5
13DB60/1輸入/輸出數據總線line6
14DB70/1輸入/輸出數據總線line7
15AVccLed背光正極
14KLed背光負極
表ITlcdl602引腳及功能
2).控制芯片
學校提供的Atmegal6芯片
高性能、低功耗的8位AVR微處理器
先進的RISC結構
131條指令
大多數指令執行時間為單個時鐘周期
32個8位通用工作寄存器
全靜態工作
工作于16MHz時性能高達16MIPS
只需兩個時鐘周期的硬件乘法器
非易失性程序和數據存儲器
16K字節的系統內可編程Flash,擦寫壽命:10,000次
具有獨立鎖定位的可選Boot代碼區,通過片上Boot程序實現系統內編程,真正的同時讀寫操
作
512字節的EEPROM,擦寫壽命:100,000次
1K字節的片內SRAM
可以對鎖定位進行編程以實現用戶程序的加密
JTAG接口(與IEEE1149.1標準兼容)
符合JTAG標準的邊界掃描功能
支持擴展的片內調試功能
通過JTAG接口實現對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可以對年、月、日、時、分、秒進行計時,且具有閏年補償等
多種功能。DS1302用于數據記錄,特別是對某些具有特殊意義的數據點的記錄上,能實現
數據與出現該數據的時間同時記錄。這種記錄對長時間的連續測控系統結果的分析以及對異
常數據出現的原因的查找有重要意義。
采用DS1302作為記錄測控系統中的數據記錄,其軟硬件設計簡單,時間記錄準確,既
避免了連續記錄的大工作量,又避免了定時記錄的盲目性,給連續長時間的測量、控制系統
的正常運行及檢查都來了很大的方便,可廣泛應用于長時間連續的測控系統中。在測量控制
系統中,特別是長時間無人職守的測控系統中,經常需要記錄某些具有特殊意義的數據及其
出現的時間。記錄及分析這些特殊意義的數據,對測控系統的性能分析及正常運行具有重要
的意義。傳統的數據記錄方式是隔時采樣或定時采樣,沒有具體的時間記錄,因此只能記錄
數據而無法準確記錄其出現的時間;若采用單片機計時,一方面需要采用計數器,占用硬件
資源,另一方面需要設置中斷、查詢等,同樣耗費單片機的資源,而且某些測控系統可能不
允許。而在系統中采用DS1302則能很好地解決這個問題
圖3-4DS1302內部結構圖
2軟件設計
2.1編程環境及語言
本設計是在ICCV7AVR中編程的,然后通過AVRstudio下載的。
2.2程序框圖
3電路設計
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網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程序設計
代碼分析
Yj1602函數:
voidLCD1602_sendbyte(ucharDatCmd,uchardByte)
{
if(DatCmd==iCmd)〃指令操作
LCDa_CLR_RS;
else
LCDa_SET_RS;
LCDa_CLR_RW;〃寫操作
LCDa_SET_E;
LCDa_DO=dByte;〃寫入數據
Delayms⑴;
LCDa_CLR_E;
)
函數名稱:LCD1602_sendstr
功能:向1602液晶寫入一個字符串
參數:ptSlring-字符串指針
返回值:無
voidLCD1602_sendstr(uchar*ptString)
while((*ptString)!='\0')〃字符串未結束
LCD1602_sendbyte(iDat,*ptString++);
)
)
函數名稱:LCD1602_clear
功能:1602液晶清屏
參數:無
返回值:無
voidLCD1602_clear(void)
LCD1602_sendbyte(iCmd,LCDa_CLS);
Delayms⑵;〃清屏指令寫入后,2ms的延時是很必要的!!!
函數名稱:LCD1602_readBF
功能:1602液晶清屏
參數:無
返回值:busy-為1時忙,為0時可以接收指令
ucharLCD1602_readBF(void)
ucharbusy;
busy=LCD1602_rcadbyte(iCnid);//讀回BF標志和地址
if(busy&0x80)〃忙
busy=l;
else//不忙,可以寫入
busy=0;
returnbusy;
函數名稱:LCD1602_gotoXY
功能:移動到指定位置
參數: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行的指定列
)
)
函數名稱:LCD1602_initial
功能:1602液晶初始化
參數:無
返回值:無
voidLCD1602_initial(void)
Delayms(lOO);//等待內部復位
LCD1602_portini();〃端口初始化
LCD1602_sendbyte(iCmd,LCDa_FUNCTION);//功能、模式設定
while(LCDl602_readBF());
LCD1602_sendbyte(iCmd,LCDa_ON);〃打開顯示
while(LCD1602_readBF());
LCD1602_clear();〃清屏
while(LCDl602_readBF());
LCD1602_sendbyte(iCmd,LCDa.ENTRY);//輸入模式設定
)
Dsl302函數:
#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背光設置
#defineLCDg.ONPORTDl=BIT(l);〃LCD背光開啟
#defineLCDg_OFFPORTD&=~BIT(1);//LCD背光關閉
〃命令
#defineRD0x01
#defineWR0x00
#defineC_SEC0x80〃秒
#defineC_MIN0x82〃分
#defineC_HR0x84〃時
#dcfineC_DAY0x86〃日
#defineC_MTH0x88〃月
#dcfineC_WK0x8A//星期DATE
#defineC_YR0x8C//年
#defineC_WP0x8E〃控制(寫保護)
#defineC_CHARGE0x90〃涓流充電
#defineC_BURSTOxBE//時鐘多字節
〃配置
#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地址需左移一位
函數名稱:DS1302_init
功能:初始化DS1302的數據接口
參數:無
返回值:無
voidDS1302_portinit(void)
RTC_DDRI=BIT(RTC_CLK)IBIT(RTC_DATA)IBIT(RTC_CS);〃將時鐘端(RTC_CLK)數據端
(RTJDATA)片選端(RTC_CS)設置為輸出
//RTC_CS_DDRI=BIT(RTC_CS);
)
函數名稱:DS1302_writeB
功能:向DS13()2寫入一個字節數據(沒有RST操作)
參數:byte-要寫入的數據
返回值:無
voidDS1302_writeB(ucharbyte)
uchari;
for(i=0;i<8;i++)〃8位數據計數
(
RTC_PORT&=~BIT(RTC_CLK);〃拉低時鐘端
if(byte&0x01)//當前位是否是1
(
RTC_PORTI=BIT(RTC_DATA);//當前位是1,拉高數據端
1
else
(
RTC_PORT&=~BIT(RTC_DATA);〃當前位是0,拉低數據端
)
Delayus(lO);〃調整時鐘和脈沖寬度
RTC_PORTI=BIT(RTC_CLK);//時鐘上升沿(DS1302采樣數據)
byte?=l;〃數據右移1位,為送出新數據位做準備
函數名稱:DS1302_readB
功能:從DS1302讀出一個字節數據(沒有RST操作)
參數:無
返回值:byte--讀出的數據
ucharDS1302_readB(void)
{
uchari,byte=O;
RTC_DDR&=~BIT(RTC_DATA);〃將數據端口設置為輸入
RTC_PORT&=~BIT(RTC_DATA);〃無上拉電阻
for(i=0;i<8;i++)〃8位數據計數
(
byte?=l;//保存讀入的數據位
RTC_PORTI=BIT(RTC_CLK);//時鐘上升沿
Delayus(lO);〃延時,調整時鐘脈沖寬度
RTC_PORT&=~BIT(RTC_CLK);〃時鐘下降沿,DS1302輸出數據位
Delayus(lO);//等待數據變化(MEGA16太快,必須等待DS1302的數據位
輸出,否則不能正確讀出)
if(RTC_PIN&BIT(RTC_DATA))//當前位是否是高電平
(
bytel=BIT(RTC_CLK);〃是高電平就將返回數據的當前位置1
)
else
byte&=-BIT(RTC_CLK);〃是低電平就將返回數據的當前位置0
I
RTC_DDRI=BIT(RTC_DATA);〃最后將數據端口設置為輸出
returnbyte;〃返回讀出的數據
函數名稱:DS1302_writeD
功能:向DS1302的某個地址寫入一個字節數據
參數: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);〃調整片選脈沖
DS1302_writeB(addr);〃寫入操作命令(地址:)
Delayus(lO);
RTC_PORT&=~BIT(RTC_CLK);〃拉低時鐘端
Delayus(lO);
DS1302_writeB(data);〃寫入數據
RTC_PORT&=~BIT(RTC_CLK);〃拉低時鐘端
Delayus(lO);〃調整片選脈沖
RTC_CS_PORT&=~BIT(RTC_CS);//拉低片選端
)
函數名稱:DS1302_readD
功能:從DS1302的某個地址讀出一個字節數據
參數:addr-地址值(寄存器或RAM)
返回值:data--讀出的數據
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);〃調整片選脈沖
DS1302_writeB(addr);〃寫入操作命令(地址)
Delayus(lO);
data=DS1302_readB();〃讀出數據
Delayus(lO);
RTC_PORT&=~BIT(RTC_CLK);//拉低時鐘端
RTC_CS_PORT&=~BIT(RTC_CS);〃拉低片選端
returndata;〃返回讀111的數據
}
函數名稱:DS13O2_setT
功能:設置DS1302的時間
參數:ptTimeD-設置時間數組指針
返回值:無
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,不允許寫操作
}
函數名稱:DS1302_getT
功能:讀取DS1302的當前時間
參數:time口-讀取的時間數組
返回值:無
voidDS1302_getT(uchartime口)
{
uchari;
/〃〃〃/下面的是單次讀寫///〃〃〃//〃/〃///〃〃///
/*ucharaddr=0x80;〃讀取地址從秒寄存器開始
for(i=();i<7;i++)
(
time[i]=DS1302_readD(addrlRD);〃秒分時日月星期年
addr+=2;
}*/
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
/////////卜.而是多字節讀取///////〃////〃
RTC_CS_PORT&=~BIT(RTC_CS);//拉低片選端
Delayus(lO);
RTC_CS_PORTI=BIT(RTC_CS);//拉高片選端
Delayus(lO);〃調整片選脈沖
DS1302_writeB(0xbf);//Oxbf:時鐘多字節讀取命令
for(i=0;i<8;i++)//時間數據的存放格式是:
//秒,分,時,日,月,星期,年,控制
time[il=DS1302_readB();//【7個數據(BCD格式)+1個控制】
RTC_CS_PORT&=-B1T(RTC_CS);〃拉彳氐片選端
RTC_PORT&=~B1T(RTC_CLK);//拉低時鐘端(時鐘端在不操作時為
低)
函數名稱:DS1302_check
功能:檢測DS1302是否正常工作
參數:無
返回值: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;
)
函數名稱:DS1302_init
功能:初始化DS1302
參數:無
返回值:無
voidDS1302_init(void)
DS1302_writeD(C_WPIWR,UPROTECT);〃寫入寫允許命令
DS1302_writeD(C_SECIWR,CLK_START);〃啟動振蕩器,DS1302開始工作
DS1302_writeD(C_WPIWR,PROTECT);〃控制命令,WP位為1,不允許寫操作
函數名稱:BCD_ASCI1
功能:將壓縮BCD碼轉換成ascii碼
參數:BCD-將要轉換的壓縮BCD碼
ptasc-轉換后的ASCH碼數組指針
返回值:無
voidBCD_ASCII(ucharBCD.ucharptasc[])
ptasc[O]=BCD/16IOx3O;//0X583538〃轉換十位
ptasc[1]=BCD&0x0FI0x30;〃轉換個位
函數名稱:ASCILBCD
功能:將ascii碼轉換成壓縮BCD碼
參數:
返回值:無
ucharASCII_BCD(ucharLCDstrh,ucharLCDstrl)
ucharLCDstr=(LCDstrh*16)1(LCDstrl&OxOf);
returnLCDstr;
)
函數名稱:Get_change
功能:將輸入的時間數據匹配成getlime數組中的形式
參數: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];
)
函數名稱:Input_change(LCDstr,gettime)
功能:將輸入的時間數據匹配成gettime數組中的形式
參數: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;
)
函數名稱:Noisein_change
功能:將輸入的時間數據匹配成gellime數組中的形式
參數: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);
函數名稱:Disp_time
功能:在1602液晶上顯示當前時間(第】行格式:年-月一日星期;第2行格式:時-分-秒)
參數:time口-時間數組
返回值:無
//#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行的字符數組
ucharline2[9]={0,0;:1,0,0,':',0,0,1\0'};〃顯示第2行的字符數組
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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目管理能力檢測試題及答案
- 2025年特許金融分析師考試中常見試題及答案
- 理財中的商業倫理與社會責任2025年國際金融理財師考試試題及答案
- 項目管理流程優化試題及答案
- 2025年注冊會計師考試綜合提升試題及答案
- 掌握2025年注冊會計師考試必考內容試題及答案
- 項目管理決策制定的關鍵試題及答案
- 廣州體育學院高壓配電房標準化改造工程項目招標文件
- 新疆哈密地區本年度(2025)小學一年級數學部編版能力評測((上下)學期)試卷及答案
- 2025年證券投資基礎知識試題及答案
- 消防公務車管理制度內容
- 2025年中國電信山東分公司招聘筆試參考題庫含答案解析
- 亞朵酒店前臺培訓
- 2024年汽輪機鑄鋼件項目可行性研究報告
- 電力安全應急培訓
- 初中生創新思維與問題解決能力的提升實踐研究考核試卷
- 湖北省七市2025屆高三下學期第五次調研考試數學試題含解析
- UL2238標準中文版-2019工業控制和信號分配的電纜組件和配件UL中文版標準
- 中國類風濕關節炎診療指南(2024版)解讀
- 老年護理學臨終關懷
- 湖北公務員面試模擬88
評論
0/150
提交評論