微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC MSSP_SPI_74HC595

PIC MSSP_SPI_74HC595

时间:11-21 来源:互联网 点击:
我觉得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;

}

}


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

网站地图

Top