#include/*********************************位定义***********************************/

#define uchar unsigned char

#define lcd1602_db  P2

#define SPIF (SPSTAT&0X80)

/*********************************端口定义***********************************/

sbit        SPI_SCL=P1^5;

sbit        SPI_MISO=P1^4;

sbit        SPI_MOSI=P1^3;

sbit        SPI_SS=P1^2;

sbit rs=P4^3;

sbit rw=P4^5;

sbit ep=P4^4;

/********************************显示数据表*********************************/

const char j=10;

uchar sendData[15]={"abcdefghijklm"};

uchar recData[]={"abcdefghijklm"};

/*****************************************************************************

函数功能:LCD延时子程序

入口参数:ms

出口参数:

*****************************************************************************/

void delay(unsigned char ms)

{

unsigned int i;

while(ms--)

{

for(i = 0; i< 50; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

/*****************************************************************************

函数功能:测试LCD忙碌状态

入口参数:

出口参数:result

*****************************************************************************/

bit lcd_bz()

{

unsigned char i;

bit result;

rs = 0;

rw = 1;

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

delay(50);

for(i = 0; i< j; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

result = (bit)(P2 & 0x80);

ep = 0;

return result;

}

/*****************************************************************************

函数功能:写指令数据到LCD子程序

入口参数:cmd

出口参数:

*****************************************************************************/

void lcd_wcmd(unsigned char cmd)

{

unsigned char i;

while(lcd_bz());        //判断LCD是否忙碌

rs = 0;

rw = 0;

ep = 0;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

lcd1602_db = cmd;

_nop_();

_nop_();

_nop_();

_nop_();

for(i = 0; i< j; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

for(i = 0; i< j; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

ep = 0;

}

/*****************************************************************************

函数功能:设定显示位置子程序

入口参数:pos

出口参数:

*****************************************************************************/

void lcd_pos(unsigned char pos)

{

lcd_wcmd(pos | 0x80);

}

/*****************************************************************************

函数功能:写入显示数据到LCD子程序

入口参数:dat

出口参数:

*****************************************************************************/

void lcd_wdat(unsigned char dat)

{

unsigned char i;

while(lcd_bz());//判断LCD是否忙碌

rs = 1;

rw = 0;

ep = 0;

lcd1602_db = dat;

_nop_();

_nop_();

_nop_();

_nop_();

for(i = 0; i< j; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

for(i = 0; i< j; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

ep = 0;

}

/*****************************************************************************

函数功能:LCD初始化子程序

入口参数:

出口参数:

*****************************************************************************/

void lcd_init()

{

lcd_wcmd(0x38);   //显示模式设置:16×2显示,5×7点阵,8位数据接口

delay(1);

lcd_wcmd(0x0c);   //显示模式设置

delay(1);

lcd_wcmd(0x06);   //显示模式设置:光标右移,字符不移

delay(1);

lcd_wcmd(0x01);   //清屏幕指令,将以前的显示内容清除

delay(1);

}

/*****************************************************************************

函数功能:SPI初始化子程序

入口参数:

出口参数:

*****************************************************************************/

void init_spi()

{

SPDAT=0;           //清空SPI数据寄存器

SPSTAT=0xc0;   //清除SPI状态标志位

SPCTL=0xDd;           //CPU_CLK/16,时钟前沿位下降沿,后沿采样,主模式,最低位在前

}

/*****************************************************************************

函数名:send

函数功能:SPI发射接收一体程序

输入参数:SendData,经主机发给从机的数据

返回参数:从机发给主机的数据 recdata

*****************************************************************************/

void send()

{

uchar i;

for(i=0;i<16;i++)

{

SPDAT=sendData[i];                                   //将数据放入SPI数据寄存器

while(!(SPIF));           //等待发送完成

SPSTAT=0xc0;                                //清除中断标志位

recData[i]=SPDAT;                                 //从机数据采集

}

}

void main()

{

uchar i;

lcd_init();

init_spi();

while(1)

{

send();

lcd_pos(0x00);

for(i=0;i<16;i++)

{

lcd_wdat(recData[i]);

}

delay(1);

}

}

从机

/*************头文件************************/

#include/*************位定义************************/

#define uchar unsigned char

sbit        SPI_SCL=P1^5;

sbit        SPI_MISO=P1^4;

sbit        SPI_MOSI=P1^3;

sbit        SPI_SS=P1^2;

unsigned char SPI_Buffer=0;

#define SPIF (SPSTAT&0X80)

/*---------------------------------------------------------

*函数名:init_spi

*函数功能:SPI初始化

*输入参数:         无

*返回参数:         无

----------------------------------------------------------*/

void init_spi()

{

SPDAT=0;          //清空SPI数据寄存器

SPSTAT=0xc0;  //清除中断标志位

SPCTL=0xcd;          //1100,1101  CPI_CLK/16,时钟前沿下降,后沿采样,从模式,最低位在前

}

/*---------------------------------------------------------

*函数名:main

*函数功能:主函数

*输入参数:

*返回参数:

----------------------------------------------------------*/

void main()

{

init_spi();

SPSTAT=0x34;

while(1)

{

while(!SPIF);                //查询传输完成位

SPSTAT=0xc0;      //清除中断标志,和写冲突标志,注意是对应位写1才能清零

SPI_Buffer = SPDAT;

SPDAT=0x01;        //从机收到SPI数据后,发送固定数据0x33

}

}

stc15w404as引脚图_STC15F2K6S2与stc15w404AS的spi通讯相关推荐

  1. stc15w404as引脚图_怎么把STC15W404AS的EEPROM读写

    /*用3个按键和8个LED演示单字节读写EEPROM*/ #include "STC15F2K60S2.H"             //15系列通用头文件 #include    ...

  2. SPI通讯协议详解 基于STM32

    SPI 协议简介 SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface),即串行外围设备接口,是 一种高速全双工的通信总线.它被广泛地使用在 ADC.L ...

  3. 15张图详解四线制SPI通讯

    关注.星标公众号,直达精彩内容 文章来源:analog-dialogue官网 外设接口(SPI)是微控制器和外围 IC(如传感器.ADC.DAC. 移位寄存器.SRAM等)之间使用最广泛的接口之一. ...

  4. 15w4k58s4引脚图_《51单片机轻松入门—基于STC15W4K系列》连载

    1.1.4本书配套实验板及相关学习工具介绍 本书配套了2个实验板,一个作为主实验板,外形如图1-2所示,可以完成流水灯.定时器/计数器.串口通信.I2C通信.SPI通信.按键.数码管.LCD1602液 ...

  5. 光耦p621引脚图_开关电源中光耦电路的设计与优点

    光耦(opticalcoupler)亦称光电隔离器.光耦合器或光电耦合器.它是以光为媒介来传输电信号的器件,通常把发光器(红外线发光二极管LED)与受光器(光敏半导体管)封装在同一管壳内.当输入端加电 ...

  6. adc0809引脚图及功能_80C51单片机的引脚及其功能介绍

    首先我们来连接一下单片机的引脚图,如果,具体功能在下面都有介绍. 单片机的40个引脚大致可分为4类:电源.时钟.控制和I/O引脚. ⒈ 电源: ⑴ VCC - 芯片电源,接+5V: ⑵ VSS - 接 ...

  7. 7805引脚图及稳压电路图资料

    7805是我们最常用到的稳压芯片了,他的使用方便,用很简单的电路即可以输入一个直流稳压电源,他的输出电压恰好为5v,刚好是51系列单片机运行所需的电压,他有很多的系列如ka7805,ads7805,c ...

  8. lj245a引脚功能图_CA3140中文资料-引脚图及功能

    CA3140高输入阻抗运算放大器,是美国无线电公司研制开发的一种BiMOS高电压的运算放大器在一片集成芯片上,该CA3140A和CA3140 BiMOS运算放大器功能保护MOSFET的栅极(PMOS上 ...

  9. 高速PCB中常见存储器之FLASH引脚图、布局布线设计

    转载于: http://www.pcbbar.com/forum.php?mod=viewthread&tid=4181&highlight=flash FLASH(闪速存储器)引脚图 ...

最新文章

  1. hdu oj 2020 绝对值排序
  2. 【荐】说说CSS Hack 和向后兼容
  3. Quartz + spring 定时任务常见错误总结
  4. python输入一个字母_python – Tkinter输入的第一个字母
  5. Auto.JS 教程
  6. 微信小程序tabBar导航栏页和其他页执行onLoad与onShow时机;tabBar页获取不到参数问题;navigateTo跳转无效问题;onShow执行两次问题;
  7. 写一些脚本的心得总结系列第3篇------同步数据到其他表
  8. Java判断平台为32位或64位,载入对应DLL
  9. linux RAC 安装失败完全卸载
  10. 4月28日上午学习日志
  11. 网关 配置内网DNS 服务器
  12. AutoCAD2010安装教程
  13. Win10以太网属性空白怎么回事
  14. 效率源linux,FLOOPY效率源硬盘坏道修复工具 修复坏硬盘的时候 为何只能手动修复 而自动修复又说找不到硬盘?...
  15. 赵鹏计算机专业,赵鹏 - 安徽大学 - 计算机科学与技术学院
  16. XDOJ32角谷定理
  17. PPT图片瘦身/图片提取
  18. itext 7使用笔记
  19. 计算机本科核心课程教学视频,绝对经典,有空温习温习~
  20. 小孢子:在?我用本地环境pytest带你玩自定义算子

热门文章

  1. 【UML建模】UML图详细总结
  2. iPhone 14 与iPhone 13
  3. CodeGen编写自定义表达式标记
  4. NVIDIA Turing Architecture架构设计(上)
  5. Nsight Compute Profilier 分析
  6. 客快物流大数据项目(十二):Docker的迁移与备份
  7. CentOS7.4 安装mongodb
  8. [JAVA EE] JPA 技术实践:完成增、删、改、查操作
  9. Python 合并2个list
  10. bash: vue: command not found