📄 xiang_mu.c
字号:
//-----------------------函数声明,变量定义--------------------------------------------------------
#include <reg52.h>
#include <intrins.h>
#include <math.h>
sbit SCK=P1^0; // 将p1.0口模拟时钟输出
sbit MOSI=P1^1; // 将p1.1口模拟主机输出
sbit MISO=P1^2; // 将p1.1口模拟主机输入
sbit SS1=P1^3; // 将p1.1口模拟片选
#define uchar unsigned char
#define uint unsigned int
#define pi 3.1415926
xdata uchar table[255];
uchar c,i;
uchar adr;
float cy;
//--------------------------------------------------------------------------------------------------
// 函数名称: tab
// 函数功能: 正弦波相位分256份所对应的幅码表格的生成
//--------------------------------------------------------------------------------------------------
void tab()
{
char b,flag;
float a;
for(i=0;i<255;i++)
{
a=2*pi/256;
b=sin(i*a)*127; //将所得的幅码乘127
table[i]=b; //将乘后的幅码存入table中
}
flag=1;
}
void delay(){ ; ; } // 短延时子函数
//--------------------------------------------------------------------------------------------------
// 函数名称: SPISendByte
// 入口参数: ch
// 函数功能: 发送一个字节
//--------------------------------------------------------------------------------------------------
void SPISendByte(unsigned char ch)
{
unsigned char idata n=8; // 向SDA上发送一位数据字节,共八位
SCK = 1 ; //时钟置高
while(n--)
{
delay();
SCK = 0 ; //时钟置低
if((ch&0x80) == 0x80) // 若要发送的数据最高位为1则发送位1
{
MOSI = 1; // 传送位1
}
else
{
MOSI = 0; // 否则传送位0
}
delay();
ch = ch<<1; // 数据左移一位
SCK = 1 ; //时钟置高
}
}
main()
{
tab();
adr=1;
i=0;
while(adr)
{
c=table[i];
SPISendByte(c);
SPISendByte(adr-1);
i++;
adr++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -