Академический Документы
Профессиональный Документы
Культура Документы
ACALL I2C_Start MOV A,#SAW ACALL I2C_Write MOV A,#00H ACALL I2C_Write ACALL
I2C_Start MOV A,#SAR ACALL I2C_WriteLoop: ACALL I2C_Read DJNZ R1,Loop ACALL
I2C_Read_Last ACALL I2C_Stop ACALL Display ACALL Alarm_Check ACALL Relay_Check SJMP
Start;--------------------------------------------------------------Key_Scan: JNB T_Set,Jump1 JNB
A_Set,Alarm_Set JNB Rel_Set,Jump2 RET;--------------------------------------------------------------Jump1:
LJMP Time_SetJump2: SJMP Relay_Set;-------------------------------------------------------------Alarm_Check: JNB AL_Flag,CH MOV A,AL_Min CJNE A,Min,Alarm_Off MOV A,AL_Hour CJNE
A,Hour,Alarm_Off ACALL Alarm_OnCH: RET;-------------------------------------------------------------Alarm_Off: MOV SQW,#80H ACALL SQW_W RET;-------------------------------------------------------------RL_Off: CLR RL_Flag SETB Rel_Out CLR RL_On CLR_LCD MOV A,#84H D_Str DB 'Relay Off!',0
MOV A,#82H ACALL Command MOV A,#00H ACALL Data_Disp ACALL Delay ACALL AL_Logo
SJMP Main;--------------------------------------------------------------SQW_W: ACALL I2C_Start MOV
A,#SAW ACALL I2C_Write MOV A,#07H ACALL I2C_Write MOV A,SQW ACALL I2C_Write ACALL
I2C_Stop RET;--------------------------------------------------------------Alarm_On: MOV SQW,#10H ACALL
SQW_W RET;--------------------------------------------------------------Relay_Check: JNB RL_Flag,CH1 JB
RL_On,Rel_Off MOV A,Rel_M CJNE A,Min,Relay_Off MOV A,Rel_H CJNE A,Hour,Relay_Off SETB
RL_On ACALL Relay_OnCH1: RET;--------------------------------------------------------------Relay_Off: SETB
Rel_Out RET;--------------------------------------------------------------Relay_On: CLR Rel_Out RET;-------------------------------------------------------------Relay_Set: JB RL_Flag,RL_Off LJMP R_Set;-------------------------------------------------------------Rel_Off:MOV A,RM_Off CJNE A,Min,Relay_On MOV A,RH_Off CJNE
A,Hour,Relay_On CLR RL_On ACALL Relay_OffCH2: RET;-------------------------------------------------------------Time_Set: CLR_LCD MOV A,#83H D_Str DB 'Set Hours:',0 MOV A,#0C7H ACALL Command
MOV A,Hour MOV R7,A ACALL Disp_BCD JNB T_Set,$I24: PUSH ACC MOV A,#0C7H ACALL
Command POP ACCKS24: JNB UP,Inc_Hour JNB DN,Dec_Hour JNB T_Set,Done_H SJMP
KS24Inc_Hour: NOP ACALL BCD_2_Hex INC A CJNE A,#18H,SH MOV A,#00HSH: ACALL
Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP I24Dec_Hour: NOP ACALL BCD_2_Hex
DEC A CJNE A,#00H-1,SH MOV A,#17H SJMP SHDone_H: JNB T_Set,$ MOV Hour,R7;-------------------------------------------------------------Mint: CLR_LCD MOV A,#82H D_Str DB 'Set Minutes:',0 MOV
A,#0C7H ACALL Command MOV A,Min MOV R7,A ACALL Disp_BCD JNB T_Set,$M1: PUSH ACC
MOV A,#0C7H ACALL Command POP ACCKSMIN: JNB UP,Inc_Min JNB DN,Dec_Min JNB
T_Set,DoneMin SJMP KSMINInc_Min:NOP ACALL BCD_2_Hex INC A CJNE A,#3CH,SMin MOV
A,#00HSMin: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP M1Dec_Min:NOP
ACALL BCD_2_Hex DEC A CJNE A,#00H-1,SMin MOV A,#3BH SJMP SMinDoneMin:JNB T_Set,$
MOV Min,R7;-------------------------------------------------------------- CLR_LCD MOV A,#83H D_Str DB 'Set
Days:',0 MOV A,#0C5H D_Str DB '* *',0 MOV A,#0C6H ACALL Command MOV A,Day PUSH ACC
LCALL W_Day POP ACC JNB T_Set,$D1: PUSH ACC MOV A,#0C6H ACALL Command POP
ACCKSDAY: JNB UP,Inc_Day JNB DN,Dec_Day JNB T_Set,DoneDay SJMP KSDAYInc_Day:NOP
INC A CJNE A,#08H,SDay MOV A,#01HSDay: PUSH ACC LCALL W_Day POP ACC JNB UP,$
JNB DN,$ SJMP D1Dec_Day:NOP DEC A CJNE A,#00H,SDay MOV A,#07H SJMP
SDayDoneDay:JNB T_Set,$ MOV Day,A;-------------------------------------------------------------- CLR_LCD
MOV A,#83H D_Str DB 'Set Date:',0 MOV A,#0C7H ACALL Command MOV A,Date MOV R7,A
ACALL Disp_BCD JNB T_Set,$DA1: PUSH ACC MOV A,#0C7H ACALL Command POP
ACCKSDAT: JNB UP,Inc_DAT JNB DN,Dec_DAT JNB T_Set,DoneDAT SJMP
KSDATInc_DAT:NOP ACALL BCD_2_Hex INC A CJNE A,#20H,SDAT MOV A,#01HSDAT: ACALL
Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP DA1Dec_DAT:NOP ACALL BCD_2_Hex
DEC A CJNE A,#00H,SDAT MOV A,#1FH SJMP SDATDoneDAT:JNB T_Set,$ MOV Date,R7;--------
MOV Rel_M,R7Off: CLR_LCD MOV A,#81H D_Str DB ' Set Timer(OFF)',0 MOV A,#80H ACALL
Command MOV A,#00H ACALL Data_Disp ACALL Delay CLR_LCD MOV A,#83H D_Str DB 'Set
Hours:',0 MOV A,#0C7H ACALL Command MOV A,RH_Off MOV R7,A ACALL Disp_BCD JNB
Rel_Set,$RTHF1: PUSH ACC MOV A,#0C7H ACALL Command POP ACCKHFREL: JNB
UP,Inc_Rel_HF JNB DN,Dec_Rel_HF JNB Rel_Set,DoneRel_HF SJMP KHFRELInc_Rel_HF: NOP
ACALL BCD_2_Hex INC A CJNE A,#18H,HFRel MOV A,#00HHFRel: ACALL Hex_2_BCD ACALL
Disp_BCD JNB UP,$ JNB DN,$ SJMP RTHF1Dec_Rel_HF: NOP ACALL BCD_2_Hex DEC A CJNE
A,#00H-1,HFRel MOV A,#17H SJMP HFRelDoneRel_HF: JNB Rel_Set,$ MOV RH_Off,R7
CLR_LCD MOV A,#82H D_Str DB 'Set Minutes:',0 MOV A,#0C7H ACALL Command MOV
A,RM_Off MOV R7,A ACALL Disp_BCD JNB Rel_Set,$RFTM1: PUSH ACC MOV A,#0C7H ACALL
Command POP ACCKFMREL: JNB UP,Inc_Rel_MF JNB DN,Dec_Rel_MF JNB
Rel_Set,DoneRel_MF SJMP KFMRELInc_Rel_MF: NOP ACALL BCD_2_Hex INC A CJNE
A,#3CH,MFRel MOV A,#00HMFRel: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$
SJMP RFTM1Dec_Rel_MF: NOP ACALL BCD_2_Hex DEC A CJNE A,#00H-1,MFRel MOV A,#3BH
SJMP MFRelDoneRel_MF: JNB Rel_Set,$ MOV RM_Off,R7 SETB RL_Flag ACALL ALT_Done
ACALL Done ACALL RL_Logo ACALL AL_Logo LJMP Main;-------------------------------------------------------------RL_Logo:JNB RL_Flag,WE1 MOV A,#0CDH ACALL Command MOV A,#00H ACALL
Data_DispWE1: RET;--------------------------------------------------------------AL_Logo:JNB AL_Flag,WE2
MOV A,#0C2H ACALL Command MOV A,#01H ACALL Data_DispWE2: RET;-------------------------------------------------------------ALT_Done: MOV R1,#29H MOV R3,#07H ACALL I2C_Start MOV A,#SAW
ACALL I2C_Write MOV A,#08H ACALL I2C_WriteLOOP4: MOV A,@R1 ACALL I2C_Write INC R1
DJNZ R3,LOOP4 ACALL I2C_Stop RET;--------------------------------------------------------------LCD_Initial:
MOV A,#38H ACALL Command MOV A,#0CH ACALL Command CLR_LCD MOV A,#06H ACALL
Command RET;--------------------------------------------------------------Display:MOV R1,#21H MOV
A,#0CAH ACALL Command MOV A,@R1 ACALL Disp_BCD; INC R1 MOV A,#0C7H ACALL
Command MOV A,@R1 ACALL Disp_BCD; INC R1 MOV A,#0C4H ACALL Command MOV A,@R1
ACALL Disp_BCD; INC R1 MOV A,#80H ACALL Command MOV A,@R1 LCALL W_Day; INC R1
MOV A,#86H ACALL Command MOV A,@R1 ACALL Disp_BCD; INC R1 MOV A,#89H ACALL
Command MOV A,@R1 ACALL Disp_BCD; INC R1 MOV A,#8EH ACALL Command MOV A,@R1
ACALL Disp_BCD RET;--------------------------------------------------------------Hex_2_BCD: MOV
B,#00001010B DIV AB MOV R3,B MOV B,#00010000B MUL AB ADD A,R3 MOV R7,A RET;-------------------------------------------------------------BCD_2_Hex: MOV B,#00010000B DIV AB MOV R3,B MOV
B,#00001010B MUL AB ADD A,R3 RET;--------------------------------------------------------------Disp_BCD:
PUSH ACC MOV R5,A ANL A,#11110000B SWAP A MOV DPTR,#Ascii_Code MOVC A,@A+DPTR
ACALL Data_Disp MOV A,R5 ANL A,#00001111B MOVC A,@A+DPTR ACALL Data_Disp POP
ACC RET;--------------------------------------------------------------Disp_C: MOV A,#80H D_Str DB ' / /20 ',0
MOV A,#0C0H ACALL Command MOV A,#'*' ACALL Data_Disp MOV A,#0C6H ACALL Command
MOV A,#':' ACALL Data_Disp MOV A,#0C9H ACALL Command MOV A,#':' ACALL Data_Disp MOV
A,#0CFH ACALL Command MOV A,#'*' ACALL Data_Disp RET;-------------------------------------------------------------CGR: MOV R4,#08H MOV R5,#40H MOV DPTR,#Clock ACALL WRI MOV R4,#08H
MOV R5,#48H MOV DPTR,#Bell ACALL WRI RET;-------------------------------------------------------------WRI: CLR A ACALL Get_Ready MOV LCD,R5 CLR RS CLR RW SETB EN CLR EN INC R5 MOVC
A,@A+DPTR ACALL Data_Disp INC DPTR DJNZ R4,WRI RET;---------------------------------------;;
************I2C Commands************* ;;---------------------------------------;I2C_Start: SETB SCL SETB
SDA I2C_Delay CLR SDA I2C_Delay CLR SCL RET;-------------------------------------------------------------I2C_Stop: CLR SDA SETB SCL I2C_Delay SETB SDA RET;-----------------------------------------------------
---------I2C_Write: MOV BitCnt,#08HI2C_Write_Loop: RLC A MOV SDA,C NOP SCLHigh CLR SCL
DJNZ BitCnt,I2C_Write_Loop NOP SETB SDA NOP SETB SCL I2C_Delay MOV C,SDA CLR SCL
NOP JNC Label ACALL I2C_Stop ACALL I2C_Start SJMP I2C_WriteLabel: RET;-------------------------------------------------------------I2C_Read_Dummy: SETB SDA CLR A MOV
BitCnt,#08HI2C_Read_Loop: CLR SCL I2C_Delay SCLHigh MOV C,SDA RLC A DJNZ
BitCnt,I2C_Read_Loop CLR SCL MOV @R0,A INC R0 RET;-------------------------------------------------------------I2C_Ack_Write: CLR SDA NOP SETB SCL I2C_Delay CLR SCL SETB SDA I2C_Delay
RET;--------------------------------------------------------------I2C_Nack_Write: SETB SDA NOP SETB SCL
I2C_Delay CLR SCL I2C_Delay RET;--------------------------------------------------------------I2C_Read:
ACALL I2C_Read_Dummy ACALL I2C_Ack_Write RET;-------------------------------------------------------------I2C_Read_Last: ACALL I2C_Read_Dummy ACALL I2C_Nack_Write RET;-------------------------------------;; ************LCD CommandS*************;;--------------------------------------;Command:ACALL
Get_Ready MOV LCD,A CLR RS CLR RW SETB EN CLR EN RET;-------------------------------------------------------------Data_Disp: ACALL Get_Ready MOV LCD,A SETB RS CLR RW SETB EN CLR EN
RET;--------------------------------------------------------------Get_Ready: SETB Busy CLR RS SETB
RWBack: CLR EN SETB EN JB Busy,BACK RET;-------------------------------------------------------------Disp_Char: POP DPH POP DPLPrint_Text: CLR A MOVC A,@A+DPTR CJNE A,#00H,Loop2 SJMP
ReturnLoop2: MOV R4, A LCALL Data_Disp INC DPTR LJMP Print_TextReturn: MOV A,#01H JMP
@A+DPTR;--------------------------------------------------------------W_Day: CJNE A,#01H,MON LCALL
Disp_Char DB 'Sun',0 RETMON: CJNE A,#02H,TUE LCALL Disp_Char DB 'Mon',0 RETTUE: CJNE
A,#03H,WED LCALL Disp_Char DB 'Tue',0 RETWED: CJNE A,#04H,THU LCALL Disp_Char DB
'Wed',0 RETTHU: CJNE A,#05H,FRI LCALL Disp_Char DB 'Thu',0 RETFRI: CJNE A,#06H,SAT
LCALL Disp_Char DB 'Fri',0 RETSAT: CJNE A,#07H,WHAT LCALL Disp_Char DB 'Sat',0
RETWHAT: RET;--------------------------------------------------------------Ascii_Code: DB
30H,31H,32H,33H,34H,35H,36H,37H,38H,39H;-------------------------------------------------------------;IconsClock: DB 00H,0EH,15H,17H,11H,0EH,00H,00HBell: DB
04H,0EH,0EH,0EH,1FH,00H,04H,00H;-------------------------------------------------------------- END