|
- ;時控開關項目起始時間2015、8、29
- ORG 0000H
- ;***1602端口定義開始
- RS EQU P1.0
- RW EQU P1.1
- E EQU P1.2
- HOUR10 EQU 30H;小時十位
- HOUR1 EQU 31H ;小時個位
- MINTE10 EQU 32H ;分鐘十位 緩沖區
- MINTE1 EQU 33H ;分鐘個位
- SCNEDS10 EQU 34H ;秒十位
- SCNEDS1 EQU 35H ;秒個位
- ;*****按鍵設置
- SCNEDS EQU 36H ;秒
- MINTE EQU 37H ;分
- HOUR EQU 38H ;時
- SETMY1 EQU 39H ;選擇秒寄存器
- SETTM1 EQU 40H ;選擇秒設定時間
- SETMY2 EQU 41H ;選擇分寄存器 緩沖區
- SETTM2 EQU 42H ;選擇分設定時間
- SETMY3 EQU 43H ;選擇時寄存器
- SETTM3 EQU 44H ;選擇時設定時間
- ;按鍵設置用*********
- ;*****************鬧鐘設置用
- STARTHOUR10 EQU 45H
- STARTHOUR1 EQU 46H
- STARTMINTE10 EQU 47H ;鬧鐘開始時間
- STARTMINTE1 EQU 48H
- ;;*****************8 區間有效緩沖區
- STOPHOUR10 EQU 49H
- STOPHOUR1 EQU 50H ; 鬧鐘停止時間
- STOPMINTE10 EQU 51H
- STOPMINTE1 EQU 52H
- ;*****************鬧鐘設置用
- STARTMINTE EQU 53H
- STOPMINTE EQU 54H
- STARTHOUR EQU 55H
- STOPHOUR EQU 56H
-
-
-
- ;***1602端口定義結束
- ;1302*****端口定義開始
- MOV DPTR,#TAB
- CE EQU P3.5
- IO EQU P3.3
- SCLK EQU P3.4
- AJMP MAIN
- ;1302*******端口定義結束
-
- ORG 0030H
- MAIN:;主函數
- lcall SETTIME ;設置時鐘
- LCALL SETCLOCK
- START:LCALL DATE1302 ; 讀1302實時數據
- AJMP MAIN
- ;**************************************************************************************
- ;S設置液晶 *
- ; *
- ;**************************************************************************************
- INIT:; 液晶初始化開始 /
- ;********* /
- LCALL DELAY15MS
- LCALL WRINSTRUCT;寫指令
-
- MOV P0,#38H ;設置61*2顯示,5*7點陣,8位數據口
- LCALL PULSE;高脈沖
- ;*****
- LCALL DELAY5MS
- MOV P0,#38H ;設置61*2顯示,5*7點陣,8位數據口
- LCALL PULSE;高脈沖
- LCALL DELAY5MS
- MOV P0,#38H ;設置61*2顯示,5*7點陣,8位數據口
- LCALL PULSE;高脈沖
- ;**************
- MOV P0,#06H ;設置1602為讀寫一個字符后地址指針加一,且光標加一
- LCALL PULSE;高脈沖
- ;*****
- LCALL DELAY5MS
- ;**************
- MOV P0,#0FH;設置1602位為開顯示顯示光標且閃爍
- LCALL PULSE;高脈沖
- ;*****
- LCALL DELAY5MS
- ;**************
- MOV P0,#01H ;清屏
- LCALL PULSE;高脈沖
- ;**************
- LCALL DELAY5MS
- ;**************
- RET ; 液晶初始化結束
- ;**********************************************************************************
- DATE1302:; 讀1302實時數據開始
- LCALL REST
- lcall write1302 ;設置時鐘寫入1302芯片
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop ;哈哈哈原來如此!這里果然得加延時,不加的話1302反應不過來啊,哈哈哈
- nop ;至今天我終于把DS1302`搞定了,這也是努力得來的啊,我雖然笨,但別人做到了,我通過努力也一定辦得到。
- ;至今天板子上的器件都搞定了2010年8月1日,這個值得紀念的 日子,
- nop ;
- nop
- nop
- nop
- nop
- KK: MOV A,#81H
- LCALL READ1302
- MOV 55H,A
- ANL A,#0FH ; 秒處理
- MOV SCNEDS1,A
- MOV A,55H
- SWAP A
- ANL A,#0FH
- MOV SCNEDS10,A
- MOV A,#83H
- LCALL READ1302
- MOV 55H,A
- ANL A,#0FH ;分鐘處理
- MOV MINTE1,A
- MOV A,55H
- SWAP A
- ANL A,#0FH
- MOV MINTE10,A
- MOV A,#85H
- LCALL READ1302
- MOV 55H,A
- ANL A,#0FH
- MOV HOUR1,A ;小時處理
- MOV A,55H
- SWAP A
- ANL A,#03H
- MOV HOUR10,A
- LCALL DELAY900MS
- LCALL CLOCKS ;定時器查詢
- LCALL DISPLAY1602;液晶顯示
- AJMP KK
-
-
-
- RET ; 讀1302實時數據結束
- ;***********************************************************************************
- DISPLAY1602:;1602液晶顯示開始
- LCALL INIT ;液晶初始化
- ;第一行顯示TIME**:**:
- LCALL WRINSTRUCT;寫指令
- MOV P0,#82H;從02號地址開始顯示
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- LCALL WDATE;寫數據
- MOV P0,#54H;顯示T;
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV P0,#49H;顯示I; TIME
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV P0,#4DH;顯示M;
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV P0,#45H;顯示E;
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,HOUR10
- MOVC A,@A+DPTR;顯示小時十位;
- MOV P0,A
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,HOUR1;顯示小時個位;
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
-
- MOV P0,#3AH;顯示:;
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,MINTE10;顯示分鐘十位;
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,MINTE1;顯示分鐘個位;
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
-
- MOV P0,#3AH;顯示:;
- LCALL PULSE;高脈沖
-
- LCALL DELAY1MS
- MOV A,SCNEDS10;顯示秒十位;
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,SCNEDS1;顯示秒個位;
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL PULSE;高脈沖
- ;******************************************************第二行顯示,以上是第一行顯示
- LCALL DELAY20MS
- LCALL WRINSTRUCT;寫指令
- MOV P0,#0C0H;從第二行00號40H顯示地址開始顯示
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- LCALL WDATE;寫數據
- MOV P0,#53H;顯示S;
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV P0,#54H;顯示T; STR
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV P0,#52H;顯示R;
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,STARTHOUR10
- MOVC A,@A+DPTR;顯示定時開始小時十位;
- MOV P0,A
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,STARTHOUR1;顯示定時開始小時個位;
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
-
- MOV P0,#3AH;顯示:;
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,STARTMINTE10;顯示定時開始分鐘十位;
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,STARTMINTE1;顯示定時開始分鐘個位;
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL PULSE;高脈沖
- ;××××××××××××××××××××××以上是開始鬧鐘設置時間顯示××××××××××××××××××××××××××××
- LCALL DELAY1MS
- LCALL WDATE;寫數據
- MOV P0,#53H;顯示S;
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV P0,#54H;顯示T; STP
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV P0,#50H;顯示P;
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,STOPHOUR10
- MOVC A,@A+DPTR;顯示定時結束小時十位;
- MOV P0,A
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,STOPHOUR1;顯示定時結束小時個位;
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
-
- MOV P0,#3AH;顯示:;
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,STOPMINTE10;顯示定時結束分鐘十位;
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL PULSE;高脈沖
- LCALL DELAY1MS
- MOV A,STOPMINTE1;顯示定時結束分鐘個位;
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL PULSE;高脈沖
-
-
-
-
-
-
-
-
- RET;1602液晶顯示結束
- ;************************************************************************************
- SETTIME: ;按鍵設置時間開始
- MOV P2,#0FH
- LCALL DISPLAY1602
- pp:JB P2.0,$
- LCALL DELAY20MS
- JB P2.0,PP
- ;**************
- CLR P1.7
- LCALL DELAY20MS ;蜂鳴器
- LCALL DELAY20MS
- SETB P1.7
- ;*****************
- MOV SETMY1,#80H;秒指令
- LCALL DISPLAY1602
- JB P2.1,$
- LCALL DELAY20MS
- L3:JB P2.1,YY1
- LCALL DELAY20MS
- JB P2.1,L3
- MOV B,#10
- MOV A,SCNEDS
- DIV AB
- CJNE A,#05,LINE1
- MOV A,B
- CJNE A,#09,LINE1
- MOV SETTM1,#00H
- MOV SCNEDS,#00H
- AJMP O1
- LINE1:CLR C;#########################||||特別注意這里啊C一定要清零,負責DA轉換是不對的|||||||=+++++++++++++++vvvvvvvvvvvvvvbbbbbbbbbb
- MOV A,SETTM1 ;設置加秒時間
- INC A
- DA A
- MOV SETTM1,A
-
- ;*************************
- INC SCNEDS;用來同步顯示
- O1:MOV A,SCNEDS
- MOV B,#10
- DIV AB
- MOV SCNEDS10,A
- MOV SCNEDS1,B ; 秒處理
-
- LCALL DISPLAY1602
- ;********************
- YY1: JB P2.0,L3
- ;************************************已上是秒設置
- LCALL DISPLAY1602
- pp2:JB P2.0,$
- LCALL DELAY20MS
- JB P2.0,PP2
- ;**************
- CLR P1.7
- LCALL DELAY20MS
- LCALL DELAY20MS
- SETB P1.7
- ;*****************
- MOV SETMY2,#82H;分指令
- LCALL DISPLAY1602
- JB P2.1,$
- L32:JB P2.1,YY2
- LCALL DELAY20MS
- JB P2.1,L32
- MOV B,#10
- MOV A,MINTE
- DIV AB
- CJNE A,#05,LINE2
- MOV A,B
- CJNE A,#09,LINE2
- MOV SETTM2,#00H
- MOV MINTE,#00H
- AJMP O2
- LINE2:
- CLR C ;######################################||||特別注意這里啊C一定要清零,負責DA轉換是不對的|||||||=+++++++++++++++vvvvvvvvvvvvvvbbbbbbbbbb
- MOV A,SETTM2 ;設置加分時間
- INC A
- DA A
- MOV SETTM2,A
- ;*************************
- INC MINTE;用來同步顯示
- O2:MOV A,MINTE
- MOV B,#10
- DIV AB
- MOV MINTE10,A
- MOV MINTE1,B
- LCALL DISPLAY1602
- ;********************
- YY2: JB P2.0,L32
- ;**************************已上是分設置
- LCALL DISPLAY1602
- pp3:JB P2.0,$
- LCALL DELAY20MS
- JB P2.0,PP3
- ;**************
- CLR P1.7
- LCALL DELAY20MS
- LCALL DELAY20MS
- SETB P1.7
- ;*****************
- MOV SETMY3,#84H ;小時指令
- LCALL DISPLAY1602
- JB P2.1,$
- LCALL DELAY20MS
- L33:JB P2.1,YY3
- LCALL DELAY20MS;去抖動
- JB P2.1,L33
- MOV B,#10
- MOV A,HOUR
- DIV AB
- CJNE A,#02,LINE3
- MOV A,B
- CJNE A,#03,LINE3
- MOV SETTM3,#00H
- MOV HOUR,#00H
- AJMP O3
- LINE3:CLR C;################################# ||||特別注意這里啊C一定要清零,負責DA轉換是不對的媽個比我費了老大的時|||||||=+++++++++++++++vvvvvvvvvvvvvvbbbbbbbbbb
- MOV A,SETTM3
- INC A
- DA A
- MOV SETTM3,A ;設置加時時間
- ;*************************
- INC HOUR;用來同步顯示
- O3:MOV A,HOUR
- MOV B,#10
- DIV AB
- MOV HOUR10,A
- MOV HOUR1,B
- LCALL DISPLAY1602
- ;********************
- YY3: JB P2.0,L33
- ;******************************已上是時設置
- RET ;按鍵設置時間結束
- ;*************************************************************************************
- ;************************************************************************************
- SETCLOCK: ;按鍵設置鬧鐘開始
- UR1:JB P2.0,$
- LCALL DELAY20MS ;進入定時器開始時間設制 ××設置完時間按下2.0則進入設置定時器模式,按2.1加2.2減設置想要退出則按2.0鍵
- JB P2.0,UR1
- ;**************
- CLR P1.7
- LCALL DELAY20MS
- LCALL DELAY20MS
- SETB P1.7
- ;*****************
- LCALL DISPLAY1602
- JB P2.1,$;很重要啊,關鍵啊,如果沒有則直接向下了,正是他
- LCALL DELAY20MS
- UR2:JB P2.1,YF
- LCALL DELAY20MS;去抖動
- JB P2.1,UR2
- ;********************
-
- MOV B,#10
- MOV A,STARTMINTE
- DIV AB
- CJNE A,#05,LINE21
- MOV A,B
- CJNE A,#09,LINE21
- MOV STARTMINTE,#00H
- AJMP O21
- LINE21:INC STARTMINTE ;鬧鐘開始時間設置加分
- O21:MOV A,STARTMINTE
- MOV B,#10
- DIV AB
- MOV STARTMINTE10,A
- MOV STARTMINTE1,B
-
- LCALL DISPLAY1602
- ;********************
-
- YF: JB P2.0,UR2
- ;**************
- CLR P1.7
- LCALL DELAY20MS
- LCALL DELAY20MS
- SETB P1.7
- ;*****************
- JB P2.1,$;很重要啊,關鍵啊,如果沒有則直接向下了,正是他
- LCALL DELAY20MS
- UR22:JB P2.1,YF2
- LCALL DELAY20MS;去抖動
- JB P2.1,UR22
- MOV B,#10
- MOV A,STARTHOUR
- DIV AB
- CJNE A,#02,LINE22
- MOV A,B
- CJNE A,#03,LINE22
- MOV STARTHOUR,#00H
- SJMP O22
- LINE22:INC STARTHOUR ;鬧鐘開始時間置加時
- O22:MOV A,STARTHOUR
- MOV B,#10
- DIV AB
- MOV STARTHOUR10,A
- MOV STARTHOUR1,B
- LCALL DISPLAY1602
- ;********************
- YF2: JB P2.0,UR22
- ;***************
- ;******************************************************************************
- ;**************
- CLR P1.7
- LCALL DELAY20MS
- LCALL DELAY20MS
- SETB P1.7
- ;*****************
- JB P2.1,$;很重要啊,關鍵啊,如果沒有則直接向下了,正是他
- LCALL DELAY20MS
- UR23:JB P2.1,YF3
- LCALL DELAY20MS;去抖動
- JB P2.1,UR23
- MOV B,#10
- MOV A,STOPMINTE
- DIV AB
- CJNE A,#05,LINE23
- MOV A,B
- CJNE A,#09,LINE23
- MOV STOPMINTE,#00H
- SJMP O23
- LINE23:INC STOPMINTE ;鬧鐘結束時間設置加分
- O23:MOV A,STOPMINTE
- MOV B,#10
- DIV AB
- MOV STOPMINTE10,A
- MOV STOPMINTE1,B
- LCALL DISPLAY1602
- ;********************
- YF3: JB P2.0,UR23
- ;***************
- ;**************
- CLR P1.7
- LCALL DELAY20MS
- LCALL DELAY20MS
- SETB P1.7
- ;*****************
- JB P2.1,$;很重要啊,關鍵啊,如果沒有則直接向下了,正是他
- LCALL DELAY20MS
- UR24:JB P2.1,YF4
- LCALL DELAY20MS;去抖動
- JB P2.1,UR24
- MOV B,#10
- MOV A,STOPHOUR
- DIV AB
- CJNE A,#02,LINE24
- MOV A,B
- CJNE A,#03,LINE24
- MOV STOPHOUR,#00H
- SJMP O24
- LINE24:INC STOPHOUR ;鬧鐘結束時間設置加時
- O24:MOV A,STOPHOUR
- MOV B,#10
- DIV AB
- MOV STOPHOUR10,A
- MOV STOPHOUR1,B
- LCALL DISPLAY1602
- ;********************
- YF4: JB P2.0,UR24
- ;***************
- RET
-
- CLOCKS: ;定時器查詢
- MOV A,HOUR10
- CJNE A,STARTHOUR10,ED
- MOV A,HOUR1
- CJNE A,STARTHOUR1,ED
- MOV A,MINTE10 ;鬧鐘開始時間
- CJNE A,STARTMINTE10,ED
- MOV A,MINTE1
- CJNE A,STARTMINTE1,ED
- clr P1.7
- ED:
- MOV A,HOUR10
- CJNE A,STOPHOUR10,EN
- MOV A,HOUR1
- CJNE A,STOPHOUR1,EN
- MOV A,MINTE10 ;鬧鐘停止時間
- CJNE A,STOPMINTE10,EN
- MOV A,MINTE1
- CJNE A,STOPMINTE1,EN
- setb P1.7
- EN:RET ;按鍵設置鬧鐘結束
- ;*************************************************************************************
- DELAY5MS:MOV R6,#0FH
- DL1:
- MOV R5,#98H
- DJNZ R5,$ ;延時5ms
- DJNZ R6,DL1
- RET
- DELAY20MS: MOV R7,#01H
- DL111:
- MOV R6,#0DEH
- DL011:
- MOV R5,#28H
- DJNZ R5,$
- DJNZ R6,DL011
- DJNZ R7,DL111
- RET
- WRINSTRUCT :
- CLR RS
- CLR RW ;寫指令允許
- CLR E
- RET
- WDATE:
- SETB RS
- CLR RW ;寫數據允許 1602使用區
- CLR E
- RET
- PULSE:;高脈沖
- SETB E
- NOP
- NOP
- NOP
- CLR E
- RET
- DELAY1MS:
- MOV R6,#66H
- DL10:
- MOV R5,#03H
- DJNZ R5,$ ;延時1ms
- DJNZ R6,DL10
- RET
- DELAY15MS:
-
- MOV R6,#33H ;延時15ms
- DL20:
- MOV R5,#86H
- DJNZ R5,$
- DJNZ R6,DL20
- RET
- DELAY900MS:
- MOV R7,#7FH
- DL1E:
- MOV R6,#80H
- DL0E:
- MOV R5,#18H
- DJNZ R5,$
- DJNZ R6,DL0E
- DJNZ R7,DL1E
- RET
- ;********以下是1302時鐘程序開始***********************以下是1302時鐘程序開始 ***********************************
- deley:mov r0,#001h
- loop:mov r1,#0ffh
- lo:nop
- nop
- nop ;延時子程序
- NOP
- NOP
- NOP
- djnz r1,lo
- djnz r0,loop
- ret
- ;**********1302
- READ1302:;注意這里啊,這里的讀貝內置到肚里面,原因再與如果分開在時序上是不成立的,
- CLR SCLK
- SETB CE
- SETB IO
- NOP
- NOP
- CLR C
- NOP
- NOP
- MOV R1,#08
- Ro:
- CLR SCLK
- RRC A
- MOV IO,C
- NOP
- SETB SCLK
- NOP
- NOP
- DJNZ R1,Ro
-
- mov r1,#08
- RUD:
- setb sclk
- NOP
- NOP
- CLR SCLK
- NOP
- NOP
- MOV C,IO
- NOP
- RRC A
- DJNZ R1,RUD
- CLR SCLK
- CLR CE
- RET
- ;************1302
- write1302:LCALL DELAY5MS
- mov a,SETMY1;選擇秒寄存器
- LCALL WRITE1
- mov a,SETTM1;選擇秒時間
- LCALL WRITE2
- LCALL DELAY10US
- mov a,SETMY2;分寄存器
- LCALL WRITE1
- mov a,SETTM2;設分時間
- LCALL WRITE2
- LCALL DELAY10US
- mov a,SETMY3;時寄存器
- LCALL WRITE1
- mov a,SETTM3 ;設為20,am,24小時制
- LCALL WRITE2
- RET
- WRITE1:clr sclk
- SETB CE
-
- MOV R1,#08
- WUR: RRC A
- MOV IO,C
- NOP
- NOP
-
- SETB SCLK
- NOP
- NOP
- CLR SCLK
- DJNZ R1,WUR
- RET
-
- WRITE2: MOV R1,#08
- WURt: RRC A
- MOV IO,C
- NOP
- NOP
- NOP
- SETB SCLK
- NOP
- NOP
- CLR SCLK
- DJNZ R1,WURt
- CLR SCLK
- NOP
- NOP
- NOP
- CLR CE
- RET
- ;********1302
-
- REST:CLR SCLK
- CLR CE
- clr io
- clr c
- NOP
- NOP
- NOP
- NOP
- NOP
- RET
- ;********1302
- DELAY10US:
- NOP
- NOP
- NOP
- NOP ;延時10us
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- RET
- ;1302程序結束*********************************************************
- TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
- END;2015年8月30日于天津,完成主體9月1日完成初步修飾
復制代碼
|
|