//выводит на индикатор 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);
}
}
}
НАЗАД ДАЛЕЕ