Я сделал код, который можно прокручивать вверх или вниз, но не могу найти, как прокрутить это вправо влево или слева направо
Я пытался что-то изменить с помощью modify, например vram [i] >> 1 до vram [i + 1] (на основе кода прокрутки вверх-вниз). но не знаю, как улучшить Practich11.h - это заголовочный файл для установки PIC16F877A и содержимого для него:
устройство АЦП = 10
использовать задержку (кристалл = 4194304)
здесьмой код:
#include <16F877A.h>
#include <practice11.h>
#byte porta=5
#byte trisa=0x85
#zero_ram
unsigned int16 din;
unsigned int8 data1;
unsigned int8 data2;
unsigned int8 i;
unsigned int8 j,k,n;
unsigned int8 s[8],t;
const char korea_font[6][8]={{0, 0, 0, 0, 0, 0, 0, 0},
{0x7f, 0x08, 0x14, 0x22, 0x41, 0, 0, 0},
{0x3e, 0x41, 0x41, 0x41, 0x3e, 0, 0, 0},
{0x7f, 0x09, 0x19, 0x29, 0x46, 0, 0, 0},
{0x7f, 0x49, 0x49, 0x49, 0x49, 0, 0, 0},
{0x7f, 0x11, 0x11, 0x11, 0x7e, 0, 0, 0}
};
unsigned int8 vram[8];
void trans(){
din=data1;
din=din<<8;
din = din | data2;
bit_clear(porta,1);
for(j=0;j<16;j++){
if(bit_test(din,15)==1) bit_set(porta,0);
else bit_clear(porta,0);
delay_us(5);
bit_set(porta,2);
delay_us(5);
bit_clear(porta,2);
delay_us(5);
din=din<<1;
}
bit_set(porta,1);
}
void op(){
unsigned int8 m;
for(m=0;m<8;m++){
data1=(m+1);
data2=vram[m];
trans();
}
}
#INT_TIMER0
void timer0_isr(void){
t++;
if(t==6) t=0;
if(t==0){
op();
}
}
void main(){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4|RTCC_8_BIT);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
trisa=0;
bit_set(porta,1);
delay_ms(5);
data1=0xc;
data2=1;
trans();
data1=0xf;
data2=0;
trans();
data1=9;
data2=0;
trans();
data1=0xb;
data2=7;
trans();
data1=0xa;
data2=3;
trans();
delay_ms(1);
for(i=0;i<8;i++) s[i] = korea_font[0][i];
while(TRUE){
for(i=0;i<8;i++){
vram[i] = vram[i]>>1;
if(bit_test(s[i],7)==1) bit_set(vram[i],0);
else bit_clear(vram[i],0);
s[i] = s[i]>>1;
}
n++;
if(n==8){
n = 0;
k++;
if(k==6) k=0;
for(i=0;i<8;i++) s[i] = korea_font[k][i];
}
delay_ms(100);
}
}