?? yaokongrili.asm
字號:
;名稱:多功能遙控器日歷
;----------------------------
;多功能遙控器日歷功能描述
;----------------------------
;1.能夠顯示陽歷年月日,星期幾,
;2.具有時間顯示:小時,分鐘,秒鐘,秒鐘閃爍功能,采用24小時制,12小時制
;3.當前溫度實時顯示,顯示范圍-9'C---99'C
;4.能夠顯示當日距離新年的總天數,以及一年當中的第幾周
;5.斷電數據保留
;6.采用按鍵和遙控器雙重調節功能,尤其遙控器調節大大提高了人機互動
;7.16個重要節日指示燈提醒,大小月指示燈,閏年,閏月指示燈
;-----------------------------
;多功能遙控器日歷顯示面板
;-----------------------------
;2007年06月23日 星期6
;第174天 23:56:57
;第25周 農歷05月09日
;當前溫度:30.6'C
;-----------------------------
; 定義各種變量地址
;-----------------------------
SCLK BIT P3.5 ;定義DS1302時鐘
IO BIT P3.6 ;定義DS1302輸入輸出
RST BIT P3.7 ;定義DS1302復位端
IRIN BIT P3.2 ;定義紅外接收頭的輸入輸出
DYLED BIT P3.3 ;定義大月指示燈
XYLED BIT P3.4 ;定義小月指示燈
RYLED BIT P1.0 ;定義閏月指示燈
RNLED BIT P1.1 ;定義閏年指示燈
AMLED BIT P1.2 ;上午指示燈
PMLED BIT P1.3 ;下午指示燈
DECNUM BIT P1.4 ;減1按鈕
ADDNUM BIT P1.5 ;加1按鈕
DMODE BIT P1.6 ;逆序調整按鈕
MODE BIT P1.7 ;順序調整按鈕
LED1 BIT P0.0 ;時間1號指示燈
LED2 BIT P0.1 ;時間2號指示燈
LS154_A BIT P0.2 ;定義154,4輸入口
LS154_B BIT P0.3
LS154_C BIT P0.4
LS154_D BIT P0.5
LS154_G BIT P0.6
BP BIT P0.7
date_line BIT P2.7 ;定義溫度傳感器輸入輸出
YEARFLASH BIT 00H ;定義年閃爍
MONTHFLASH BIT 01H ;定義月閃爍
DAYFLASH BIT 02H ;定義日閃爍
HOURFLASH BIT 03H ;定義小時閃爍
MINUTEFLASH BIT 04H ;定義分鐘閃爍
SECONDFLASH BIT 05H ;定義秒鐘閃爍
KEEPFLASH BIT 06H ;定義保持閃爍
CON_ADJ BIT 07H ;定義遙控器調整進入位
YEARBIT BIT 08H ;年調整位
MONTHBIT BIT 09H ;月調整位
DAYBIT BIT 0AH ;日調整位
HOURBIT BIT 0BH ;時調整位
MINUTEBIT BIT 0CH ;分調整位
CHOICE_ADJ BIT 0EH ;遙控器和按鍵選擇調整位
CLOSE_DIS BIT 0FH ;關閉顯示選擇位
ALARM BIT 11H ;整點鬧鈴標志位
TURNOFF BIT 12H ;關機標志位
; 23H,24H,25H, 遙控解碼程序使用
; 27H,2CH 整點鳴叫程序使用
; 2DH,2EH 開機延時程序適用
IRCOM DATA 28H ;遙控編碼地址位28H,29H,2AH,2BH
SEC_FLA DATA 26H ;秒鐘閃爍計數器
ALARM_NO DATA 2FH ;整點鳴叫次數
;-----------------------------
TIME_YEAR DATA 30H ;定義年、月、日、小時、分鐘、秒
TIME_MONTH DATA 31H
TIME_DAY DATA 32H
WEEK DATA 33H
HOUR DATA 34H
MINUTE DATA 35H
SECOND DATA 36H
;-----------------------------
DS1302_ADDR DATA 37H ;定義DS1302地址單元和數據單元
DS1302_DATA DATA 38H
;-----------------------------
ZHOUCI DATA 39H ;定義周次和余數
YUSHU DATA 3AH
;-----------------------------
TEMPL DATA 3BH ;定義溫度的低位
TEMPH DATA 3CH ;定義溫度的高位
TEMP_BUF DATA 3DH ;定義溫度的中間地址單元
;-----------------------------
;-----------------------------
week_byte1 DATA 46H ;定義計算某年某月某日對應星期幾的中間單元
WEEK_BYTE2 DATA 4CH
WEEK_BYTE3 DATA 4DH
WEEK_BYTE4 DATA 4EH
WEEK_BYTE5 DATA 4FH
;-----------------------------
CONvert_year DATA 6Eh ;定義農歷年、月、日
CONvert_month DATA 6Fh ;BIT7 為 1 表示閏月
CONvert_date DATA 7Eh
temp_Byte1 DATA 5Bh ;定義農歷中間單元
temp_Byte2 DATA 5Ch
temp_Byte3 DATA 5Dh
temp_Byte4 DATA 5Eh
temp_Byte5 DATA 5Fh
;---------------------------------------------
; 定義數據顯示單元和緩沖單元
;---------------------------------------------
SECOND_DIS_L DATA 60H ;定義秒鐘顯示和緩沖地址單元
SECOND_BUF_L DATA 40H
SECOND_DIS_H DATA 61H
SECOND_BUF_H DATA 41H
;-----------------------------
MINUTE_DIS_L DATA 62H ;定義分鐘顯示和緩沖地址單元
MINUTE_BUF_L DATA 42H
MINUTE_DIS_H DATA 63H
MINUTE_BUF_H DATA 43H
;-----------------------------
HOUR_DIS_L DATA 64H ;定義小時顯示和緩沖地址單元
HOUR_BUF_L DATA 44H
HOUR_DIS_H DATA 65H
HOUR_BUF_H DATA 45H
;-----------------------------
TEMP_TEN DATA 66H ;定義溫度十位、個位、小數位、符號位顯示單元
TEMP_SIGN DATA 6CH
TEMP_DEC DATA 6DH
TEMP_UNIT DATA 7DH
;-----------------------------
SUMDAYL DATA 67H ;定義總天數顯示和緩沖地址單元
SUMDAYL_BUF DATA 47H
SUMDAYM DATA 68H
SUMDAYM_BUF DATA 48H
SUMDAYH DATA 69H
SUMDAYH_BUF DATA 49H
;-----------------------------
WEEKNOL DATA 6AH ;定義周次顯示和緩沖地址單元
WEEKNOL_BUF DATA 4AH
WEEKNOH DATA 6BH
WEEKNOH_BUF DATA 4BH
;-----------------------------
DATE_DIS_L DATA 70H ;定義日期顯示和緩沖地址單元
DATA_BUF_L DATA 50H
DATE_DIS_H DATA 71H
DATA_BUF_H DATA 51H
;-----------------------------
NDATE_DIS_L DATA 72H ;定義農歷日期顯示和緩沖地址單元
NDATA_BUF_L DATA 52H
NDATE_DIS_H DATA 73H
NDATA_BUF_H DATA 53H
;-----------------------------
NMONTH_DIS_L DATA 74H ;定義農歷月顯示和緩沖地址單元
NMONTH_BUF_L DATA 54H
NMONTH_DIS_H DATA 75H
NMONTH_BUF_H DATA 55H
;-----------------------------
WEEK_DIS DATA 76H ;定義星期顯示和緩沖地址單元
WEEK_BUF DATA 56H
;-----------------------------
MONTH_DIS_L DATA 77H ;定義月顯示和緩沖地址單元
MONTH_BUF_L DATA 57H
MONTH_DIS_H DATA 78H
MONTH_BUF_H DATA 58H
;-----------------------------
YEAR_DIS_L DATA 79H ;定義年顯示和緩沖地址單元
YEAR_BUF_L DATA 59H
YEAR_DIS_H DATA 7AH
YEAR_BUF_H DATA 5AH
;-----------------------------
YEAR_0_DIS DATA 7BH ;定義2 0顯示單元
YEAR_2_DIS DATA 7CH
;-----------------------------
;*****************************************
; 初始化程序
;*****************************************
ORG 00H
LJMP START
ORG 03H
JMP INT ;外部中斷0入口地址
ORG 0BH
JMP T0_INT ;定時器0入口地址
ORG 1BH
JMP T1_INT ;定時器1入口地址
ORG 0030H
;---------------------------------------------
; 主程序
;---------------------------------------------
START:
MOV R1,#126 ;清RAM 128單元
MOV R0,#2
MOV A,#0
CLEAR:
MOV @R0,A
INC R0
DJNZ R1,CLEAR
MOV R0,A
MOV R1,A
MOV R7,#10 ;計數器0 初始計數值
LCALL ON_DISPLAY
MOV 6CH,#0CH ;攝氏溫度的符號'C
SETB EA ;打開總中斷
MOV SCON,#00H ;串行輸出,方式0
MOV TMOD,#11H ;計數器1,方式1;計數器0,方式1
MOV TL1,#00H ;計數器1 初值 65.5MS中斷一次,用于按鈕閃爍調節
MOV TH1,#00H
MOV TH0,#3CH ;計數器0 50MS中斷一次
MOV TL0,#0B0H
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允許寫1302
LCALL WRITE
MOV DS1302_ADDR,#90H
MOV DS1302_DATA,#0A6H ;1302充電,充電電流1.1mA
lcall write
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H ;禁止寫1302
LCALL WRITE
MOV SEC_FLA,#10 ;秒燈閃爍賦初始值
CLR ET1 ;關閉定時器1中斷
SETB EX0 ;打開外部中斷0
SETB IT0 ;采用脈沖下降沿觸發
SETB PX0 ;外部中斷零為最高級別中斷
CLR LED1
MAIN:
MOV DS1302_ADDR,#8DH ;READ OUT YEAR
LCALL READ
MOV TIME_YEAR,DS1302_DATA
MOV DS1302_ADDR,#89H ;READ OUT MONTH
LCALL READ
MOV TIME_MONTH,DS1302_DATA
MOV DS1302_ADDR,#87H ;READ OUT DAY
LCALL READ
MOV TIME_DAY,DS1302_DATA
MOV DS1302_ADDR,#85H ;READ OUT HOUR
LCALL READ
MOV HOUR,DS1302_DATA
MOV DS1302_ADDR,#83H ;READ OUT MINUTE
LCALL READ
MOV MINUTE,DS1302_DATA
MOV DS1302_ADDR,#81H ;READ OUT SECOND
LCALL READ
MOV SECOND,DS1302_DATA
OPEN_AM_PM:
MOV A,HOUR
CJNE A,#12H,AM_PM
AM_PM:
JNC OPEN_PMLED
CLR AMLED
SETB PMLED
AJMP CEL_DIVIDE
OPEN_PMLED:
CLR PMLED
SETB AMLED
CEL_DIVIDE:
MOV R0,TIME_YEAR ;年分離,送顯示緩存
LCALL DIVIDE
MOV 79H,R1
MOV 59H,R1
MOV 7AH,R2
MOV 5AH,R2
MOV R0,TIME_MONTH ;月分離,送顯示緩存
LCALL DIVIDE
MOV 77H,R1
MOV 57H,R1
MOV 78H,R2
MOV 58H,R2
MOV A,78H ;主程序中消除陽歷月高位0
CJNE A,#0,MAIN_XIAO_DAY
MOV 78H,#0AH
MOV 58H,#0AH
MAIN_XIAO_DAY:
MOV R0,TIME_DAY ;日分離,送顯示緩存
LCALL DIVIDE
MOV 70H,R1
MOV 50H,R1
MOV 71H,R2
MOV 51H,R2
MOV A,71H ;主程序中消除陽歷日高位0
CJNE A,#0,MAIN_XIAO_HOUR
MOV 71H,#0AH
MOV 51H,#0AH
MAIN_XIAO_HOUR:
MOV R0,HOUR ;小時分離,送顯示緩存
LCALL DIVIDE
MOV 64H,R1
MOV 44H,R1
MOV 65H,R2
MOV 45H,R2
MOV A,65H ;主程序中消除小時高位0
CJNE A,#0,MAIN_MINUTE
MOV 65H,#0AH
MOV 45H,#0AH
MAIN_MINUTE:
MOV R0,MINUTE ;分分離,送顯示緩存
LCALL DIVIDE
MOV 62H,R1
MOV 42H,R1
MOV 63H,R2
MOV 43H,R2
MOV A,63H
CJNE A,#0,MAIN_SECOND
MOV 63H,#0AH
MOV 43H,#0AH
MAIN_SECOND:
MOV R0,SECOND ;秒分離,送顯示緩存
LCALL DIVIDE
MOV 60H,R1
MOV 40H,R1
MOV 61H,R2
MOV 41H,R2
MOV A,61H
CJNE A,#0,MAIN_GENGXIN ;主程序中消除秒鐘高位0
MOV 61H,#0AH
MOV 41H,#0AH
MAIN_GENGXIN:
LCALL GENGXIN ;更新農歷程序
MOV R0,CONVERT_MONTH ;農歷月分離,送顯示緩存
LCALL DIVIDE
MOV 74H,R1
MOV 54H,R1
MOV 75H,R2
MOV 55H,R2
MOV A,75H ;主程序中消除農歷月高位0
CJNE A,#0,MAIN_XIAO_NDAY
MOV 75H,#0AH
MOV 55H,#0AH
MAIN_XIAO_NDAY:
MOV R0,CONVERT_DATE
LCALL DIVIDE
MOV 72H,R1
MOV 52H,R1
MOV 73H,R2
MOV 53H,R2
MOV A,73H ;主程序中消除農歷日高位0
CJNE A,#0,MAIN_WEEK
MOV 73H,#0AH
MOV 53H,#0AH
MAIN_WEEK:
LCALL GETWEEK ;更新星期程序
MOV 76H,WEEK
MOV 56H,WEEK
LCALL ADJ_TOTAL ;調用總天數,星期程序
LCALL GET_TEMPER ;調用溫度程序
LCALL DX_MONTH ;調用判斷大小月程序
LCALL DISPLAY
ADJ_NEXT:
JNB MODE,SETG ;調整日歷
MOV R3,TIME_YEAR
LCALL ZH ;判斷當前年是否為閏年
MOV A,B
JNZ OFF_RNLED
CLR RNLED
AJMP ADJ_RYLED
OFF_RNLED:
SETB RNLED
ADJ_RYLED:
JNB F0,OFF_RYLED
CLR RYLED ;閏月,則p1.0清0,指示燈亮
LJMP MAIN
OFF_RYLED:
SETB RYLED ;非閏月,則p1.0置位,指示燈滅
LJMP MAIN
;*******************************
;* 公歷設置程序 *
;*******************************
SETG:
SETB TR1
SETB ET1
SETB CHOICE_ADJ
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允許寫1302
LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#80H ;1302停止振蕩
LCALL WRITE
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -