PIC MSSP_SPI_74HC595

我觉得74HC595相当于是一个你看得见的寄存器,数据的输入只能是串行的8位输入,输出可以选择串行输出,也可以选择并行输出。

如果把两个74HC595连在一起,就会有译码器和扫描的结合的作用,夸张一点,如果时间允许,可以3接口扩展为16接口,虽然输入数据不同时,但是可以让输出数据同时。

#include       //调用头文件,可以去PICC18软件下去查找PIC18FXX2.H
__CONFIG(1,XT) ;         //晶振为外部4M
__CONFIG(2,WDTDIS) ;     //看门狗关闭
__CONFIG(4,LVPDIS) ;     //禁止低电压编程
#define rck RC2
#define sck RC3
#define si RC5

#define uchar unsigned char
#define uint unsigned int
#define nop NOP()

void delayms(uint x)
{
uint i,j;
for(i=0;i<=110;i++)
for(j=0;j<=x;j++);
}

char shuma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char led[18]={
0B10000000,
0B01000000,
0B00100000,
0B00010000,
0B00001000,
0B00000100,
0B00000010,
0B00000001,
0B00000000,
0B00000001,
0B00000010,
0B00000100,
0B00001000,
0B00010000,
0B00100000,
0B01000000,
0B10000000,
0B00000000
};

void write595(uchar dat1,uchar dat2)
{
rck=0; //rck为并行输出的控制时钟,当有上升沿的时候并行输出移位寄存器中的数
SSPBUF=dat1; //往移位寄存器里存数据
while(SSPIF==0) //往移位寄存器里存数据需要时间
{ ;}
SSPIF=0; //当移位寄存器里的8位数都存满的时候,会发生中断请求
SSPBUF=dat2;
while(SSPIF==0)
{ ;}
SSPIF=0;
nop;
rck=1;
}

void main()
{
uchar i=0,j=0;
ADCON1=0x06;
TRISC=0xd3;
PIR1=0x00; //PIR1寄存器里有关于SSP1IF的寄存器,即移位寄存器存满的中断标志位软件清零
SSPSTAT=0xc0;
SSPCON1=0x20;
while(1)
{
write595(led[j],shuma[i]); //用两个参数是因为我的开发板上把两个74HC595连在了一起,第一个74HC595的SO是第二个的SI,第一个595可以最快输出存入的数,但是第二个595的数据必须是从第一个595中移出来的数
delayms(800);
i++;
if(i>9)
i=0;
j++;
if(j>17)
j=0;
}
}

PIC <wbr>MSSP_SPI_74HC595

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值