微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > C8051F330 16*16点阵(SPI 、SMBus、I2C)PCF8563

C8051F330 16*16点阵(SPI 、SMBus、I2C)PCF8563

时间:11-30 来源:互联网 点击:

void pio_int(void) // 端口配置
{
XBR0=0x06;
XBR1=0x40;

P0MDIN=0xff; //禁止模拟输入,0为模拟,1为数字
P0MDOUT=0x0d; //0为开漏,1为推挽(ff)
P0SKIP=0x08;

P1MDIN=0xff;
P1MDOUT=0xff; //低四位用于138
P1SKIP=0x00;

P0=0xff;
P1=0xff;

}

/*************呈现各种显示效果的函数集****************/
//void Jump_Word(uchar a) 立即跳显示一个字或一张图案
//void M_Word(uchar a)卷帘出显示一个字或一张图案
//void M_Words(number) 显示几个交换的字
//void UP_Run(number) 向上滚屏n个字
//void L_Removeout(number) 右入左出n个字
//void M_Black(void) 黑屏
//void R_Removeout(number) 左入右出n个字
/*****************************************************/

/****************立即跳显示一个字或一张图案***************/
void Jump_Word(uchar a)
{register uchar i,q;
for(i=0;i<32;i++)
{
for(q=0;q{dispram[i+q*32]=Bmp[a][i];}
//if(i%2)delay(SPEED);
}
}
/****************卷帘出显示一个字或一张图案***************/
void M_Word(uchar a)
{register uchar i,q;
for(i=0;i<32;i++)
{
for(q=0;q{dispram[i+q*32]=Bmp1[a][i];}
if(i%2)delay(SPEED);
}
}

/****************卷帘出显示number个字***************/
void M_Words(number)
{register uchar i,q,w;
for(w=0;w{
for(i=0;i<32;i++)
{
for(q=0;qif(i%2)delay(SPEED);
}
delay(TIME);
}
}

/****************向上滚屏number个字***************/
void UP_Run(number)
{register uchar i,j,k,q;
for(i=0;i{
for(j=0;j<16;j++)
{
for(k=0;k<15;k++)
{
for(q=0;q{
dispram[k*2+q*32]=dispram[(k+1)*2+q*32];
dispram[k*2+1+q*32]=dispram[(k+1)*2+1+q*32];
}
}
for(q=0;q{
dispram[30+q*32]=Bmp[q+i*BLKN/2][j*2];
dispram[31+q*32]=Bmp[q+i*BLKN/2][j*2+1];
}
delay(2*SPEED);
}
delay(2*TIME);
}
}

/****************左移出显示number个字*******************/
void L_Removeout(number)
{register uchar i,j,k,l,q;
for(i=0;i{
for(j=0;j<2;j++)
for(k=0;k<8;k++)
{
for(l=0;l<16;l++)
{
for(q=0;q{
dispram[l*2+q*32]=dispram[l*2+q*32]<1|dispram[l*2+1+q*32]>>7;
if(q==BLKN/2-1)
dispram[l*2+1+q*32]=dispram[l*2+1+q*32]<1|Bmp[i][l*2+j]>>(7-k);
else
dispram[l*2+1+q*32]=dispram[l*2+1+q*32]<1|dispram[l*2+(q+1)*32]>>7;
}
}
delay(2*SPEED);
}
}
}

/****************卷帘出黑屏***************/
void M_Black(void)
{register uchar i,q;
for(i=0;i<32;i++)
{
for(q=0;q{dispram[i+q*32]=0x00;}
if(i%2)delay(SPEED);
}
}
/****************右移出显示number个字*******************/
void R_Removeout(number)
{register uchar i,j,k,l,q;
for(i=0;i{
for(j=2;j>0;j--)
for(k=0;k<8;k++)
{
for(l=0;l<16;l++)
{
for(q=0;q{
dispram[l*2+1+q*32]=dispram[l*2+1+q*32]>>1|dispram[l*2+q*32]<7;
if(q==0)
dispram[l*2+q*32]=dispram[l*2+q*32]>>1|Bmp[i][l*2+j-1]<(7-k);
else
dispram[l*2+q*32]=dispram[l*2+q*32]>>1|dispram[l*2+1+(q-1)*32]<7;
}
}
delay(2*SPEED);
}
}
}

/*************用于时钟芯片操作的函数集****************/
//void write_pcf8563(void)写时钟芯片
//void read_pcf8563(void)读时钟芯片
/*****************************************************/
void write_pcf8563(void)
{
SPI0CN &=~0x01; //暂时关掉SPI通讯

send =0xa2; //送子器件地址
while(BUSY);
BUSY=1;
SMB_RW=0;control=5;
STA=1; //开始传送

while(BUSY);
SPI0CN |=0x01; //重新开启SPI
}

void read_pcf8563(void) //读当时的时,分,钞
{

SPI0CN &=~0x01;
send =0xa2; //送子器件地址
while(BUSY);
BUSY=1;
SMB_RW=0;
STA=1;

send=0x02;
while(!SI);
BUSY=1;

send=0xa2;
while(BUSY);
BUSY=1;
SMB_RW=1;
STA=1;

while(BUSY);
BUSY=1;
sec=receive1[2]&0x7f;//读秒
min=receive1[1]&0x7f;//读分
hou=receive1[0]&0x3f;//读时

SPI0CN |=0x01;
}

void spit_time(void)//分别计算时、分、秒的各位数字
{
sg=(int)hou/16;
sd=(int)hou%16;

fg=(int)min/16;
fd=(int)min%16;

mg=(int)sec/16;
md=(int)sec%16;
}

void dat_int(void) //数据初始化
{
scyx=1;
CLK=0;
}

void sysclk_int(void);
void delay(unsigned n);
void pio_int(void);
void SPI_INT(void);
void SMB_INT(void);
void dat_int(void);
void TIME01_INT(void);
void TIME2_INT(void);
void TIME3_INT(void);
void write_pcf8563(void);
void read_pcf8563(void);
void spit_time(void);

/**************主函数**************/
void main(void) //主程序
{
register uchar i;
PCA0MD &= ~0x40;// 关闭看门狗
sysclk_int();
OSCICN |= 0x02;

/****************初始化检测pcf8563****************/
while(!pcf8563_sda)
{
XBR1 = 0x40;
pcf8563_scl = 0;
for(i = 0; i < 255; i++);
pcf8563_scl = 1;
while(!pcf8563_scl);

for(i = 0; i < 10; i++);
XBR1 = 0x00;
}
/****************初始化检测pcf8563****************/

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top