武汉工程大学毕业设计(论文)说明书
}
return ch; }
(2) 键盘显示专用芯片的编程实现
在硬件设计章节中已经对键盘显示芯片HD7279的功能做了一个介绍,在本章节中我们着重介绍它的常用指令和发送接收一个字节的子程序以及按指定格式向7279送显示数。
其常用指令分别介绍如下: a)复位指令(A4H) 格式:
D7 D6 D5 D4 D3 D2 D1 D0 1 0 1 0 0 1 0 0
功能:当HD7279收到该指令后,将所有的显示消除,所有设置的字符消隐、闪烁等属性也一起全部消除。执行该指令后,芯片所处的状态与系统上电后所处的状态一样。
b)测试指令(BFH) 格式:
D7 D6 D5 D4 D3 D2 D1 D0 1 0 1 1 1 1 1 1
功能:该指令执行后,将使所有的LED全部点亮,并且处于闪烁状态,该项功能主要用于测试。
c)左移指令(A1H) 格式:
D7 D6 D5 D4 D3 D2 D1 D0 1 0 1 0 0 0 1 1
功能:使所有的显示自左向右(从第1位向第8位)移动一位(包括处于消隐状态
32
武汉工程大学毕业设计(论文)说明书
的显示位),但是对各位所设置的消隐及闪烁属性不变。移动后最右边一位为空(无显示)。例如:移动前,第2位“3”和第4位“L”为闪烁显示。
4 2 5 2 L P 3 9
执行左移后,第2位“9”和第4位“P”为闪烁显示。
2 5 2 L P 3 9
d)右移指令(A0H) 格式:
D7 D6 D5 D4 D3 D2 D1 D0 1 0 1 0 0 0 0 0
功能:与左移指令类似,但是移动方向相反,自左向右(从第8位向第1位)移动,移动后最左边一位为空(无显示)。
e)循环左移指令(A3H) 格式:
D7 D6 D5 D4 D3 D2 D1 D0 1 0 1 0 0 0 1 1
功能:与左移指令类似,不同之处在于,原来最左边一位(第8位)的显示内容,在移动后,变换到了最右边一位(第1位)的位置上。比如在上面的例子中,执行完循环左移指令后的显示为:
2 5 2 L P 3 9 4
第2位“9”和第4位“P”为闪烁显示。 f)循环右移指令(A2H) 格式:
D7 D6 D5 D4 D3 D2 D1 D0 1 0 1 0 0 0 1 0
功能:与循环左移指令类似,不同之处在于,移动方向恰好相反。
33
武汉工程大学毕业设计(论文)说明书
g)闪烁控制指令(88H) 格式:
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 1 0 0 0 1 0 0 0 d8 d7 d6 d5 d4 d3 d2 d1
功能:该指令用来控制各位数码管的闪烁属性。前一个字节为指令码,后一个字节的d1~d8对应数码管的第1~8位,分别控制第1位到第8位是否闪烁。1=闪烁,0=不闪烁。开机后,默认状态为各位均不闪烁。 h)消隐控制指令(98H)
格式:
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 1 0 0 1 1 0 0 0 d8 d7 d5 d4 d3 d2 d1 d0
功能:该指令用来控制各位数码管的消隐属性。前一个字节为指令码,后一个字节的d1~d8对应数码管的第1~8位,分别控制第1位到第8位是否显示。1=显示,0=消隐。当某一位被赋予了消隐属性后,HD7279在动态显示扫描时,将跳过该位。因此在这种情况下,无论对该位写入何值,均不会显示。但写入的值将被保留,在将该位重新设为显示状态后,最后一次写入的数据将被显示出来。
i)段点亮指令(E0H) 格式:
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 1 1 1 0 0 0 0 0 X X d5 d4 d3 d2 d1 d0
功能:该指令为段寻址指令,用来控制点亮数码管中的某一指定段,或LED矩阵中某一指定的LED。前一个字节为指令码,后一个字节中的XX为无效位,d5~d0为段地址,范围从00H~3FH,具体分配为:数码管第1位的G段地址为00H,F段为
34
武汉工程大学毕业设计(论文)说明书
01H,??,A段为06H,DP为07H;数码管的第2位的G段地址为08H,F段为09H,??,A段为0EH,DP为0FH;依次类推,直至第8位小数点DP的段地址为3FH。
j)段熄灭指令(C0H) 格式:
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 1 1 0 0 0 0 0 0 X X d5 d4 d3 d2 d1 d0
功能:该指令也是段寻址指令,用来控制熄灭数码管中的某一指定段,或LED矩阵中某一指定的LED。指令结构与“段点亮指令”相同,不再赘述。
7279操作指令如下:
//********发送一个字节 *********//
void send_byte(uchar out_byte) {
uchar s; cs=0; long_delay(); for(s=0;s<8;s++) {
if(out_byte&0x80) { } else { } clk=1; short_delay();
35
dat=1;
dat=0;
武汉工程大学毕业设计(论文)说明书
} dat=0; }
//*********接收一个字节指令**********//
uchar receive_byte(void) { }
//******** 按给定格式向7279送显示数**********//
uchar i,in_byte; dat=1; long_delay(); for(i=0;i<8;i++) { } dat=0;
return(in_byte);
clk=1;
short_delay(); in_byte=in_byte<<1; if(dat) { } clk=0;
short_delay();
in_byte=in_byte|0x01;
clk=0; short_delay(); out_byte=out_byte<<1;
36