📄 spi.c
字号:
#include <pic1687x.h>
//*该程序用于在LED上依次显示0~9等10个字符*/
const int table[20]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char data,flag,setflag;
unsigned char i,a,b,c,d,e,f;
void delay500ms(void)
{
unsigned char i,m,n;
for(i=15;i>0;i--)
for(m=202;m>0;m--)
for(n=81;n>0;n--);
}
void settimedelay()
{
unsigned char h,l;
for(h=0;h<40;h++)
for(l=0;l<100;l++);
}
void clockint() //初始化时间----11:12:00
{
flag=0;
SSPBUF=table[1];
RD5=RD4=RD3=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD5=RD4=RD3=1;
SSPIF=0;
}
}
flag=0;
SSPBUF=table[2];
RD2=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD2=1;
SSPIF=0;
}
}
flag=0;
SSPBUF=table[0];
RD0=RD1=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD0=RD1=1;
SSPIF=0;
}
}
}
void initial()
{
ADCON1=0X07;
TRISD=0X00;
TRISC3=0; //SCK时钟输出引脚。
TRISC5=0; //串行数据输出引脚。
TRISD7=1;
TRISE0=1;
TRISE1=1;
TRISE2=1;
SSPCON=0x20; //主控方式,空闲时时钟为低电平,时钟为:Fosc/4
SSPSTAT=0xc0; //SCK上跳沿数据传送。
INTCON=0X00;
}
void secbit0full() //秒个位满9
{
b=b+1;
SSPBUF=table[b];
RD1=0;
while(flag==1)
{
if(SSPIF==1)
{ flag=0;
RD1=1;
SSPIF=0;
}
}
}
void secbit1full() //秒十位满5(即59)
{
if(b==6)
{
flag=1;
b=0 ;
SSPBUF=table[b];
RD1=0;
while(flag==1)
{
if(SSPIF==1)
{ flag=0;
RD1=1;
SSPIF=0;
}
}
c=c+1;
SSPBUF=table[c];
RD2=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD2=1;
SSPIF=0;
}
}
}
}
void minbit0full()
{
if(c==0x0a)
{ flag=1;
c=0;
SSPBUF=table[c];
RD2=0;
while(flag==1)
{
if(SSPIF==1)
{ flag=0;
RD2=1;
SSPIF=0;
}
}
d=d+1;
SSPBUF=table[d];
RD3=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD3=1;
SSPIF=0;
}
}
}
}
void minbit1full()
{
if(d==6)
{
flag=1;
d=0;
SSPBUF=table[d];
RD3=0;
while(flag==1)
{
if(SSPIF==1)
{ flag=0;
RD3=1;
SSPIF=0;
}
}
e=e+1;
SSPBUF=table[e];
RD4=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD4=1;
SSPIF=0;
}
}
}
}
void hourbit0full()
{
if(e==0x0a)
{
flag=0;
e=0;
SSPBUF=table[e];
RD4=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD4=1;
SSPIF=0;
}
}
f=f+1;
SSPBUF=table[f];
RD5=0;
while(flag==1)
{
if(SSPIF==1)
{ flag=0;
RD5=1;
SSPIF=0;
}
}
}
}
void hourbit1full()
{
if(f==2)
{
if(e==4)
{ flag=1;
e=0;
f=0;
SSPBUF=table[0];
RD5=0;
RD4=0;
while(flag==1)
{
if(SSPIF==1)
{ flag=0;
RD5=1;
RD4=1;
SSPIF=0;
}
}
}
}
}
void settime()
{
setflag=1;
flag=0;
a=b=0;
SSPBUF=0X3F;
RD0=RD1=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD0=RD1=1;
SSPIF=0;
}
}
while(setflag==1)
{
if(RE0==0)
{
settimedelay();
settimedelay();
settimedelay();
if(RE0==0)
{
flag=0;
c=c+1;
if(c==0x0a)
{
flag=0;
c=0;
d=d+1;
if(d==6)
{d=0;}
SSPBUF=table[d];
RD3=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD3=1;
SSPIF=0;
}
}
}
flag=0;
SSPBUF=table[c];
RD2=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD2=1;
SSPIF=0;
}
}
}
}
settimedelay();
settimedelay();
if(RE1==0)
{
settimedelay();
settimedelay();
settimedelay();
if(RE1==0)
{
flag=0;
e=e+1;
if(e==0x0a)
{
e=0;
f=f+1;
}
if(f==2 && e==4)
{f=0;e=0;}
flag=0;
SSPBUF=table[e];
RD4=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD4=1;
SSPIF=0;
}
}
flag=0;
SSPBUF=table[f];
RD5=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD5=1;
SSPIF=0;
}
}
}
}
settimedelay();
settimedelay();
if(RE2==0)
{
settimedelay();
settimedelay();
settimedelay();
if(RE2==0)
{setflag=0;}
}
}
}
void main()
{
initial();
f=e=d=1;
c=2;
clockint(); //初始化时间----11:12:00 2007年11月12日完成——我的生日(JONCY)为了纪念生日,故让这个数字多显示一分钟
while(1)
{
RE0=1;
RE1=1;
RE2=1;
RD7=1;
for(a=0;a<0x0a;a++)
{
if(RD7==0)
{
settimedelay();
if(RD7==0)
{ settime(); }
}
flag=0;
SSPBUF=table[a];
RD0=0;
while(flag==0)
{
if(SSPIF==1)
{ flag=1;
RD0=1;
SSPIF=0;
}
}
RD6=1;
delay500ms();
RD6=0;
delay500ms();
RD6=1;
}
secbit0full();
secbit1full();
minbit0full();
minbit1full();
hourbit0full();
hourbit1full();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -