51单片机与si4432怎么连接,最简单无线程序怎么写,只要发射按键和指示灯信号就可,本人急需,谢谢

51单片机与si4432怎么连接,最简单无线程序怎么写,只要发射按键和指示灯信号就可,本人急需,谢谢,第1张

连接 一盯粗般SI4432都设计成凯薯镇模组,模组连接也简单

1pin GND 2pin VCC 6pin SDO 7pin SDI 8pin SCLK 9pin nSEL 10pin nIRQ

13pin ANT 11、12、14pin GND 就可以了

程序就是利用SDO SDI SCLK nSEL nIRQ 串行输入设置寄存器即可,很容易,按

照datasheet编程就没问题了手余。

共阳共阴只是你在选COM端时给其高低电平的问题无关大雅

我给一段PIC单片机的程序让你参考一下,如果你看懂的话应该能做出来了

#include <pic.h>

#include <math.h>

//此程序实现计时秒表功能,时钟显示范围00.00~99.99秒,分辨度:0.01秒

unsigned char s0,s1,s2,s3;

//定义0.01 秒、0.1 秒、1秒、冲空物10秒计时器

unsigned char s[4];

unsigned char k ,data ,sreg;

unsigned int i;

const table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90};

//不带小数点的显示段码表

const table0[10]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10};

//带小数点的显示段码表

//TMR0初始化子程序

void tmint()

{

T0CS=0;//TMR0工散液作于定时器方式

PSA=1; //TMR0不用分频

T0IF=0; //清除TMR0的中断标志

T0IE=1; //TMR0中断允许

}

//spi显示初始化子程序

void SPIINIT()

{

PIR1=0;

SSPCON=0x30;

SSPSTAT=0xC0;

//设置SPI的控制方式,允许SSP方式,并且时钟下降沿发送。与"74HC595,当其

//SCLK从低到高跳变时,串行输入寄存器"的特点相对应

TRISC=0xD7; //SDO引脚为输出,SCK引脚为输出

TRISA5=0;//RA5引脚置为输出,输出显示锁存信号

}

//系统其它部分初始化子程序

void initial()

{

TRISB1=0;

TRISB2=0;

TRISB4=1;

TRISB5=1;//设置与键盘有关的各口的输入输出方式

RB1=0;

RB2=0; //建立键盘扫描的初始条件

}

//SPI传输亏升数据子程序

void SPILED(data)

{

SSPBUF=data; //启动发送

do {

}while(SSPIF==0);

SSPIF=0;

}

//显示子程序,显示4位数

void dispaly()

{

RA5=0; //准备锁存

for(k=4;k>0;k--)

{

data=s[k-1];

if(k==3) data=table0[data];//第二位需要显示小数点

else data=table[data];

SPILED(data); //发送显示段码

}

for(k=0;k<4;k++)

{

data=0xFF;

SPILED(data); //连续发送4个DARK,使显示好看一些

}

RA5=1; //最后给锁存信号,代表显示任务完成

}

//软件延时子程序

void DELAY()

{

for(i = 3553; --i ;) continue;

}

//键扫描子程序

void KEYSCAN()

{

while(1){

while(1)

{

dispaly(); //调用一次显示子程序

if ((RB5==0)||(RB4==0)) break;

}

DELAY(); //若有键按下,则软件延时

if ((RB5==0)||(RB4==0)) break;//若还有键按下,则终止循环扫描,返回

}

}

//等键松开子程序

void keyrelax()

{

while(1){

dispaly();//调用一次显示子程序

if ((RB5==1)&&(RB4==1)) break;

} //为防止按键过于灵敏,每次等键松开才返回

}

//系统赋值初始化子程序

void inizhi()

{

s0=0x00;

s[0]=s0;

s1=0x00;

s[1]=s1;

s2=0x00;

s[2]=s2;

s3=0x00;

s[3]=s3; //s0=s1=s2=s3=0,并放入显示缓冲数组中

sreg=0x00;//tmr0中断次数寄存器清0

}

//中断服务程序

void interrupt clkint(void)

{

TMR0=0X13; //对TMR0写入一个调整值。因为写入TMR0后接着的

//两个周期不能增量,中断需要3个周期的响应时间,

//以及C语言自动进行现场保护要消耗周期

T0IF=0; //清除中断标志

CLRWDT();

sreg=sreg+1;//中断计数器加1

if(sreg==40)//中断次数为40后,才对S0,S1,S2,S3 *** 作

{

sreg=0;

s0=s0+1;

if(s0==10){

s0=0 ;

s1=s1+1;

if(s1==10){

s1=0 ;

s2=s2+1;

if(s2==10){

s2=0;

s3=s3+1;

if(s3==10) s3=0 ;

}

}

}

}

s[0]=s0;

s[1]=s1;

s[2]=s2;

s[3]=s3;

}

//主程序

main()

{

OPTION=0XFF;

tmint(); //TMR0初始化

SPIINIT();//spi显示初始化

initial(); //系统其它部分初始化

di(); //总中断禁止

while(1) {

inizhi();//系统赋值初始化

KEYSCAN(); //键扫描,直到开始键按下

keyrelax(); //等键松开

ei();//总中断允许

TMR0=0X08;

KEYSCAN(); //键扫描直到停止键按下,在键扫描时有显示

keyrelax() ; //等键松开

di();//总中断禁止

KEYSCAN(); //键扫描到清0键按下,在键扫描时有显示

keyrelax() ; //等键松开

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12562858.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存