日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

stc15w404as引脚图_STC15F2K6S2与stc15w404AS的spi通讯

發布時間:2023/11/27 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stc15w404as引脚图_STC15F2K6S2与stc15w404AS的spi通讯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#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通讯的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。