第四章 EM78系列单片机程序设计 ( 3
end )
HT1380串行实时时钟芯片具有接口简单、功耗低、工作电压范围宽、计时精确、功能全(可对分、秒、时、日、日期、月及带闰年补偿的年进行计数)、成本低等优点,因此在实际应用中被广泛采用,下面先简单介绍一下该芯片的情况,然后实际工作中采用的子程序供读者参考。
HT1380是一种串行实行时时钟芯片,它提供秒、分、时、日、日期、月和年的信息。对于小于31天的月的月末日期能自动进行调整,还包括闰年校正功能。低功耗设计且时钟的运行可以采用24小时格式或带AM/PM指示的12小时的格式。HT1380含有若干寄存器用以存储相应信息。采用外部32.768KHZ晶振以提供正确定时。最少引脚数的串行I/0通信方式。与微处理器通信仅需三根线:1.YRST(复位)2.YSCLK(串行时钟)3.YIO(数据线).数据传送采用两种模式,即单字节模式和多字节模式(至多为8个字节,每一数据传送由命令字节初始化,命令字节如下所示,最高位MSB(位7)必须置1;最低位LSB(位0)置1/0,表示为写/读周期;位3--1指定所需访问的寄存器。
1.引脚排列
2.引脚说明
X1,X2: 32.768KHZ晶体振荡器引脚
VSS: 地
YRST:
串行通信复位引脚
YIO:
串行通信数据输入/输出引脚
YSCLK:
串行通信的串行时钟脉冲引脚
VDD:
电源
3.命令字节
每一数据传送由命令字节初始化。命令字节如下所示,最高位MSB(位7)必须置1;最低位LSB(位0)置I/O,表示为写/读周期;位3~1指定所需访问的寄存器。
下表显示寄存器地址和它的数据格式:
|
Pegister
Address
A2~A0
|
Function
|
Command
Address
(HEX)
|
Write=w
Read=R
|
Range
Data
(BCD)
|
Register Definition
|
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
|
0
|
Seconds
|
80
81
|
W
R
|
00~59
|
CH
|
10SEC
|
SEC
|
|
1
|
Minutes
|
82
83
|
W
R
|
00~59
|
0
|
10MIN
|
MIN
|
|
2
|
12HRS
24HRS
|
84
85
|
W
R
|
01~12
00~23
|
12
24
|
0
0
|
AP
10
|
HR
HR
|
HOUR
|
|
3
|
Date
|
86
87
|
W
R
|
01~31
|
0
|
0
|
10DATE
|
DATE
|
|
4
|
Month
|
88
89
|
W
R
|
01~12
|
0
|
0
|
0
|
10M
|
MONTH
|
|
5
|
Day
|
8A
8B
|
W
R
|
01~07
|
0
|
0
|
0
|
0
|
DAY
|
|
6
|
Year
|
8C
8D
|
W
R
|
00~09
|
10YEAR
|
YEAR
|
|
7
|
Write
Protect
|
8E
8F
|
W
R
|
00~80
|
WP
|
ALWAYS ZERO
|
注:*CH: 时钟暂停标志
*寄存器2的位7: 12/24模式标志
CH=0 允许振荡器工作
位7=1: 12小时模式
CH=1时钟振荡器停止
位7=1:24小时模式
*WP: 写保护位
*寄存器2的位5: AM/PM模式设置
WP=0 允许写人数据
AP=1 PM模式
WP=1 禁止写人数据
AP=0 AM模式
4. 图5.11为单字节及多字节模式传送时隙
4. 应用框图
6.实际例程清单:
HT1380
EQU 0X06
COUNT0
EQU 0X10
TXBUF
EQU 0X11
RXBUF
EQU 0X12
DATABUF
EQU 0X13
ADDRPOINT
EQU 0X14
HT_SDA_IN
EQU 0B01001000
HD_SDA_OUT EQU 0B00001000
HT_SCL
EQU 0
HT_RST
EQU 1
Ht_SDA
EQU 2
;
TX_1380: MOV
A,@HT_SDA_OUT
IOW
HT1380
BC
HT1380,HT_SCL
MOV A,@8
MOV COUNT0,A
TX_1380_LP:
BC
HT1380,HT_SDA
JBC
TXBUF,0
BS
HT1380,HT_SDA
BS
HT1380,HT_SCL
RRC
TXBUF
BC
HT1380,HT_SCL
DJZ
COUNT0
JMP
TX_1380_LP
RET
;读HT1380子程序
READ_HT:
MOV TXBUF,A
BC
HT1380,HT_SCL
BS
HT1380,HT_RST
MOV A,@HT_SDA_OUT
IOW
HT1380
MOV A,@8
MOV COUNT0,A
TX_1_LP:
BC
HT1380,HT_SDA
JBC
TXBUF,0
BS
HT1380,HT_SDA
BS
HT1380,HT_SCL
RRC
TXBUF
BC
HT1380,HT_SCL
DJZ
COUNT0
JMP
TX_1_LP
MOV A,@HT_SDA_IN
IOW
HT1380
MOV A,@8
MOV COUNT0,A
RX_1380_LP:
RRC
RXBUF
BC
RXBUF,7
JBC
HT1380,HT_SDA
BS
RXBUF,7
BS
HT1380,HT_SCL
BC
HT1380,HT_SCL
DJZ
COUNT0
JMP
RX_1380_LP
BC
HT1380,HT_RST
RET
;写HT1380子程序
WRITE_HT:
MOV
ADDRPOINT,A
BC
HT1380,HT_SCL
BS
HT1380,HT_RST
MOV
A,@0B1000110
MOV TXBUF,A
CALL TX_1380
CLR
TXBUF
CALL TX_1380
BC
HT1380,HT_RST
NOP
BS
HT1380,HT_RST
MOV
A,ADDRPOINT
MOV TXBUF,A
CALL TX_1380
MOV A,DATABUF
MOV TXBUF,A
CALL TX_1380
BC
HT1380,HT_RST
NOP
BS
HT1380,HT_RST
MOV
A,@0B10001110
MOV TXBUF,A
CALL TX_1380
MOV
A,@0B10000000
MOV TXBUF,A
CALL TX_1380
BC
HT1380,HT_RST
MOV
A,HT_SDA_IN
IOW
HT1380
RET
END
 HD7279(A)是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵。
HD7279内部含有译码器,可直接接受16进制码,HD7279A还同时具有2种译码方式,HD7279(A)还具有多种控制指令,如消隐、闪烁、左移、右移、段寻址等。
特点:
·串行接口
·各位独立控制译码/不译码及消隐和闪烁属性
·(循环)左移/(循环)右移指令
·具有段寻址指令,方便控制独立LED
·64键键盘控制器,内含去抖动电路
控制指令
HD7279的控制指令分为二大类——纯指令和带有数据的指令。
·纯指令
1、复位(清除)指令
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
|
1
|
0
|
1
|
0
|
0
|
1
|
0
|
0
|
当HD7279收到该指令后,将所有的显示清除,所有设置的字符消隐、闪烁等属性也被一起清除。执行该指令后,芯片所处的状态与系统上电后所处的状态一样。
2、测试指令
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
|
1
|
0
|
1
|
1
|
1
|
1
|
1
|
1
|
该指令使所有的LED全部点亮,并处于闪烁状态,主要用于测试。
3、左移指令
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
|
1
|
0
|
1
|
0
|
0
|
0
|
0
|
1
|
使所有的显示自右向左(从第1位向第8位)移动一位(包括处于消隐状态的显示位),但对各位所设置的消隐及闪烁属性不变。移动后,最右边一位为空(无显示)。例如,原显示为
其中第2位‘3’和第4位‘L’为闪烁显示,执行了左移指令后,显示变为
第二位‘9’和第四位‘P’为闪烁显示。
4、右移指令
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
|
1
|
0
|
1
|
0
|
0
|
0
|
0
|
0
|
与左移指令类似,但所做移动为自左向右(从第8位向第1位)移动,移动后,最左边一位为空。
5、循环左移指令
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
|
1
|
0
|
1
|
0
|
0
|
0
|
1
|
1
|
与左移指令类似,不同之处在于移动后原最左边一位(第8位)的内容显示于最右位(第1位)。在上例中,执行完循环左移指令后的显示为
第二位‘9’和第四位‘P’为闪烁显示。
6、循环右移指令
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
|
1
|
0
|
1
|
0
|
0
|
0
|
1
|
0
|
与循环左移指令类似,但移动方向相反。
·带有数据的指令
1、下载数据且按方式0译码
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
|
1
|
0
|
0
|
0
|
0
|
a2
|
a1
|
a0
|
|
DP
|
X
|
X
|
X
|
d3
|
d2
|
d1
|
d0
|
X=无影响
命令由二个字节组成,前半部分为指令,其中a2
,a1,a0为位地址,具体分配如下:
|
a2
|
a1
|
a0
|
显示位
|
|
0
|
0
|
0
|
1
|
|
0
|
0
|
1
|
2
|
|
0
|
1
|
0
|
3
|
|
0
|
1
|
1
|
4
|
|
1
|
0
|
0
|
5
|
|
1
|
0
|
1
|
6
|
|
1
|
1
|
0
|
7
|
|
1
|
1
|
1
|
8
|
d0—d3为数据,收到此指令时,HD7279(A)按以下规则(译码方式0)进行译码,如下表:
|
十六进制
|
d3
|
d2
|
d1
|
d0
|
7段显示
|
|
00H
|
0
|
0
|
0
|
0
|
0
|
|
01H
|
0
|
0
|
0
|
1
|
1
|
|
02H
|
0
|
0
|
1
|
0
|
2
|
|
03H
|
0
|
0
|
1
|
1
|
3
|
|
04H
|
0
|
1
|
0
|
0
|
4
|
|
05H
|
0
|
1
|
0
|
1
|
5
|
|
06H
|
0
|
1
|
1
|
0
|
6
|
|
07H
|
0
|
1
|
1
|
1
|
7
|
|
08H
|
1
|
0
|
0
|
0
|
8
|
|
09H
|
1
|
0
|
0
|
1
|
9
|
|
0AH
|
1
|
0
|
1
|
0
|
-
|
|
0BH
|
1
|
0
|
1
|
1
|
E
|
|
0CH
|
1
|
1
|
0
|
0
|
H
|
|
0DH
|
1
|
1
|
0
|
1
|
L
|
|
0EH
|
1
|
1
|
1
|
0
|
P
|
|
0FH
|
1
|
1
|
1
|
1
|
空(无显示)
|
小数点的显示由DP位控制,DP=1时,小数点显示,DP=0时,小数点不显示。
2、下载数据且按方式1译码(仅对HD7279A有效)
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
|
1
|
1
|
0
|
0
|
1
|
a2
|
a1
|
a0
|
|
DP
|
X
|
X
|
X
|
d3
|
d2
|
d1
|
d0
|
X=无影响
此指令与上一条指令基本相同,所不同的是译码方式,且只有HD7279A才具有此指令。该指令的译码按下表进行:
|
十六进制
|
d3
|
d2
|
d1
|
d0
|
7段显示
|
|
00H
|
0
|
0
|
0
|
0
|
0
|
|
01H
| |