LIST P=PIC16F628 #include P16F628.INC __CONFIG 3F58h STATUS EQU 03h PC EQU 02h PortA equ 05h PortB equ 06h temp1 EQU 23h led1 EQU 25h led2 EQU 26h led3 EQU 27h led4 EQU 28h temp2 EQU 29h temp3 EQU 21h temp4 EQU 22h Reg_1 EQU 20h Reg_2 EQU 1fh org 0 bsf STATUS,RP0 clrf TRISB movlw B'00000000' movwf TRISB clrf TRISA movlw B'00000000' movwf TRISA bcf STATUS,RP0 bcf STATUS,RP1 clrf PORTA clrf PORTB S1 movlw .3 call segments movwf led1 movlw .8 movwf temp1 bsf PORTA,0 ;защелкиваем регистр bcf PORTA,0 bsf PORTB,3 ;включаем общий катод разряда 1 call delay bcf PORTB,3 m1 bcf PORTA,1 ; Сбрасываем линию CLK bsf PORTA,7 ; Устанавливаем линию DATA btfss led1,0 ; Если загружаемый бит равен 0,то след команда.если 1 то пропускаем bcf PORTA,7 ; сбрасываем линию DATA bsf PORTA,1 ; Подаем тактовый сигнал для записи следующего бита rrf led1,f ; Готовим на вывод след бит decfsz temp1 goto m1 goto S2 S2 movlw .4 ;сюда будем записывать цифру,которую нужно вывести на индикацию call segments movwf led2 movlw .8 movwf temp2 bsf PORTA,0 ;включаем общий катод разряда 2 bcf PORTA,0 bsf PORTB,4 call delay bcf PORTB,4 m2 bcf PORTA,1 ; Сбрасываем линию CLK bsf PORTA,7 ; Устанавливаем линию DATA btfss led2,0 ; Если загружаемый бит равен 0, bcf PORTA,7 ; сбрасываем линию DATA bsf PORTA,1 ; Подаем тактовый сигнал rrf led2,f ; Готовим на вывод след бит decfsz temp2 goto m2 goto S3 S3 movlw .5 ;сюда будем записывать цифру,которую нужно вывести на индикацию call segments movwf led3 movlw .8 movwf temp3 bsf PORTA,0 ;включаем общий катод разряда 3 bcf PORTA,0 bsf PORTB,5 call delay bcf PORTB,5 m3 bcf PORTA,1 ; Сбрасываем линию CLK bsf PORTA,7 ; Устанавливаем линию DATA btfss led3,0 ; Если загружаемый бит равен 0, bcf PORTA,7 ; сбрасываем линию DATA bsf PORTA,1 ; Подаем тактовый сигнал rrf led3,f ; Готовим на вывод след бит decfsz temp3 goto m3 goto S4 S4 movlw .6 ;сюда будем записывать цифру,которую нужно вывести на индикацию call segments movwf led4 movlw .8 movwf temp4 bsf PORTA,0 ;включаем общий катод разряда 4 bcf PORTA,0 bsf PORTA,6 call delay bcf PORTA,6 m4 bcf PORTA,1 ; Сбрасываем линию CLK bsf PORTA,7 ; Устанавливаем линию DATA btfss led4,0 ; Если загружаемый бит равен 0, bcf PORTA,7 ; сбрасываем линию DATA bsf PORTA,1 ; Подаем тактовый сигнал rrf led4,f ; Готовим на вывод след бит decfsz temp4 goto m4 goto S1 delay movlw .100 movwf Reg_1 d1 nop nop nop nop nop nop nop decfsz Reg_1 goto d1 return segments addwf PCL,f retlw B'00000000' retlw B'11010111' ; Цифра 0 retlw B'00010100' ; Цифра 1 retlw B'11001101' ; Цифра 2 retlw B'10011101' ; Цифра 3 retlw B'00011110' ; Цифра 4 retlw B'10011011' ; Цифра 5 retlw B'11011011' ; Цифра 6 retlw B'00010101' ; Цифра 7 retlw B'11011111' ; Цифра 8 retlw B'10011111' ; Цифра 9 end