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通讯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可做人工授精吗
- 下一篇: postbody传参_post传参par