📄 256[1].c
字号:
#include <iom8v.h>
#include <macros.h>
#define BYTE unsigned char
#define DATA 0x20
#define SCLK 0x40
#define MAXSIZE 192
#define REFRESH 0x55
//#pragma interrupt_handler UART_RX_interrupt:12
unsigned int SendDataCount,Fcount;
BYTE Dhead;
BYTE buf_data[384];
BYTE buf_data1[384];
//BYTE buf_data2[MAXSIZE];
BYTE datarev=0,display,getaddr,datalen,*dp,buf_offset,checkmark=0;
BYTE m_DataSP,changebuf=0;
BYTE Gbuffer,Sendsign,*DataSP,ope;
void UART_interrupt(void);
void jump(BYTE ,BYTE ,BYTE );
void port_init(void)
{
PORTB = 0xff;
DDRB = 0xFF;
PORTC = 0x7F; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0xFF;
}
//TIMER0 initialisation - prescale:8
// WGM: Normal
// desired value: 54687.5Hz
// actual value: 54687.500Hz (0.0%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0xef; //set count
//TCCR0 = 0x02; //start timer
}
//SPI initialisation
// clock rate: 2000000hz
void spi_init(void)
{
SPCR = 0x51; //setup SPI
SPSR = 0x00; //setup SPI
}
void spidisplay(BYTE *disp)
{int i,dlen;
BYTE j[5];
dlen=MAXSIZE*4/3;
SPDR=0x00;
while(!(SPSR&0x80));
j[0]=j[1];
j[1]=j[2];
j[2]=j[0];
j[0]=j[1];
j[1]=j[2];
j[0]=j[1];
j[1]=j[2];
j[2]=j[0];
j[0]=j[1];
j[1]=j[2];
SPDR=0X00;
while(!(SPSR&0x80));
for(i=0;i<dlen;i++)
{
j[0]=*disp++;
j[1]=*disp++;
j[2]=*disp++;
//=*(disp+3);
j[3]=0x80|(j[0]&0xf0)>>1|((j[0]&0x0f)>>2);
//UDR=j[3];
SPDR=j[3];
while(!(SPSR&0x80));
j[3]=((j[0]&0x0f)<<6)|((j[1]&0xf0)>>3);
SPDR=j[3];
while(!(SPSR&0x80));
j[3]=0x80|((j[1]&0x0f)<<3)|((j[2]&0xf0)>>6);
SPDR=j[3];
while(!(SPSR&0x80));
j[3]=((j[2]&0xF0)<<2)|((j[2]&0x0f)<<1);
SPDR=j[3];
while(!(SPSR&0x80));
//disp=disp+3;
}
for(i=0;i<128;i++)
{
j[0]=j[1];
j[1]=j[2];
j[2]=j[0];
j[0]=j[1];
j[1]=j[2];
SPDR=0x00;
while(!(SPSR&0x80));
}
}
//get addr
BYTE getaddrin(viod)
{ BYTE i;
DDRC = 0x3F;
PORTC = 0xFF;
DDRC = 0x00;
i=PINC;
if(i==0x1f)return(i);
i=i&0x0f;
i=(i<<4)+(15-i);
//i=i|0xf0;
return(i);
}
void Gdisplay(BYTE *disp)
{BYTE mask,i;
int j,cou;
cou=MAXSIZE*4/3;
for(j=0;j<32;j++)
{ PORTD &= ~DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
}
for(j=0;j<cou;j++)
{
mask=0x80;
PORTD |= DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
for(i=0;i<4;i++)
{
if(((*disp)&mask)==0)
PORTD &= ~DATA;
else
PORTD |=DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
mask=mask>>1;
}
PORTD &= ~DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
for(i=0;i<4;i++)
{
if(((*disp)&mask)==0)
PORTD &= ~DATA;
else
PORTD |=DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
mask=mask>>1;
}
PORTD &= ~DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
disp++;
mask=0x80;
for(i=0;i<4;i++)
{
if(((*disp)&mask)==0)
PORTD &= ~DATA;
else
PORTD |=DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
mask=mask>>1;
}
PORTD &= ~DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
_NOP();
PORTD |= DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
for(i=0;i<4;i++)
{
if(((*disp)&mask)==0)
PORTD &= ~DATA;
else
PORTD |=DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
mask=mask>>1;
}
PORTD &= ~DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
mask=0x80;
disp++;
for(i=0;i<4;i++)
{
if(((*disp)&mask)==0)
PORTD &= ~DATA;
else
PORTD |=DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
mask=mask>>1;
}
PORTD &= ~DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
for(i=0;i<4;i++)
{
if(((*disp)&mask)==0)
PORTD &= ~DATA;
else
PORTD |=DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
mask=mask>>1;}
PORTD &= ~DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
disp++;
}
for(j=0;j<384;j++)
{ PORTD |= DATA;
PORTD &= ~SCLK;
PORTD |= SCLK;
}
//*disp
//*disp
}
//call this routine to initialise all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI();//disable all interrupts
port_init();
timer0_init();
spi_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x01; //timer interrupt sources
SEI();//re-enable interrupts
//all peripherals are now initialised
}
void delay(void)
{unsigned long i;
for(i=0;i<500;i++);
}
void delayl()
{unsigned long i;
for(i=0;i<120000;i++);
}
void Dstart()
{SendDataCount=256; //scan BYTE count
DataSP=buf_data; //BYTEs ints point
Dhead=2; //0xffff
display=1; //start display
//TCCR0 = 0x02;
}
//
void main(void)
{int i,j;
BYTE *buf,*buf1,cb;
init_devices();
UDR = 0x55;
SendDataCount=256;
DataSP=buf_data;
Dhead=2;
TCCR0 = 0x02;
while(1)
{
begin:
for(j=0;j<246;j++)
{if(changebuf)
buf=buf_data1;
else
buf=buf_data;//
for(i=0;i<128;i++)
{*buf++=j;
*buf++=0;
*buf++=0;
}
while(checkmark<10);
checkmark=0;
changebuf=~changebuf;
}
changebuf=~changebuf;
for(j=0;j<247;j++)
{if(changebuf)
buf=buf_data1;
else
buf=buf_data;//
for(i=0;i<128;i++)
{*buf++=246;
*buf++=j;
*buf++=0;
}
while(checkmark<10);
checkmark=0;
changebuf=~changebuf;
} //timer0 dev8 start
for(j=0;j<247;j++)
{if(changebuf)
buf=buf_data1;
else
buf=buf_data;//
for(i=0;i<128;i++)
{*buf++=246-j;
*buf++=246;
*buf++=0;
}
while(checkmark<10);
checkmark=0;
changebuf=~changebuf;
}
for(j=0;j<247;j++)
{if(changebuf)
buf=buf_data1;
else
buf=buf_data;//
for(i=0;i<128;i++)
{*buf++=0;
*buf++=246;
*buf++=j;
}
while(checkmark<10);
checkmark=0;
changebuf=~changebuf;
}
for(j=0;j<247;j++)
{if(changebuf)
buf=buf_data1;
else
buf=buf_data;//
for(i=0;i<128;i++)
{*buf++=0;
*buf++=246-j;
*buf++=246;
}
while(checkmark<10);
checkmark=0;
changebuf=~changebuf;
}
for(j=0;j<247;j++)
{if(changebuf)
buf=buf_data1;
else
buf=buf_data;//
for(i=0;i<128;i++)
{*buf++=0;
*buf++=0;
*buf++=246-j;
}
while(checkmark<10);
checkmark=0;
changebuf=~changebuf;
}
goto begin;
}
}
//uart has received a character in UDR
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
TCNT0 = 0xee; //reload counter value
SPDR=Gbuffer;
//Sendsign=1;
//if(SPSR&0x80)UDR = 0x55;
if(Dhead)
{Gbuffer=0x00;
ope=0;
Dhead--;
return;}
if(SendDataCount--)
{
switch(ope++)
{ case 0:if(display<(*DataSP&0x07))
m_DataSP=(*DataSP)+8;
else
m_DataSP=*DataSP;
Gbuffer=0x80|(m_DataSP&0xf8)>>1;
DataSP++;
if(display<(*DataSP&0x07))
m_DataSP=(*DataSP)+8;
else
m_DataSP=*DataSP;
Gbuffer=Gbuffer|((m_DataSP&0xc0)>>6);
break;
case 1:Gbuffer=(m_DataSP&0x38)<<2;
DataSP++;
if(display<(*DataSP&0x07))
m_DataSP=(*DataSP)+8;
else
m_DataSP=*DataSP;
Gbuffer=Gbuffer|((m_DataSP&0xf8)>>3);
DataSP++;
ope=0;
break;
default:break;
}
}
else
{
if(display<2)
display=7;
else
display=display-2;
// else
// display=display-1;
SendDataCount=256;
Dhead=1;
Gbuffer=0x00;
if(changebuf)
DataSP=buf_data1;
else
DataSP=buf_data;
checkmark++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -