1、 是一片具有串行接口的 可同时驱动 位共阴式数码管或 只独立 的智能显示驱动芯 片 该芯片同时还可连接多达 键的键盘矩阵 单 片即可完成 显示 键盘接口的全部功能 内部含有译码器 可直接接受 码或 进制码 并同时具有 种译码方式 参见后文 此外 还具有多种控制指令 如消隐 闪烁 左 移 右移 段寻址等 具有片选信号 可方便地实现多于 位 的显示或多于 键的键盘接口 !“# !$#%? ! “ # $ % 6ulmWXY ijkYlmnoqr“ 6T uV V 4252LP39 J Vno wx“DET V “ 252LP39 ” Vno DE K“DE i6V“; 6 6T “u V “DE
2、“ K“DE “6T“u Y J wxR“DETYV 252LP394 ” Vno DE K“DE 6 A(BCD% N9dY-. K DE“ EYuHI V BCf YDE TuHI V +* ; RAM ;* BIT_COUNT DATA 07FH TIMER DATA 07EH TIMER1 DATA 07DH TEN DATA 07CH DATA_IN DATA 020H DATA_OUT DATA 021H ;* “ ; I/O ;* Y # DAT BIT P1.2 ;HD7279ADATA P1.2 Y # KEY BIT P1.3 ;HD7279AKEY P1.3 Y # CS
3、 BIT P1.4 ;HD7279ACS P1.4 Y # CLK BIT P1.5 ;HD7279ACLK P1.5ORG 000HJMP STARTORG 100H START: MOV SP,#2FH ; “ MOV P1,#11011011B ;I/O 1i MOV TIMER,#50 ; 25MS ! START_DELAY: MOV TIMER1,#255 START_DELAY1:DJNZ TIMER1,START_DELAY1DJNZ TIMER,START_DELAY abcDE MOV DATA_OUT,#10100100B ; ()CALL SEND 3aV * + SE
4、TB CS ;CS .- MAIN: JB KEY,MAIN ; .- CN.ODE MOV DATA_OUT,#00010101B ;CALL SENDCALL RECEIVE jV * + SETB CS ;CS U # MOV B,#10 ;16 BCDMOV A,DATA_INDIV ABMOV TEN,A “DE d MOV DATA_OUT,#10100001B ;2 “ 9 Z ;, L ; CDEf CALL SEND ; HD7279AMOV DATA_OUT,#10100001BCALL SEND LDE MOV DATA_OUT,#10000001B ; (2)CALL
5、SEND CHf MOV DATA_OUT,TEN ; HD7279A CALL SEND LDE MOV DATA_OUT,#10000000B ; (1 ; )CALL SEND CHf MOV DATA_OUT,B ; HD7279ACALL SENDSETB CS p4-. WAIT: JNB KEY,WAIT ;JMP MAIN ;* C HIf * ; 1 HD7279 ;* j SEND: MOV BIT_COUNT,#8 ; =8 jV , + CLR CS ;CS r 1 CALL LONG_DELAY ; (9 SEND_LOOP: MOV C,DATA_OUT.7 ; 1
6、MOV DAT,C jV * + SETB CLK ;CLK 4CL“ MOV A,DATA_OUT ;RL AMOV DATA_OUT,A h 1 CALL SHORT_DELAY ; jV , + CLR CLK ;CLK h 1 CALL SHORT_DELAY ; _ CR DJNZ BIT_COUNT,SEND_LOOP ; 8 CR CLR DAT ;RET ;* ; #euHI * ; HD7279 ;* j RECEIVE: MOV BIT_COUNT,#8 ; =8 j “V*+ SETB DAT ;P1.2(DATA) ()WX ; () r 1 CALL LONG_DEL
7、AY ; kV * + RECEIVE_LOOP: SETB CLK ;CLK h 1 CALL SHORT_DELAY ; L“ MOV A,DATA_IN ;RL AMOV DATA_IN,A NuL MOV C,DAT ;MOV DATA_IN.0,C kV , + CLR CLK ;CLKCALL SHORT_DELAY #e L DJNZ BIT_COUNT,RECEIVE_LOOP; 8 j “V,+ (9WX CLR DAT ;DAT ( )RET ;* 1$5 ; ;* j 112Vi LONG_DELAY: MOV TIMER,#25 ; 50uS DELAY_LOOP: D
8、JNZ TIMER,DELAY_LOOPRET j 112Vi SHORT_DELAY: MOV TIMER,#4 ; 8uS SHORT_LP: DJNZ TIMER,SHORT_LP RETEND #“$5 |# i1 p $5 xyY .0 . $5 , j $5J 112 Y# . V “Y 1 p 112 / TITLE “HD7279A TEST“LIST P=16C54INCLUDE P16C5X.INC ;* 01 ; ;* BIT_COUNT SET 0X07 DATA_OUT SET 0X08 DATA_IN SET 0X09 TEN SET 0X0A TIMER SET
9、0X0B TIMER1 SET 0X0C ;* “ ; I/O ;* # Y CS EQU 0 ;CS 16C54RA0 # Y CLK EQU 1 ;CLK 16C65RA1 # Y DAT EQU 2 ;DAT 16C54RA2 # Y KEY EQU 3 ;KEY 16C54RA3ORG 0x1FFGOTO STARTORG 0X00 ;* 1$5 ; ;* j 112Vi LONG_DELAY MOVLW D16 ; 50uSMOVWF TIMER DELAY_LOOP DECFSZ TIMERGOTO DELAY_LOOPRETLW 0 j 112Vi SHORT_DELAY MOV
10、LW D3 ; 8uSMOVWF TIMER SHORT_LP DECFSZ TIMERGOTO SHORT_LPRETLW 0 ;* C HIf * ; 1 HD7279 ;* 4CL 1) SEND MOVWF DATA_OUT ; DATA_OUTMOVLW D8 j MOVWF BIT_COUNT ; =8 jV , + BCF PORTA,CS ;CS r 1 CALL LONG_DELAY ; SEND_LOOP BCF STATUS,C (9 RLF DATA_OUT ; 1BCF PORTA,DATBTFSC STATUS,CBSF PORTA,DAT jV * + BSF P
11、ORTA,CLK ; CLK h 1 CALL SHORT_DELAY ; jV , + BCF PORTA,CLK ; CLKCALL SHORT_DELAY _ CR DECFSZ BIT_COUNT ; 8 CR Cu GOTO SEND_LOOP ;BCF PORTA,DAT CR RETLW 0 ; ;* ; #euHI * ; HD7279 ;* RECEIVE MOVLW D8 j MOVWF BIT_COUNT ; =8 j “V()WX MOVLW B11111100 ;RA2(DATA)TRIS PORTA r 1 CALL LONG_DELAY ; kV * + RECE
12、IVE_LOOP BSF PORTA,CLK ; CLK h 1 CALL SHORT_DELAY ; BSF STATUS,CBTFSS PORTA,DATBCF STATUS,C NuL RLF DATA_IN ; kV , + BCF PORTA,CLK ; CLKCALL SHORT_DELAY #e L DECFSZ BIT_COUNT ; 8GOTO RECEIVE_LOOP j “V(9X MOVLW B11111000 ; RA2(DATA)TRIS PORTARETLW 0;* ; ;* “ START MOVLW B11111000 ;I/OTRIS PORTAMOVLW
13、B11111001MOVWF PORTA 1i MOVLW 0X19 ; 25MSMOVWF TIMER START_DELAY MOVLW 0XFFMOVWF TIMER1 START_DELAY1 DECFSZ TIMER1GOTO START_DELAY1DECFSZ TIMERGOTO START_DELAY abcDE MOVLW B10100100 ; ()CALL SEND 3aV * + BSF PORTA,CS ; CS ;* $5 ; ;* .- MAIN BTFSC PORTA,KEY ;GOTO MAIN .- CN.ODE MOVLW B00010101 ; CN.O
14、DE CALL SEND ; ;N . O CALL RECEIVE ;HD7279A jV * + BSF PORTA,CS ; CS ;* U # ; 16 BCD ;*CLRF TEN GET_DEC MOVLW D10SUBWF DATA_IN,WSKPCGOTO OVERMOVWF DATA_ININCF TENGOTO GET_DEC ;* C-.Y f ; BCD HD7279 ;* “DE d“ ;2 9 Z L ; “DE OVER MOVLW B10100001 ; CDEf CALL SEND ; HD7279A “DE MOVLW B10100001 ; CDEf CA
15、LL SEND ; HD7279A LDE MOVLW B10000001 ; (2) CDEf CALL SEND ; HD7279AMOVFW TEN CHf CALL SEND ; HD7279A LDE MOVLW B10000000 ; (1) CDEf CALL SEND ; HD7279AMOVFW DATA_IN CHf CALL SEND ; HD7279ABSF PORTA,CS p4-. WAIT BTFSS PORTA,KEY ;GOTO WAITGOTO MAINEND u Y $5 : MCS51 C Y $5 $Y HD7279A C51 , C #include
16、 /* * r 1 void long_delay(void); / h 1 void short_delay(void); / 1 void delay10ms(unsigned char); / 10MS )f void write7279(unsigned char, unsigned char);/ HD7279 ;N 9 unsigned char read7279(unsigned char);/ HD7279 CuHI void send_byte(unsigned char); / #euHI unsigned char receive_byte(void); / e “ /*
17、 I/O * unsigned char digit5; unsigned char key_number, j, k; unsigned int tmr; unsigned long wait_cnter; sbit cs=P14; / cs at P1.4 # sbit clk=P15; / clk P1.5 # sbit dat=P12; / dat P1.2 # sbit key=P13; / key P1.3 DE /* HD7279A * #define CMD_RESET 0xa4 #define CMD_TEST 0xbf #define DECODE0 0x80 #defin
18、e DECODE1 0xc8 #define CMD_READ 0x15 #define UNDECODE 0x90 #define RTL_CYCLE 0xa3 #define RTR_CYCLE 0xa2 #define RTL_UNCYL 0xa1 #define RTR_UNCYL 0xa0 #define ACTCTL 0x98 #define SEGON 0xe0 #define SEGOFF 0xc0 #define BLINKCTL 0x88 $5 /* * main() while (1) 1 for (tmr=0;tmr0x2000;tmr+); / a send_byte
19、(CMD_RESET); / HD7279A /* DE / /* DE send_byte(CMD_TEST); / 1i for (j=0;j3;j+) / 3delay10ms(100); bc send_byte(CMD_RESET); / /* noDE.O# “ / h -.Y.9 )-. / , 10 -. )u / S0 /*wait_cnter=0;key_number=0xff; jVno write7279(BLINKCTL,0xfc); / 12 = write7279(UNDECODE,0X08); / 1 _ = write7279(UNDECODE+1,0x08)
20、;/ 2 _do ).- if (!key) / key_number=read7279(CMD_READ); N9. / write7279(DECODE1+1,key_number/16); .* / 2 8write7279(DECODE1,key_number ., / 1 8 p4-. while (!key); / wait_cnter=0;wait_cnter+; while (key_number!=0 )-.V M1)u / 0 bcnojk write7279(BLINKCTL,0xff); / /* / /* V for (j=0;j9)digit0=0;digit1+;if (digit19)digit1=0;digit2+;if (digit29)digit2=0;digit3+;if (digit39)digit3=0;digit4+;if (digit49)digit4=0;write7279(DECODE0,digit0);if (digit0=0)write7279(DECODE0+1,digit1);