//выводит на индикатор 4 цифры
#include<p18cxxx.h>
#include<delays.h>
#pragma config OSC=RC
#pragma config WDT=OFF
#pragma config LVP=OFF
#pragma config BOR=OFF
#pragma config MCLRE=OFF

rom near char look7[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
char tmpNum[3];
char Num[5];
char tmp;

#pragma code
extern void itoBCD(int Value,char* BCD); //функция которая переводит int в BCD
                                         //находится c:\mcc18\src\extended\stdclib\itobcd.asm
void bin2bcd(int bin)
{
    itoBCD(bin,tmpNum);
    _asm                                 //после itoBCD число BCD находится в 3-х байтах
    movlw 0x0F                           //сдесь мы раскинем это число в 5-ть байтов
    andwf tmpNum,0,1
    movwf Num,1
    
    movff tmpNum+1,tmp
    swapf tmpNum+1,0,1
    andlw 0x0f
    movwf Num+1,1
    
    movlw 0x0f
    andwf tmp,0,1
    movwf Num+2,1
    
    movff tmpNum+2,tmp
    swapf tmpNum+2,0,1
    andlw 0x0f
    movwf Num+3,1
    
    movlw 0x0f
    andwf tmp,0,1
    movwf Num+4,1
    _endasm
}
void main(void)
{
    char a;
    char i;
    char selectPattern;
    ADCON1=0b01111111;
    TRISA=0;
    TRISB=0;
    bin2bcd(12345);                           //преобразуем любое число для теста  
    while(1)
    {
        selectPattern=0b1111100;
        for(a=0;a<4;a++)
        {
            PORTA=selectPattern;
            PORTB=look7[Num[a]];
           
            selectPattern<<=1;                //сдвиг 11111000,ИЛИ 11111010,сохранение в selectPattern
            selectPattern|=2;                 //сдвиг 11110100,ИЛИ 11110110,все время вставляем 1 в первый бит
                                              //сдвиг 11101100,ИЛИ 11101110
//а можно записать так:
            //selectPattern=(selectPattern<<1)|2;
            Delay1KTCYx(3);
         }
    }
}

primer-4-kh-razryadnogo-semisegmentnogo-indikatoraMPLAB



НАЗАД                                                                                                                                         ДАЛЕЕ