[PIC®/AVR®/dsPIC®产品] PIC16F877A开发板 SPI总线驱动74595实验

[复制链接]
1338|27
 楼主| kxsi 发表于 2019-7-25 10:28 | 显示全部楼层 |阅读模式
  • //*****************电子园PIC16F877A开发板 SPI总线驱动74595实验***************



  • //



  • //CKP=0;       空闲为低电平



  • //CKP=1;       空闲为高电平



  • //STAT_CKE=0;  SDO后沿采样



  • //STAT_CKE=1;  SDO前沿采样



  • //



  • //STAT_SMP=0;    //在数据输出时间的中间采样输入数据



  • //STAT_SMP=1;    //在数据输出时间的末尾采样输入数据



  • //



  • //RC3/SCK 接74595 移位时钟11脚



  • //RC5/SDO 接74595 数据输入14脚



  • //RC4/SDI 接74595 锁存时钟12脚



  • //



  • //mcu: PIC16F877A  4MHz  



  • //2010年7月10日16:11:08



  • //***************************************************************************







  • #include <lian_pic.h>



  • __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);       



  • //HS振荡,禁止看门狗,低压编程关闭,启动延时定时器







  • const uchar smg_text[]={0xbf,0xfe,0xfb,0xef,0xdf,0x7f,0xfd,0xf7,};







  • const uchar smg[]={0x0a,0xfa,0x8c,0xa8,0x78,0x29,0x09,0xba,0x08,0x28,0x00,};   



  •                 // 0     1    2    3    4    5    6    7    8    9    all







  • const uchar smg_bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,};                                            







  • uchar c;   



  • uchar d;   







  • //********************函数定义*********************



  • void delay1ms(uint DelayTime);     



  • uchar spi_write_read(uchar dd);




 楼主| kxsi 发表于 2019-7-25 10:28 | 显示全部楼层
//*************** 主程序 ********************
void main(void)
{       
  SSPM3=0;
  SSPM2=0;
  SSPM1=0;
  SSPM0=0;       //spi主控模式,时钟为Fosc/4
  
  CKP=0;         //空闲为低电平
  STAT_CKE=1;    //SDO前沿采样
  
  STAT_SMP=0;    //在数据输出时间的中间采样输入数据
  
  TRISC3=0;      //RC3/SCK为输出
  TRISC5=0;      //RC5/SDO为输出
  TRISC4=0;      //RC4/SDI为输出(不使用SDI引脚时,可设置为输出,作普通io用)
  RC4=0;
  SSPEN=1;       //使能MSSP模块,启用spi或iic
  
  delay1ms(10);
  
  RC4=0;                 //产生锁存时钟
  spi_write_read(0x00);
  spi_write_read(0x00);
  RC4=1;
  delay1ms(500);
  
  for(d=0;d<8;d++)
  {
    for(c=0;c<8;c++)
    {
      RC4=0;
      spi_write_read(smg_bit[d]);
      spi_write_read(smg_text[c]);
      RC4=1;
      delay1ms(50);
    }  
  }

  while(1)
  {
    for(c=0;c<11;c++)
    {
      RC4=0;
      spi_write_read(smg_bit[8]);
      spi_write_read(smg[c]);
      RC4=1;
      delay1ms(50);
    }              
  }
}       
 楼主| kxsi 发表于 2019-7-25 10:28 | 显示全部楼层
//****************spi总线发送接收数据***************
uchar spi_write_read(uchar dd)
{
  uchar buf;
  SSPBUF=dd;
  while(!STAT_BF);    //等待数据发送接收完毕
  buf=SSPBUF;         
  return (buf);       //返回接收到的数据
}
 楼主| kxsi 发表于 2019-7-25 10:29 | 显示全部楼层
//*****************延时 n*1ms 12MHz*****************
void delay1ms(uint DelayTime)
{       
  uint temp;
  for(;DelayTime>0;DelayTime--)
  {       
    for(temp=0;temp<270;temp++)
    {;}
  }
}
598330983 发表于 2019-7-31 23:56 | 显示全部楼层
有没有效果图啊
51xlf 发表于 2019-8-5 10:59 | 显示全部楼层
pic18系列单片机和PIC16系列单片机什么区别  
i1mcu 发表于 2019-8-5 11:00 | 显示全部楼层
并行输出的位移缓存器  
pmp 发表于 2019-8-5 11:00 | 显示全部楼层
一次性烧录的单片机吗?
mmbs 发表于 2019-8-5 11:01 | 显示全部楼层
pic 16f877a 头文件都有哪些?  
1988020566 发表于 2019-8-5 11:01 | 显示全部楼层
请问下PIC16f877a-i/p的引脚定义是怎样的  
lzbf 发表于 2019-8-5 11:01 | 显示全部楼层
PWM模式里的周期怎么算 的   
houjiakai 发表于 2019-8-5 11:01 | 显示全部楼层
中断有没有优先级  
youtome 发表于 2019-8-5 11:02 | 显示全部楼层
内部LDO不工作,功耗更低些?     
cemaj 发表于 2019-8-5 11:02 | 显示全部楼层
如何调试PIC16的堆栈   
sanfuzi 发表于 2019-8-5 11:02 | 显示全部楼层
PIC16 汇编指令多少字节  
cemaj 发表于 2019-8-5 11:02 | 显示全部楼层
pic16f877 datasheet 寄存器定义  
51xlf 发表于 2019-8-5 11:02 | 显示全部楼层
pic16f877与16f877A 有什么区别?
youtome 发表于 2019-8-5 11:02 | 显示全部楼层
PIC单片机16系列的使用什么编译器  
i1mcu 发表于 2019-8-5 11:02 | 显示全部楼层
74HC595吧?            
houjiakai 发表于 2019-8-5 11:02 | 显示全部楼层
pic16(L)F1503和pic16F1503有什么区别  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

3310

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部