📄 dmcu.c
字号:
#include "reg52.h"
sbit P10=P1^5;
sbit MST = P1^1;
sbit MCLK = P1^2;
sbit SCLK = P1^3;
sbit SDA = P1^4;
xdata unsigned char rsBufs[128];
bdata unsigned char sBUF;
sbit BUF0 = sBUF^0;
sbit BUF7 = sBUF^7;
unsigned char SndBits=0,RcvBits=0;
bit OE,SR,sTB,sRB;
bit sTI=0,sRI=0;
unsigned char SndCnt,SndPosi;
unsigned char RcvCnt;
sbit P37=P3^7;
void delay(unsigned char dly);
void DMCU_COM(void){
if (SR){
if (!SndBits){//发送前处理
if (SndPosi<SndCnt){
delay(0xFF);
sBUF=rsBufs[SndPosi++];
P0=sBUF;
SndBits=1;
}else{
SR=0;
MCLK=1;
SCLK=1;
SDA=1;
RcvCnt=0;
RcvBits=0;
SndCnt=0;
SndPosi=0;
}
}//用于要发送的数据数量
if (SndBits==1){
if ((MCLK)&&(SCLK)){
MCLK=0;
}else if ((!MCLK)&&(!SCLK)){
SndBits=2;
MCLK=1;
}
}else if ((SndBits>=2)&&(SndBits<=9)){
if ((SCLK)&&(MCLK)){
SDA=BUF0;
sBUF>>=1;
MCLK=0;
}else if ((!SCLK)&&(!MCLK)){
SndBits++;
MCLK=1;
}
}else{//发送完一个字节
SndBits=0;
}
}else{
if (!RcvBits){
if ((!MCLK)&&(SCLK)){
SCLK=0;
}else if ((!SCLK)&&(MCLK)){
SCLK=1;
RcvBits=1;
}
}else if ((RcvBits>=1)&&(RcvBits<=8)){
if ((!MCLK)&&(SCLK)){
sBUF>>=1;
BUF7=SDA;
SCLK=0;
}else if ((MCLK)&&(!SCLK)){
RcvBits++;
SCLK=1;
}
}else{//接收完初始化发送
P2=sBUF;
rsBufs[RcvCnt++]=sBUF;
RcvBits=0;
}
if (RcvCnt>=8){ //接收后处理
SR=1;
SCLK=1;
MCLK=1;
SDA=1;
SndBits=0;
SndCnt=RcvCnt;
SndPosi=0;
RcvCnt=0;
} //用于接收完后进行后处理
}
}
void delay(unsigned char dly){
while(--dly);
}
void main(void){
rsBufs[0]=0xF0;
rsBufs[1]=0x03;
rsBufs[2]=0x00;
rsBufs[3]=0x00;
rsBufs[4]=0x00;
rsBufs[5]=0x10;
rsBufs[6]=0x51;
rsBufs[7]=0x27;
SndCnt=8;
SndPosi=0;
while(1){
if ((MST)&&(!SR))SR=1;//else SR=0;
P37=SR;
DMCU_COM();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -