资源简介
基于tdc-gp2的c8051单片机的激光测距测试程序,可以用,欢迎下载
代码片段和文件信息
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define sled_dm_port P0
unsigned long int M;
sbit LED =P1^3;
sbit SSN =P1^4;
sbit SCK =P1^7;
sbit SI =P1^5;
sbit SO =P1^6;
sbit INT =P2^3;//中断标志
sbit EN_START=P2^0;
sbit EN_STOP1=P2^1;
sbit EN_STOP2=P2^2;
sbit RST =P2^7;
sbit START =P3^4;
sbit STOP =P2^6;
uchar data0;data1;data2;data3;
uchar code smg[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0xff}; /*数码管0~9*/
uchar code sw[]={0x000x200x400x60}; //位选数组
void delay(void) //延时子函数
{
uchar ab;
for(b=1;b>0;b--)
for(a=97;a>0;a--);
}
void display() //数码管显示
{
P0=smg[data0];P3=sw[0];delay();
P0=smg[data1];P3=sw[1];delay();
P0=smg[data2];P3=sw[2];delay();
P0=smg[data3];P3=sw[3];delay();
}
void spi_enable(void) //开启spi 通信将ssn 置低
{
SSN=0;//ssn 置低
_nop_();
}
void spi_disable(void) //关闭spi 通信将ssn 置高
{
SSN=1;//ssn 置高
_nop_();
}
void send_zero(void) //发送0
{
SCK=1;//SCK 高电平
_nop_();
SI=0;//SI-输出一个低平
_nop_();
SCK=0;//SCK 低平
_nop_();
}
void send_one(void) //发送1
{
SCK=1;//SCK 高电平
_nop_();
SI=1;//SI-输出一个高平
_nop_();
SCK=0;//SCK 低平
_nop_();
}
//=====================SPI 写数据=====================//
void spi_write8(uchar wbuf8) // spi 写入8 位数据
{
uchar cnttmp=0x80;
spi_enable();
for(cnt=8;cnt>0;cnt--)
{
if((wbuf8&tmp)!=0)
send_one();//发送1
else
send_zero();//发送0
tmp /=2; //tmp 右移一位
} //没有spi 关闭命令,测试程序中代码关闭!
}
//void spi_write16(uint wbuf16) // spi 写16 位数据
//{
//uchar cnt;
//uint tmp=0x8000;
//spi_enable();
//for(cnt=16;cnt>0;cnt--)
//{
//if((wbuf16&tmp)>0)
//send_one();//发送1
//else
//send_zero();//发送0
//tmp /=2; //tmp 右移一位
//}
//_nop_();
//spi_disable();
//}
void spi_write32(unsigned long wbuf32) // spi 写32 位数据
{
uchar cnt;
unsigned long tmp=0x80000000;
spi_enable();
for(cnt=32;cnt>0;cnt--)
{
if((wbuf32&tmp)!=0)
send_one();//送1
else
send_zero();//发送0
tmp /=2; //tmp 右移一位
}
_nop_();
spi_disable();
}
//=====================SPI 读数据=====================//
unsigned long spi_read32()
{
uchar cnt;
unsigned long tmp=0x80000000;
unsigned long int rbuf32=0x00000000;
spi_enable();
for(cnt=32;cnt>0;cnt--)
{
SCK=0;//SCK
_nop_();
if(SO==1)//P6.2 SO
rbuf32 |=tmp;
tmp /=2;
SCK=1;// SCK
_nop_();
}
_nop_();
spi_disable();
return(rbuf32);
}
//===========GP2 上电复位程序==================//
void GP2_RESET(void)
{
RST=1; //输出高平
_nop_();
RST=0; //输出低平
_nop_();
RST=1; //输出高平
_nop_();
}//给gp2RSTN 管脚一个Reset 的方波
//===========GP2 寄存器配置程序====================//
void GP2_init(void)
{
unsigned long REG0REG1REG2 REG3 REG4REG5;
uchar PU=0x50;
uchar init=0x70;
REG0=0x800c3000;//校准陶瓷晶振时间为8 个32k 周期244.14us. 0x80008420
//设置高速晶振上电后一直起振.设置测量范围1自动校准上升沿敏感
REG1=0x81014100;//预期stop1 脉冲数1 个.计算第一个stop1-start
REG2=0x82E00000;//开启所有中断源
REG3=0x83080000;//
REG4=0x84200000;//
REG5=0x85080000;//
spi_write8(PU);//上电复位
_nop_();
spi_disable();
spi_write32(REG0);
_nop_();
spi_write
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-01-27 20:09 TDC\
文件 6376 2005-03-22 15:22 TDC\STARTUP.A51
文件 14048 2014-10-23 17:49 TDC\STARTUP.LST
文件 749 2014-10-23 17:49 TDC\STARTUP.OBJ
文件 15302 2015-01-07 20:30 TDC\tdc
文件 11522 2015-01-07 20:30 TDC\tdc.LST
文件 20605 2015-01-07 20:30 TDC\tdc.M51
文件 17528 2015-01-07 20:30 TDC\tdc.OBJ
文件 2196 2011-10-09 11:04 TDC\tdc.Uv2.bak
文件 33 2015-01-07 20:30 TDC\tdc.__i
文件 5571 2011-11-07 17:05 TDC\tdc.c
文件 3007 2015-01-07 20:30 TDC\tdc.hex
文件 54 2015-01-07 20:30 TDC\tdc.lnp
文件 1295 2011-11-08 10:49 TDC\tdc.opt.bak
文件 430 2015-01-07 20:30 TDC\tdc.plg
文件 56522 2015-01-07 20:55 TDC\tdc.uvopt
文件 13411 2014-10-23 17:51 TDC\tdc.uvproj
文件 1297 2011-11-07 17:17 TDC\tdc_Opt.Bak
文件 2192 2011-10-08 11:34 TDC\tdc_Uv2.Bak
文件 57065 2015-01-05 16:29 TDC\tdc_uvopt.bak
- 上一篇:linux多线程+UDP网络通信总结+程序
- 下一篇:stm32f1 黑点+黑线识别
评论
共有 条评论