大家好 ,最近用74LS164驱动4位数码管,但是就是显示不正常,显示全部8888了 .
用PIC16F877A ,AD采样,然后查表到数码管显示。 74LS164的数据输入接PIC16F877A的RC7,CP接16F877A的RD0,MR接VCC.
程序如下:
;-------------------------------------------------------------
;************************************************************-
;-------------------------------------------------------------
list p=16f877A ; list directive to define processor
#include <p16f877A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;-------------------------------------------------------------
;************************************************************-
;-------------------------------------------------------------
;--------------74LS164显示定义-------------------------------
#DEFINE CLK164 PORTC,3 ;定义164时钟位 .CLK
#DEFINE ENABLE164_1 PORTB,1 ;定义164显示使能位,在刷新是关掉数码管以防闪烁
#DEFINE ENABLE164_2 PORTB,2 ;定义164显示使能位,在刷新是关掉数码管以防闪烁
#DEFINE ENABLE164_3 PORTB,3 ;定义164显示使能位,在刷新是关掉数码管以防闪烁
#DEFINE ENABLE164_4 PORTB,4 ;定义164显示使能位,在刷新是关掉数码管以防闪烁
;***************************************************************************
TIME_5MS EQU 20H ;延时5MS标志位
W_temp EQU 21H ;W暂存
STATUS_temp EQU 22H ;STATUS暂存
DIP4 EQU 23H ;显示高H缓冲
DIP3 EQU 24H ;显示高L缓冲
DIP2 EQU 25H ;显示低H缓冲
DIP1 EQU 26H ;显示低L缓冲
COUNT0 EQU 27H ;采样04次数
COUNT3 EQU 28H
PD1 EQU 29H ;查表高H显示
PD2 EQU 2AH ;查表高L显示
PD3 EQU 2BH ;查表低H显示
PD4 EQU 2CH ;查表低L显示
ACCALO EQU 2DH ;存放乘数低8位
ACCAHI EQU 2EH ;存放乘数高8位
ACCBLO EQU 2FH ;存放被乘数低8位和乘积第16~23位
ACCBHI EQU 30H ;存放被乘数高8位和乘积第24~31位
ACCCLO EQU 31H ;存放乘积低8位
ACCCHI EQU 32H ;存放乘积高8位
ACCDLO EQU 33H ;临时寄存器
ACCDHI EQU 34H ;临时寄存器
TEMP EQU 35H ;临时寄存器
TEMP0 EQU 36H ;AD采样暂存
TEMP1 EQU 37H ;AD采样高位暂存
TEMP7 EQU 38H ;;AD采样高位暂存
SIGN EQU 39H ;存放乘积的符号
R_LAB EQU 3AH ;查表中转暂存
COUNT1 EQU 3BH
COUNT2 EQU 3CH
COUNT5 EQU 3DH
;-------------------------------------------------------------
;************************************************************-
;-------------------------------------------------------------
ORG 00H
NOP
GOTO MAIN
ORG 0004H
GOTO INTSER
;-------------------------------------------------------------
;****************中断程序************************************-
;-------------------------------------------------------------
INTSER: CALL PP
BCF INTCON,2 ;清溢出位
MOVLW 0EBH ;TMR0重新赋初值
MOVWF TMR0
BSF TIME_5MS,0 ;5MS标志为1
GOTO OO
PP: MOVWF W_temp
SWAPF STATUS,W
BCF STATUS,RP0
MOVWF STATUS_temp
Return
OO: SWAPF STATUS,W
MOVWF STATUS
SWAPF W_temp,F
SWAPF W_temp,w
RETFIE
;-------------------------------------------------------------
;***************** 主程序********************************* -
;-------------------------------------------------------------
MAIN: CALL START ;初始化子程序
JJ: CALL ADC ;AD采样子程序
CALL DISP1 ;AD采样*4*1000/1000子程序
CALL TIAOZHENG ;查表子程序
CALL DISPLAY1 ;数码管显示子程序
GOTO JJ ;循环显示
;-------------------------------------------------------------
;****************** 显示时间查表 *************************-
;-------------------------------------------------------------
TABLE: MOVF R_LAB,0
ADDWF PCL,1 ; 将W寄存器内的7段显示码地址放入PC
RETLW 3FH ;0
RETLW 06H ;1
RETLW 5BH ;2
RETLW 4FH ;3
RETLW 66H ;4
RETLW 6DH ;5
RETLW 7DH ;6
RETLW 07H ;7
RETLW 7FH ;8
RETLW 6FH ;9
;-------------------------------------------------------------
;******************初始化程序***************************** -
;-------------------------------------------------------------
START: BCF STATUS,RP0 ;SEL BANK0
BCF STATUS,RP1
CLRF DIP4 ;DIP4 0
CLRF DIP3 ;DIP3 0
CLRF DIP2 ;DIP2 0
CLRF DIP1 ;DIP1 0
CLRF PD1 ;PD1 0
CLRF PD2 ;PD2 0
CLRF PD3 ;PD3 0
CLRF PD4 ;PD4 0
CLRF TEMP ;TEMP 0
CLRF TEMP0 ;TEMP0 0
CLRF TEMP1 ;TEMP1 0
CLRF TEMP7 ;TEMP7 0
CLRF COUNT0 ;COUNT0 0
CLRF COUNT3 ;COUNT3 0
CLRF ACCALO ;ACCALO 0
CLRF ACCAHI ;ACCAHO 0
CLRF ACCBLO ;ACCBLO 0
CLRF ACCBHI ;ACCBHO 0
CLRF ACCCLO ;ACCCLO 0
CLRF ACCCHI ;ACCCHO 0
CLRF ACCDLO ;ACCDLO 0
CLRF ACCDLO ;ACCDLO 0
CLRF PORTA ;PORTA 0
CLRF R_LAB ;查表中转暂存
CLRF COUNT5
BSF STATUS,RP0 ;SEL BANK1
MOVLW 0EH
MOVWF ADCON1 ;RA1-RA5为普通I/0口
MOVLW 3FH
MOVWF TRISA ;RA1/RA5为输入
BCF STATUS,RP0 ;SEL BANK0
CLRF PORTB ;PORTB 0
BSF STATUS,RP0
MOVLW 00H
MOVWF TRISB ;TRISB 为输出口
BCF OPTION_REG,7
BCF STATUS,RP0 ;SEL BANK0
CLRF PORTC ; PORTC 0
BSF STATUS,RP0 ;BANK1
MOVLW 00H
MOVWF TRISC ;PORTC OUTPUT
BCF STATUS,RP0 ;BANK0
CLRF PORTD ;PORTD 0
BSF STATUS,RP1 ;BANK1
MOVLW 00H
MOVWF TRISD ;PORTD OUTPUT
BCF STATUS,RP0 ;BANK0
CLRF PORTE ;PORTE 0
BSF STATUS,RP1 ;BANK 1
MOVLW 00H
MOVWF PORTE ;PORTE OUTPUT
BSF STATUS,RP0
BCF STATUS,RP1 ;SEL BANK1
MOVLW 07H ;定时归TMR0 ,分频比为256
MOVWF OPTION_REG
BCF STATUS,RP0 ;SEL BANK0
MOVLW 0A0H ;开TMR0中断 5MS
MOVWF INTCON
MOVLW 0EBH ;TMR0赋初值5MS
MOVWF TMR0;
RETURN |