久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
AT89C2051+DS1302的紅外遙控電子鐘匯編程序 加了高位滅0功能
[打印本頁]
作者:
xiaos
時間:
2015-4-3 01:20
標題:
AT89C2051+DS1302的紅外遙控電子鐘匯編程序 加了高位滅0功能
;DS1302+AT89C2051的LED鐘的電路圖:
下面是匯編語言源程序:
;遙控器各按鍵數據碼,可根據不同的遙控器修改對應的鍵碼
muteM EQU 10h ;靜音鍵 鬧鈴開/關
timerT EQU 5ch ;菜單鍵 進入/退出設置狀態
leftL EQU 5fh ;左移鍵
rightR EQU 5bh ;右移鍵
upU EQU 56h ;增加鍵
downD EQU 57h ;減少鍵
d_off EQU 16H ;顯示鍵 LED數碼管顯示/關閉
recall EQU 44H ;日歷鍵 DS1302初始化操作
K_on BIT P3.1 ;鬧鈴輸出
LED1 BIT P3.3
LED2 BIT P3.4
LED3CLK BIT P3.5 ;DS1302
LED4IO BIT P3.7
RST BIT P3.0
SECOND EQU 60H
;60H 秒
;61h 分
;62h 時
;63h 日
;64h 月
;65h DAY
;66h 年
;6Ah 鬧分 from 00(1302)
;6BH 鬧時 from 01(1302)
;***************************
ORG 0000H
AJMP START
ORG 0003H
LJMP S_INT ;IRF
ORG 000BH ;200Us
LJMP P_INT ;
ORG 001BH ;display LED
LJMP DISPLAY
;**************************** ;main program
ORG 0030H
START: CLR RST
MOV SP,#2AH
SETB 05H
CLR 06H
SETB 07H;CLR 07H
CLR 08H
CLR 09H
CLR 0AH
CLR 0BH
CLR 0CH
SETB 0DH
CLR 0EH
CLR 0FH
CLR 10H
CLR 11H
MOV R2,#00H ;
MOV R3,#00H ;
MOV TMOD,#12H
MOV TL1,#0e5H ;wait how long to display (20ms)
MOV TH1,#0BeH
MOV TH0,#3FH ;200uS 3f
MOV TL0,#3FH
SETB ET0
SETB ET1
setb pt0
SETB TR0
SETB TR1
SETB IT0 ;設定INT0觸發方式
SETB EX0 ;INT0請求中斷
CLR PX0
;LCALL SET1302 ;初始化
MOV R1,#0C1H ;取定時參數從1302中
acall T_6061
MOV 6AH,A ;M
MOV R1,#0C3H
ACALL T_6061
MOV 6BH,A ;H
MOV 61H,#0
MOV 62H,#0
SETB EA
sjmp $
;**********************************
;********************************
DISPLAY: PUSH ACC
PUSH PSW
MOV TL1,#0e0H ;wait how long to display (20ms)
MOV TH1,#0b0H
mov dptr,#tab1
JB 0EH,DIS2
JB 0FH,DIS3
JB 10H,DIS4
JB 11H,DIS5
JNB 0DH,D_OUT
JNB 08H,D_GO ;定時到時,顯示閃爍
JNB 07H,D_OUT
D_GO: MOV DPTR,#TAB1
MOV A,62H
ANL A,#0FH
MOV B,A
MOV A,62H
SWAP A
ANL A,#07H
JNZ MIE ;判斷累加器為零嗎?
MOV A,#0AH ;累加器為零則就加入滅0功能
MIE: MOVC A,@A+DPTR
MOV P1,A
CLR LED1
LCALL DL2M
SETB LED1
MOV A,B
MOVC A,@A+DPTR
MOV C,07H
MOV acc.7,C ;秒燈閃爍
MOV P1,A
CLR LED2
LCALL DL2M
SETB LED2
mov dptr,#tab2 ;倒裝LED字段表
MOV A,61H
ANL A,#0FH
MOV B,A
MOV A,61H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV C,07H
MOV acc.6,C ;秒燈閃爍
MOV P1,A
CLR LED3CLK
LCALL DL2M
SETB LED3CLK
mov dptr,#tab1
MOV A,B
MOVC A,@A+DPTR
MOV C,06H
cpl c
MOV acc.7,C ;鬧鈴指示燈
MOV P1,A
CLR LED4IO
LCALL DL2M
SETB LED4IO
D_OUT: SETB TR1
POP PSW
POP ACC
RETI
;*********************
DIS2: AJMP DIS_2
DIS3: AJMP DIS_3
DIS4: AJMP DIS_4
DIS5: AJMP DIS_5
;********************
DIS_2: mov dptr,#tab1 ;顯示設置小時
MOV 6FH,62H
ACALL BCD_HEX
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P1,A
CLR LED1
LCALL DL2M
SETB LED1
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
CLR LED2
LCALL DL2M
SETB LED2
SETB TR1
POP PSW
POP ACC
RETI
;*****************
DIS_3: MOV DPTR,#TAB2 ;顯示設置分
MOV 6FH,61H
ACALL BCD_HEX
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P1,A
CLR LED3CLK
LCALL DL2M
SETB LED3CLK
MOV A,B
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P1,A
CLR LED4IO
LCALL DL2M
SETB LED4IO
SETB TR1
POP PSW
POP ACC
RETI
;*****************
DIS_4: mov dptr,#tab1 ;顯示設置鬧時
JNB 07H,D4_OUT ;顯示時閃爍
MOV A,6BH
MOV B,#0AH
DIV AB
MOVC A,@A+DPTR
MOV P1,A
CLR LED1
LCALL DL2M
SETB LED1
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
CLR LED2
LCALL DL2M
SETB LED2
D4_OUT: SETB TR1
POP PSW
POP ACC
RETI
;***********************
DIS_5: MOV DPTR,#TAB2
JNB 07H,D5_OUT ;顯示時閃爍
MOV A,6AH ;顯示設置鬧分
MOV B,#0AH
DIV AB
MOVC A,@A+DPTR
MOV P1,A
CLR LED3CLK
LCALL DL2M
SETB LED3CLK
MOV DPTR,#TAB1
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
CLR LED4IO
LCALL DL2M
SETB LED4IO
D5_OUT: SETB TR1
POP PSW
POP ACC
RETI
;*****************************
DL2M: MOV 43H,#14H ;how long display every LED(2ms)
DL2: MOV 44H,#14H
DL1: NOP
NOP
DJNZ 44H,DL1
DJNZ 43H,DL2
RET
;************************定時讀取1302時間及判斷鬧鈴時間是否到*******
P_INT: PUSH ACC
PUSH PSW
INC R2
CJNE R2,#250D,P_OUT
MOV R2,#00H
INC R3
CJNE R3,#10D,P_OUT
MOV R3,#00H
CPL 07H
MOV P1,#0FFH
ACALL R_1302
OUT: JNB 06H,P_OUT
MOV A,6BH
MOV B,#10
DIV AB
SWAP A
ADD A,B
CJNE A,62H,PP_OUT
MOV A,6AH
MOV B,#10
DIV AB
SWAP A
ADD A,B
CJNE A,61H,PP_OUT
SETB 08H ;定時到標志
MOV C,07H
cpl c
MOV K_ON,C
P_OUT: POP PSW
POP ACC
RETI
PP_OUT: SETB K_ON
CLR 08H
POP PSW
POP ACC
RETI
;************************有接收到遙控器信號*******
S_INT:CLR EA
PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
PUSH 02H
PUSH 03H
MOV R6,#10D ;10個880微秒-->9毫秒
SB: ACALL YS1
JB P3.2,EXIT
DJNZ R6, SB
JNB P3.2, $ ;等待9毫秒低電平引導脈沖完
ACALL YS2 ;延時4.74毫秒判斷是否有后續脈沖
JB P3.2,EXIT
MOV R1,#1AH ;將32位代碼分別放在1AH/1BH/1CH/1DH中
MOV R2,#4D
PP: MOV R3,#8D
JJJJ: JNB P3.2,$
ACALL YS1
MOV C,P3.2
JNC UUU
JB P3.2,$
UUU: MOV A,@R1
RRC A
MOV @R1,A
DJNZ R3,JJJJ
INC R1
DJNZ R2,PP
;-------------------------------------
MOV A,1AH ;進行代碼識別
XRL A,#40h ;判斷1AH的值是否等于遙控器低8位地址(40h)
JNZ EXIT ;如果不同則無效退出
MOV A,1bH
XRL A,#0bfh ;再判斷高8位地址是否正確(0bfh)
JNZ EXIT
MOV A,1CH
CPL A
XRL A,1DH ;將1CH的值取反后和1DH比較 不同則無效丟棄(核對數據是否準確)
JNZ EXIT
ACALL DO ;相應按鍵的處理
EXIT: SETB EA
POP 03H
POP 02H
POP DPL
POP DPH
POP PSW
POP ACC
RETI
;--------------------delay-----------------------
YS1: MOV 70H,#16D ;延時880微秒
D1: MOV 71H,#21D
DJNZ 71H,$
DJNZ 70H,D1
RET
YS2: MOV 70H,#09D ;延時4740微秒
D2: MOV 71H,#220D
DJNZ 71H,$
DJNZ 70H,D2
RET
;---------------------------------------------------------
TAB: DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H ;TAB1 LED數碼管顯示表 TAB遙控器鍵值表(未用)
;TAB1: DB 3FH,11H,5EH,5BH,71H,6BH,6FH,19H,7FH,7bH,77H,7CH,39H,5EH,79H,71H
tab1: DB 0C0H,0F9H,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0FFH
TAB2: DB 0c0H,0f9H,64H,70H,59H,52H,42H ;倒裝LED段碼表
;0CH 為設置標志,0DH為全顯示標志,0EH為顯示設置小時標志,0FH為顯示設置分標志
;10H 為顯示設置鬧時標志,11H為顯示設置鬧分標志
;增加鬧時靜音功能
;mute-10h,timer-0eh,left-46h,right-47h,up-19h,down-1dh
DO: MOV A,1CH
CJNE A,#TIMERT,REDO ;代碼不是設置/退出鍵
JNB 0CH,SET1 ;是,則進入
CLR 0CH ;是,已經進入,則退出
SETB 0DH ;恢復正常顯示
CLR 0EH
CLR 0FH
CLR 10H
CLR 11H
RET
SET1: SETB 0CH
SETB 0EH
CLR 0DH
CLR 0FH
CLR 10H
CLR 11H
RET
REDO: CJNE A,#MUTEM,REDO1 ;不是設置鍵的處理REDO1,2,3,4...
LJMP MUTE ;MUTE?
REDO1: CJNE A,#D_OFF,DO_SET2
LJMP DIS_OFF ;關閉顯示
DO_SET2:JB 0CH,SET2 ;時間設置的處理
RET
SET2: CJNE A,#UPU,SET2A
LJMP INC1 ;+加(^)
SET2A: CJNE A,#DOWND,SET2B
LJMP DEC2 ;- 減
SET2B: CJNE A,#RIGHTR,SET2C
LJMP RIGHT ;RIGHT右移(>)
SET2C: CJNE A,#LEFTL,SET2D
LJMP LEFT ;LEFT左移(<)
SET2D: CJNE A,#RECALL,SET2EXT ;DS1302初始化
LJMP SET1302
SET2EXT:RET
;--------------------------------INC------------------------
INC1: JB 0EH,INCH
JB 0FH,INCM
JB 10H,INC_H
JB 11H,INC_M
RET
INC_H: INC 6BH ;鬧鐘小時增加
MOV A,6BH
CJNE A,#24D,INCH3
MOV 6BH,#0
INCH3: MOV R1,#0C2H
MOV R0,6BH
ACALL SETONE ;并寫入DS1302
RET
INC_M: INC 6AH ;鬧鐘分增加
MOV A,6AH
CJNE A,#60D,INCH4
MOV 6AH,#0
INCH4: MOV R1,#0C0H
MOV R0,6AH
ACALL SETONE ;并寫入DS1302
RET
INCH: ;INC 62H ;小時增加
MOV 6FH,62H
ACALL BCD_HEX
INC A
CJNE A,#24D,INCH1
MOV A,#0
INCH1: MOV 6FH,A
ACALL HEX_BCD
MOV 62H,A
MOV R1,#84H
MOV R0,62H
ACALL SETONE ;并寫入DS1302
RET
INCM: ;INC 61H ;分增加
MOV 6FH,61H
ACALL BCD_HEX
INC A
CJNE A,#60D,INCH2
MOV A,#0
INCH2: MOV 6FH,A
ACALL HEX_BCD
MOV 61H,A
MOV R1,#82H
MOV R0,61H
ACALL SETONE ;并寫入DS1302
RET
;----------------------------------DEC----------------------
DEC2: JB 0EH,DECH
JB 0FH,DECM
JB 10H,DEC_H
JB 11H,DEC_M
RET
DECH: MOV 6FH,62H
ACALL BCD_HEX
DEC A
CJNE A,#0FFH,DECH1
MOV A,#23
DECH1: MOV 6FH,A
ACALL HEX_BCD
MOV 62H,A
MOV R1,#84H
MOV R0,62H
ACALL SETONE
RET
DECM: MOV 6FH,61H
ACALL BCD_HEX
DEC A
CJNE A,#0FFH,DECM1
MOV A,#59
DECM1: MOV 6FH,A
ACALL HEX_BCD
MOV 61H,A
MOV R1,#82H
MOV R0,61H
ACALL SETONE
RET
DEC_H: DEC 6BH
MOV A,6BH
CJNE A,#0FFH,DECH3
MOV 6BH,#23D
DECH3: MOV R1,#0C2H
MOV R0,6BH
ACALL SETONE
RET
DEC_M: DEC 6AH
MOV A,6AH
CJNE A,#0FFH,DECH4
MOV 6AH,#59D
DECH4: MOV R1,#0C0H
MOV R0,6AH
ACALL SETONE
RET
;--------------------------------RIGHT----------------------
RIGHT: JB 0EH,RIGHT1
JB 0FH,RIGHT2
JB 10H,RIGHT3
JB 11H,RIGHT4
RET ;右移
RIGHT1: CLR 0EH
SETB 0FH
RET
RIGHT2: CLR 0FH
SETB 10H
RET
RIGHT3: CLR 10H
SETB 11H
RET
RIGHT4: CLR 11H
SETB 0EH
RET
;--------------------------------LEFT-----------------------
LEFT: JB 0EH,LEFT1
JB 0FH,LEFT2
JB 10H,LEFT3
JB 11H,LEFT4
RET ;左移
LEFT1: SETB 11H
CLR 0EH
RET
LEFT2: SETB 0EH
CLR 0FH
RET
LEFT3: SETB 0FH
CLR 10H
RET
LEFT4: SETB 10H
CLR 11H
RET
;------------------------------MUTE--------------
MUTE: setb k_ON
CPL 06H ;靜音
CLR 08H
RET
;-----------------------------DISPLAY OFF--------
DIS_OFF:CLR ET1
CPL 05H
JNB 05H,REDORE
SETB ET1
REDORE: RET
;------------------------------------初始化1302-------------------------
SET1302: CLR RST ;2002年1月1日12:00:00
CLR LED3CLK
MOV SECOND,#0
MOV 61H,#0
MOV 62H,#18 ;18(D)=12(BCD)
MOV 63H,#1
MOV 64H,#1
MOV 65H,#1
MOV 66H,#2
SETB RST
MOV A,#8EH
LCALL R_BIT
MOV A,#00H
LCALL R_BIT
SETB LED3CLK
CLR RST
MOV R0,#SECOND
MOV R7,#7
MOV R1,#80H
SET1302A:CLR RST
CLR LED3CLK
SETB RST
MOV A,R1
LCALL R_BIT
MOV A,@R0
LCALL R_BIT
INC R0
INC R1
INC R1
SETB LED3CLK
CLR RST
DJNZ R7,SET1302A
CLR RST
CLR LED3CLK
sETB LED3CLK
nop
CLR RST
nop
clr led3clk
SETB RST
MOV A,#90H
LCALL R_BIT
MOV A,#10100101B ;充電器設置
LCALL R_BIT
SETB LED3CLK
CLR RST
CLR LED3CLK
SETB RST
MOV A,#8EH
LCALL R_BIT
MOV A,#80H
LCALL R_BIT
SETB LED3CLK
CLR RST
RET
;----------------------讀取一RAM R1為地址------
T_6061: CLR RST
CLR LED3CLK
SETB RST
MOV A,R1
LCALL R_BIT
LCALL W_BIT
SETB LED3CLK
CLR RST
RET
;-----------------------------
R_1302: MOV R0,#SECOND
MOV R7,#7
MOV R1,#81H
R_1302A: CLR RST
CLR LED3CLK
SETB RST
MOV A,R1
LCALL R_BIT
LCALL W_BIT
MOV @R0,A
INC R0
INC R1
INC R1
SETB LED3CLK
CLR RST
DJNZ R7,R_1302A
RET
;------------------R_BIT------------------
R_BIT: MOV R4,#8
R_BIT1: RRC A
MOV LED4IO,C
SETB LED3CLK
CLR LED3CLK
DJNZ R4,R_BIT1
RET
;-------------------W_BIT-----------------------
W_BIT: MOV R4,#8
W_BIT1: MOV C,LED4IO
RRC A
SETB LED3CLK
CLR LED3CLK
DJNZ R4,W_BIT1
RET
;------------------------進制轉換--------------------------
BCD_HEX:
MOV A,6FH
ANL A,#0FH
MOV B,A
MOV A,6FH
MOV 6FH,B
SWAP A
ANL A,#0FH
MOV B,#0AH
MUL AB
ADD A,6FH
;MOV 6FH,A
RET
HEX_BCD:
MOV A,6FH
MOV B,#10
DIV AB
SWAP A
ADD A,B
;MOV 6FH,A
RET
;-----寫一地址---R1 為地址,R0 為數據----------
SETONE: CLR LED3CLK
CLR RST
CLR LED3CLK
NOP
SETB RST
MOV A,#8EH
LCALL R_BIT
MOV A,#00H
LCALL R_BIT
SETB LED3CLK
CLR RST
CLR LED3CLK
NOP
CLR RST
CLR LED3CLK
SETB RST
MOV A,R1
LCALL R_BIT
MOV A,R0
LCALL R_BIT
NOP
SETB LED3CLK
CLR RST
NOP
NOP
CLR RST
CLR LED3CLK
SETB RST
MOV A,#8EH
LCALL R_BIT
MOV A,#80H
LCALL R_BIT
SETB LED3CLK
CLR RST
RET
END
作者:
xiaos
時間:
2015-4-3 01:22
//打開DS1302充電二級管 一個二級管串聯一個2K電阻
#include <REGX51.H>
//#include "ds1302.h"
#define leddata P2
#define sec 0x80
#define min 0x82
#define hou 0x84
#define read 0x01
sbit MODE=P1^6;
sbit SET=P1^5;
sbit UP=P1^4;
sbit DOWN=P1^3;
sbit led0=P0^7;
sbit led1=P0^6;
sbit led2=P0^5;
sbit led3=P0^3;
sbit led4=P0^2;
sbit led5=P0^1;
sbit T_CLK=P1^2;
sbit T_IO =P1^1;
sbit T_RST=P1^0;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
//******************************************************
sbit den_cuo=P3^3; //這是一個小夜燈的控制引腳
sbit den_kai_guan=P3^2;
//********DS1302讀寫程序***************
/********************************************************************
函 數 名:RTInputByte()
功 能:實時時鐘寫入一字節
說 明:往DS1302寫入1Byte數據 (內部函數)
入口參數:d 寫入的數據
返 回 值:無
***********************************************************************/
void RTInputByte(unsigned char d)
{
unsigned char i;
ACC = d;
for(i=8; i>0; i--)
{
T_IO = ACC0; //相當于匯編中的 RRC
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
/********************************************************************
函 數 名:RTOutputByte()
功 能:實時時鐘讀取一字節
說 明:從DS1302讀取1Byte數據 (內部函數)
入口參數:無
返 回 值:ACC
設 計:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
unsigned char RTOutputByte(void)
{
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; //相當于匯編中的 RRC
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
/********************************************************************
函 數 名:Write1302()
功 能:往DS1302寫入數據
說 明:先寫地址,后寫命令/數據 (內部函數)
調 用:RTInputByte() , RTOutputByte()
入口參數:ucAddr: DS1302地址, ucData: 要寫的數據
返 回 值:無
***********************************************************************/
void Write1302(unsigned char ucAddr, unsigned char ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); // 地址,命令
RTInputByte(ucDa); // 寫1Byte數據
T_CLK = 1;
T_RST = 0;
}
/********************************************************************
函 數 名:Read1302()
功 能:讀取DS1302某地址的數據
說 明:先寫地址,后讀命令/數據 (內部函數)
調 用:RTInputByte() , RTOutputByte()
入口參數:ucAddr: DS1302地址
返 回 值:ucData :讀取的數據
***********************************************************************/
unsigned char Read1302(unsigned char ucAddr)
{
unsigned char ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); // 地址,命令
ucData = RTOutputByte(); // 讀1Byte數據
T_CLK = 1;
T_RST = 0;
return(ucData);
}
/********************************************************************
函 數 名:Set1302()
功 能:設置初始時間
說 明:先寫地址,后讀命令/數據(寄存器多字節方式)
調 用:Write1302()
入口參數:pClock: 設置時鐘數據地址 格式為: 秒 分 時 日 月 星期 年
7Byte (BCD碼)1B 1B 1B 1B 1B 1B 1B
返 回 值:無
***********************************************************************/
void Set1302(unsigned char *pClock)
{
unsigned char i;
unsigned char ucAddr = 0x80;
Write1302(0x8e,0x00); // 控制命令,WP=0,寫操作
for(i =7; i>0; i--)
{
Write1302(ucAddr,*pClock); // 秒 分 時 日 月 星期 年
pClock++;
ucAddr +=2;
}
Write1302(0x8e,0x80); // 控制命令,WP=1,寫保護
}
void delays(unsigned char);
void display(void);
void Scan_Key(void);
void id_case1_key();
void Set_id(unsigned char ,unsigned char);
unsigned char hour,minute,second,id=0,timecount,re_disp=0;
bit flag;
unsigned char code tab[]={ 0x9F,/*0*/
0x12,/*1*/
0x2F,/*2*/
0x3B,/*3*/
0xB2,/*4*/
0xB9,/*5*/
0xBD,/*6*/
0x13,/*7*/
0xBF,/*8*/
0xBB,/*9*/
};
unsigned char inittime[7]={0x00,0x00,0x12,0x16,0x11,0x06,0x04};
// 秒 分鐘 小時 日 月 年 星期
void t0(void) interrupt 1 using 0
{
TH0=(65535-50000)/256; //50ms定時
TL0=(65535-50000)%256;
timecount++;re_disp++;
if(timecount>9)
{
timecount=0;
flag=~flag;
}
if(re_disp>200){re_disp=0;if(id)id=0;}
}
void delays(unsigned char k)
{
unsigned char i,j;
for(i=0;i<k;i++)
for(j=0;j<50;j++);
}
void display(void)
{
if(flag&hour)
{
led0=0;leddata=0x00;delays(10);led0=1; //這句中的0xff是數碼管的滅碼
led1=0;leddata=0x00&~((unsigned char)~flag<<6);delays(10);led1=1; //這句中的0xff是數碼管的滅碼
}
else
{
leddata=tab[Read1302(hou+1)/16];led0=0;delays(10);led0=1;
leddata=tab[Read1302(hou+1)%16]&~((unsigned char)~flag<<6);led1=0;delays(10);led1=1;
}
if(flag&minute)
{
led2=0;leddata=0x00&~((unsigned char)~flag<<6);delays(10);led2=1;
led3=0;leddata=0x00&~((unsigned char)~flag<<6);delays(10);led3=1;
}
else
{
leddata=tab[Read1302(min+1)/16]&~((unsigned char)~flag<<6);led2=0;delays(10);led2=1;
leddata=tab[Read1302(min+1)%16]&~((unsigned char)~flag<<6);led3=0;delays(10);led3=1;
}
if(flag&second)
{
led4=0;leddata=0x00&~((unsigned char)~flag<<6);delays(10);led4=1;
led5=0;leddata=0x00;delays(10);led5=1;
}
else
{
leddata=tab[Read1302(sec+1)/16]&~((unsigned char)~flag<<6);led4=0;delays(10);led4=1;
leddata=tab[Read1302(sec+1)%16];led5=0;delays(10);led5=1;
}
}
void Scan_Key(void)
{
display();
if(!SET)
{
while(!SET)display();
re_disp=0;
id++;if(id>3)id=0;
}
if(id==0){hour=0;minute=0;second=0;}
if(id==1){hour=1;id_case1_key();}
if(id==2){hour=0;minute=1;id_case1_key();}
if(id==3){minute=0;second=1;id_case1_key();}
}
void id_case1_key(void)
{
display();
if (!DOWN) //減少
{
while(!DOWN)display();
re_disp=0;
Set_id(id,0);
}
if (!UP) //增加
{
while(!UP)display();
re_disp=0;
Set_id(id,1);
}
}
//根據選擇調整相應項目并寫入DS1302
void Set_id(unsigned char sel,unsigned char sel_1)
{
signed char max,mini,address,item;
if(sel==1) {address=hou; max=23;mini=0;} //小時
if(sel==2) {address=min; max=59;mini=0;} //分鐘
if(sel==3) {address=sec; max=0;mini=0;} //秒
item=Read1302(address+1)/16*10+Read1302(address+1)%16;
if (sel_1==0) item--; else item++;
if(item>max) item=mini;
if(item<mini) item=max;
Write1302(0x8e,0x00);//允許寫操作
Write1302(address,item/10*16+item%10);
Write1302(0x8e,0x80);//寫保護,禁止寫操作
}
void main()
{
den_cuo=0;
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
Write1302(0x90,0xa5);//打開充電二級管 一個二級管串聯一個2K電阻
Write1302(0x8e,0x80);//寫保護,禁止寫操作
if(!UP&!DOWN)Set1302(inittime);
while(1)
{
Scan_Key();
if(Read1302(hou+1)==0x18) //小夜燈每天晚上18點時自動點亮
{
den_cuo=1;
}
if(Read1302(hou+1)==0x07) //小夜燈每天早上7點時自動熄滅
{
den_cuo=0;
}
if(den_kai_guan==0)
{
delays(50);
if(den_kai_guan==0)
{
while(!den_kai_guan);
den_cuo=!den_cuo;
}
}
}
}
復制代碼
作者:
uva2015
時間:
2015-4-6 13:06
謝謝分享
作者:
ky3830446
時間:
2015-7-20 04:59
不錯哦。真心
作者:
1qaz2wsx77
時間:
2015-10-12 21:11
真心的學習了
作者:
xiaoyuxinke
時間:
2015-10-13 06:05
純屬跑過,不過你做的確實很好,努力
作者:
sav98
時間:
2016-11-20 21:51
真心的學習了,謝謝分享
作者:
與風同行
時間:
2019-4-4 18:27
真的很好啊
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
中文字幕一区二区三区不卡
|
欧美中文在线
|
欧美vide
|
日日操夜夜操天天操
|
免费视频久久
|
中文字幕在线一区
|
一区二区三区四区在线视频
|
a在线观看免费
|
久久精品99国产精品
|
九色视频网站
|
精品一区二区久久久久久久网站
|
亚洲精品中文字幕在线观看
|
欧美专区在线
|
a黄视频
|
99精品久久久久
|
在线免费观看亚洲
|
五月婷婷婷
|
日韩欧美视频免费在线观看
|
av 一区二区三区
|
免费亚洲网站
|
精品九九九
|
超碰91在线
|
神马九九
|
性在线
|
亚洲激情一级片
|
91视在线国内在线播放酒店
|
亚洲欧美国产一区二区三区
|
亚洲成人一区二区
|
久久成人在线视频
|
国产免费观看一区
|
国产精品18hdxxxⅹ在线
|
国产日产欧产精品精品推荐蛮挑
|
91久色
|
久久久久久网站
|
日本在线看片
|
美女黄色在线观看
|
亚洲欧美日韩久久久
|
日本电影免费完整观看
|
久久久久网站
|
久久久中文
|
拍真实国产伦偷精品
|