HD7279串行接口8位LED数码管及64键及程序Word文件下载.docx
《HD7279串行接口8位LED数码管及64键及程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《HD7279串行接口8位LED数码管及64键及程序Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
使所有的显示自右向左(从第1位向第8位)移动一位(包括处于消隐状态的显示位),但对各位所设置的消隐及闪烁属性不变。
移动后,最右边一位为空(无显示)。
例如,原显示为
4
2
5
L
P
3
9
其中第2位‘3’和第4位‘L’为闪烁显示,执行了左移指令后,显示变为
第二位‘9’和第四位‘P’为闪烁显示。
4、右移指令
与左移指令类似,但所做移动为自左向右(从第8位向第1位)移动,移动后,最左边一位为空。
5、循环左移指令
与左移指令类似,不同之处在于移动后原最左边一位(第8位)的内容显示于最右位(第1位)。
在上例中,执行完循环左移指令后的显示为
6、循环右移指令
与循环左移指令类似,但移动方向相反。
带有数据的指令
1、下载数据且按方式0译码
a2
a1
a0
DP
X
d3
d2
d1
d0
X=无影响
命令由二个字节组成,前半部分为指令,其中a2,a1,a0为位地址,具体分配如下:
显示位
6
7
8
d0—d3为数据,收到此指令时,HD7279(A)按以下规则(译码方式0)进行译码,如下表:
十六进制
7段显示
00H
01H
02H
03H
04H
05H
06H
07H
08H
09H
0AH
-
0BH
E
0CH
H
0DH
0EH
0FH
空(无显示)
小数点的显示由DP位控制,DP=1时,小数点显示,DP=0时,小数点不显示。
2、下载数据且按方式1译码(仅对HD7279A有效)
此指令与上一条指令基本相同,所不同的是译码方式,且只有HD7279A才具有此指令。
该指令的译码按下表进行:
A
b
C
d
F
3、下载数据但不译码
B
D
G
其中,a2,a1,a0为位地址(参见‘下载数据且译码’指令),A-G和DP为显示数据,分别对应7段LED数码管的各段。
4、闪烁控制
d8
d7
d6
d5
d4
此命令控制各个数码管的闪烁属性。
d1-d8分别对应数码管1-8,0=闪烁,1=不闪烁。
开机后,缺省的状态为各位均不闪烁。
5、消隐控制
此命令控制各个数码管的消隐属性。
d1-d8分别对应数码管1-8,1=显示,0=消隐。
当某一位被赋予了消隐属性后,HD7279在扫描时将跳过该位,因此在这种情况下无论对该位写入何值,均不会被显示,但写入的值将被保留,在将该位重新设为显示状态后,最后一次写入的数据将被显示出来。
当无需用到全部8个数码管显示的时候,将不用的位设为消隐属性,可以提高显示的亮度。
注意:
至少应有一位保持显示状态,如果消隐控制指令中d1-d8全部为0,该指令将不被接受,HD7279保持原来的消隐状态不变。
6、段点亮指令
此为段寻址指令,作用为点亮数码管中某一指定的段,或LED矩阵中某一指定的LED。
指令中,X=无影响;
d0-d5为段地址,范围从00H—3FH,具体分配为:
第1个数码管的G段地址为00H,F段为01H,……A段为06H,小数点DP为07H,第2个数码管的G段为08H,F段为09H,……,依此类推直至第8个数码管的小数点DP地址为3FH。
7、段关闭指令
段寻址命令,作用为关闭(熄灭)数码管中的某一段,指令结构与‘段点亮指令’相同,请参阅上文。
8、读键盘数据指令
该指令从HD7279读出当前的按键代码。
与其它指令不同,此命令的前一个字节00010101B为微控制器传送到HD7279的指令,而后一个字节d0-d7则为HD7279返回的按键代码,其范围是0-3FH(无键按下时为0xFF),各键键盘代码的定义,请参阅图2。
此指令的前半段,HD7279的DATA引脚处于高阻输入状态,以接受来自微处理器的指令;
在指令的后半段,DATA引脚从输入状态转为输出状态,输出键盘代码的值。
故微处理器连接到DATA引脚的I/O口应有一从输出态到输入态的转换过程,详情请参阅本文‘串行接口’一节的内容。
当HD7279检测到有效的按键时,KEY引脚从高电平变为低电平,并一直保持到按键结束。
在此期间,如果HD7279接收到‘读键盘数据指令’,则输出当前按键的键盘代码;
如果在收到‘读键盘指令’时没有有效按键,HD7279将输出FFH(11111111B)。
HD7279采用串行方式与微处理器通讯,串行数据从DATA引脚送入芯片,并由CLK端同步。
当片选信号变为低电平后,DATA引脚上的数据在CLK引脚的上升沿被写入HD7279的缓冲寄存器。
HD7279的指令结构有三种类型:
1、不带数据的纯指令,指令的宽度为8个BIT,即微处理器需发送8个CLK脉冲。
2、带有数据的指令,宽度为16个BIT,即微处理器需发送16个CLK脉冲。
3、读取键盘数据指令,宽度为16个BIT,前8个为微处理器发送到HD7279的指令,后8个BIT为HD7279返回的键盘代码。
执行此指令时,HD7279的DATA端在第9个CLK脉冲的上升沿变为输出状态,并与第16个脉冲的下降沿恢复为输入状态,等待接收下一个指令。
串行接口的时序如下图:
1、纯指令
2、带数据指令
8位指令(高位在前)8位数据(高位在前)
3、读键盘指令
读键盘指令(8位,高位在前)HD7279输出的键盘代码(8位,高位在前)
2、EM78P156接口程序
硬件连接如图,EM78P156所用时钟频率4MHz,选4个时钟周期为一个指令周期,
;
转移指令用2个指令周期。
程序使用ASM456编译程序编译通过。
程序中延时时间
以HD7279A外接R=1.5K,C=15pF为准,如使用不同的CPU时钟频率或R/C参数,
请注意调整延时时间。
图5.14EM78P156与HD7279A的硬件连接
**********************************
寄存器定义
STATUS==0X03
P5==5
C==0
BIT_COUNT==0X10
DATA_OUT==0X11
DATA_IN==0X12
TEN==0X13
TIMER==0X14
TIMER1==0X15
I/O口定义
CS==0;
CS连接于EM78P156的P50
CLK==1;
CLK连接于EM78P156的P51
DAT==2;
DAT连接于EM78P156的P52
KEY==3;
KEY连接于EM78P156的P53
ORG0x00
JMPSTART
ORG0X10
*******************************************
延时子程序
LONG_DELAY:
MOVA,@16;
设定延时时间为约50uS
MOVTIMER,A
DELAY_LOOP:
DJZTIMER
JMPDELAY_LOOP
RET
SHORT_DELAY:
MOVA,@3;
设定延时时间为约9uS
SHORT_LP:
JMPSHORT_LP
发送1个字节到HD7279,高位在前
SEND:
MOVDATA_OUT,A;
待发送数据存入DATA_OUT
MOVA,@8
MOVBIT_COUNT,A;
设定位记数器=8
BCP5,CS;
设CS为低电平
CALLLONG_DELAY;
长延时
SEND_LOOP:
BCSTATUS,C
RLCDATA_OUT;
输出1位
BCP5,DAT
JBCSTATUS,C
BSP5,DAT
BSP5,CLK;
设CLK为高电平
CALLSHORT_DELAY;
短延时
BCP5,CLK;
设CLK为低电平
CALLSHORT_DELAY
DJZBIT_COUNT;
检查是否8位均发送完毕
JMPSEND_LOOP;
未发送完,发送下一位
RET;
发送完毕,返回
从HD7279接收一个字节,高位在前
RECEIVE:
MOVA,@8
MOVA,@0B11111100;
设P5.2(DATA)口为输入状态
IOWP5
RECEIVE_LOOP:
BSP5,CLK;
置CLK为高电平
BSSTATUS,C
JBSP5,DAT
BCSTATUS,C
RLCDATA_IN;
读取一位数据
置CLK为低电平
是否已接收8位数据
JMPRECEIVE_LOOP
MOVA,@0B11111000;
重新设P52(DATA)口为输出态
*******************************************
初始化
START:
I/O口初始化
MOVA,@0B11111001
MOVP5,A
MOVA,@0X19;
延时约25MS
START_DELAY:
MOVA,@0XFF
MOVTIMER1,A
START_DELAY1:
DJZTIMER1
JMPSTART_DELAY1
DJZTIMER
JMPSTART_DELAY
MOVA,@0B10100100;
发复位(清除)指令
CALLSEND
BSP5,CS;
恢复CS为高电平
主程序
MAIN:
JBCP5,KEY;
检测是否有键按下
JMPMAIN
MOVA,@0B00010101;
有键按下,发送读键盘指令
CALLSEND;
发送读键盘指令
CALLRECEIVE;
从HD7279A读键盘代码
设CS为高电平
16进制——BCD码转换
CLRTEN
GET_DECMOVA,@10
SUBA,DATA_IN
JBSSTATUS,C
JMPOVER
MOVDATA_IN,A
INCTEN
JMPGET_DEC
发送按键的BCD码到HD7279A
发2次左移指令,使当前显示内容左移,留出空
位供显示新数据
OVERMOVA,@0B10100001;
左移指令
发送指令到HD7279A
MOVA,@0B10100001;
MOVA,@0B10000001;
下载数据且译码指令(第2位)
MOVA,TEN
发送十位数字到HD7279A
MOVA,@0B10000000;
下载数据且译码指令(第1位)
MOVA,DATA_IN
发送个位数字到HD7279A
BSP5,CS
WAITJBSP5,KEY;
等待按键放开
JMPWAIT
EOP