物联网课程设计 超声波控制led.docx
- 文档编号:12127414
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:15
- 大小:98.29KB
物联网课程设计 超声波控制led.docx
《物联网课程设计 超声波控制led.docx》由会员分享,可在线阅读,更多相关《物联网课程设计 超声波控制led.docx(15页珍藏版)》请在冰豆网上搜索。
物联网课程设计超声波控制led
物联网课程
实验设计
课题名称:
超声波控制LED
小组成员:
陈高张立军徐兵兵肖雷明
组员学号:
2010110235;2010110218;2010110227;2010110268
所在班级:
信息工程学院10级计科
(2)班
实验日期:
2012年12月至2013年1月
一、实验目的:
通过对本课程的设计,加深对“物联网”概念的理解,能够明确其光明前景和未来对我们的生活的重大意义;并学习和掌握基本的物联网技术和相关的概念知识。
二、实验内容:
将超声波和LED灯两个独立实验结合起来,利用超声波来控制 LED的闪亮与熄灭
三、实验说明:
将两个实验的初始化代码写在一起,如果重名则要做必要的改写,然后把超声波的控制标记写在LED控制代码中的相应位置,从而达到控制LED的目的,再添加对超声波操作的代码,从而实现对LED的操作;相关问题将在代码中给于注释。
4、实验代码:
#include
#include
#include
#defineTIMER_TICKS_PER_MSSYSCLK/TIMER_PRESCALER/1000
#defineAUX1TIMER_TICKS_PER_MS
#defineAUX2-AUX1
#defineBAUDRATE115200//BaudrateofUARTinbps
#defineSYSCLK49000000//OutputofPLLderivedfrom(INTCLK*2)
#defineSAMPLE_DELAY200//Delayinmsbeforetakingsample
#defineTIMER_PRESCALER500//B
unsignedintcount=0;
unsignedintcount_s=0;
unsignedintnum=0;
floatdistan=0;
intx=0;
#defineLED_TOGGLE_RATE1/
#defineTIMER0_RELOAD_HIGHAUX2//ReloadvalueforTimer0highbyte
sfr16RCAP2=0xca;//Timer2capture/reload
sfr16RCAP3=0xca;//Timer3capture/reload
sfr16RCAP4=0xca;
sfr16TMR2=0xcc;//Timer2
sfr16TMR3=0xcc;//Timer3
sfr16TMR4=0xcc;
sbitLED=P0^3;//LED='1'meansONsbitSW1=P3^7;//SW1='0'meansswitchpressed
sbitLED1=P0^2;//LED1='1'meansON
sbitLED2=P0^4;//LED1='1'meansON
sbitSW2=P0^5;
sbituts_tx=P2^3;
sbitctrl1=P1^2;
sbitctrl2=P1^3;
sbitctrl3=P1^4;
sbitctrl4=P1^5;
voidExt_Interrupt_Init(void);
voidOSCILLATOR_Init(void);
voidPORT_Init(void);
voidComparator_Init(void);
voidUART1_Init(void);
voidTimer3_Init(void);
voidTimer4_Init(void);
voidWait_MS(unsignedintms);
voidPort_Init(void);//Portinitializationroutine
voidTimer0_Init(void);
unsignedcharresult;
voidmain(void)
{
WDTCN=0xde;//Disablewatchdogtimer关闭看门狗
WDTCN=0xad;
Timer0_Init();//InitializetheTimer0
Port_Init();//InitPorts
OSCILLATOR_Init();//Initializeoscillator
PORT_Init();
Comparator_Init();//InitializecrossbarandGPIO
UART1_Init();//InitializeUART1
Timer3_Init();
Timer4_Init();
EA=1;//Enableglobalinterrupts
EIE1=0x10;
while
(1)
{
EIE1=0x00;
SFRPAGE=TMR3_PAGE;
TMR3CN=0x04;
SFRPAGE=TMR4_PAGE;
TMR4CN=0x04;
while(count_s!
=32);
SFRPAGE=TMR3_PAGE;
TMR3CN=0x00;
count_s=0;
EIE1=0x10;
Wait_MS(10);
if(x==1)
{
SFRPAGE=UART1_PAGE;
printf("distan:
%fcm\n",distan);
if(distan<30) //设置30cm为超声波控制led灯闪亮与熄灭的条件,但距离小于30时,led1和led2都亮,大于30时,都不亮
{
LED1=1;
LED2=1;
}
}
Wait_MS(SAMPLE_DELAY);//Wait500millisecondsbeforetaking
x=0;
count=0;//anothersample
}
}
voidPort_Init(void)
{
charSFRPAGE_SAVE=SFRPAGE;//SaveCurrentSFRpage
SFRPAGE=CONFIG_PAGE;//SetSFRpage
XBR2=0x40;//Enablecrossbar
P0MDOUT=0x2C;//SetP1.6(LED)topush-pull
P2MDOUT&=~0x1;
result=1;
P2MDOUT|=0x2;
SFRPAGE=SFRPAGE_SAVE;//RestoreSFRpage
}
//-----------------------------------------------------------------------------
//Timer0_Init
//-----------------------------------------------------------------------------
//
//ReturnValue:
None
//Parameters:
None
//
//ThisfunctionconfigurestheTimer0asa8-bittimerwithreload,interrupt
//enabled.
//Usingtheinternalosc.at24.5MHzwithaprescalerof1:
8andreloading
//TL0registerwithTH0.
//
//Note:
TheTimer0usesa1:
48prescaler.Ifthissettingchanges,the
//TIMER_PRESCALERconstantmustalsobechanged.
//-----------------------------------------------------------------------------
voidTimer0_Init(void)
{
charSFRPAGE_SAVE=SFRPAGE;//SaveCurrentSFRpage
SFRPAGE=TIMER01_PAGE;//SetSFRpage
TH0=TIMER0_RELOAD_HIGH;//InitTimer0Highregister
TL0=TH0;//SettheintialTimer0value
TMOD=0x02;//Timer0in8-bitreloadmode
CKCON=0x02;//Timer0usesa1:
48prescaler
ET0=1;//Timer0interruptenabled
TCON=0x10;//Timer0ON
SFRPAGE=SFRPAGE_SAVE;//RestoreSFRpage
}
voidOSCILLATOR_Init(void)
{
intloop;//Softwaretimer
charSFRPAGE_SAVE=SFRPAGE;//SaveCurrentSFRpage
SFRPAGE=CONFIG_PAGE;//SetSFRpage
OSCICN=0x83;//Setinternaloscillatortorun使用内部晶振不分频
//atitsmaximumfrequency
CLKSEL=0x00;//Selecttheinternalosc.as
//theSYSCLKsource
//TurnonthePLLandincreasethesystemclockbyafactorofM/N=2
SFRPAGE=CONFIG_PAGE;
PLL0CN=0x00;//Setinternalosc.asPLLsource
SFRPAGE=LEGACY_PAGE;
FLSCL=0x10;//SetFLASHreadtimefor50MHzclk
//orless
SFRPAGE=CONFIG_PAGE;
PLL0CN|=0x01;//EnablePowertoPLL
PLL0DIV=0x01;//SetPre-dividevaluetoN(N=1)
PLL0FLT=0x01;//SetthePLLfilterregisterfor
//areferenceclockfrom19-30MHz
//andanoutputclockfrom45-80MHz
PLL0MUL=0x02;//MultiplySYSCLKbyM(M=2)
for(loop=0;loop<256;loop++);//Waitatleast5us
PLL0CN|=0x02;//EnablethePLL
while(!
(PLL0CN&0x10));//WaituntilPLLfrequencyislocked
CLKSEL=0x02;//SelectPLLasSYSCLKsource
SFRPAGE=SFRPAGE_SAVE;//RestoreSFRpage
}
voidPORT_Init(void)
{
charSFRPAGE_SAVE=SFRPAGE;//SaveCurrentSFRpage
SFRPAGE=CONFIG_PAGE;//setSFRpage
P1MDIN=0x03;
XBR0=0x17;
XBR1=0x04;
XBR2=0x44;
P0MDOUT|=0x01;//SetTX1pintopush-pull
P1MDOUT|=0x40;
P2MDOUT|=0x08;
SFRPAGE=SFRPAGE_SAVE;//RestoreSFRpage
}
voidComparator_Init()
{
inti=0;
charSFRPAGE_SAVE=SFRPAGE;//SaveCurrentSFRpage
SFRPAGE=CPT0_PAGE;
CPT0CN=0x80;
for(i=0;i<60;i++);//Wait20usforinitialization
CPT0CN&=~0x30;
CPT0MD=0x12;
SFRPAGE=SFRPAGE_SAVE;//RestoreSFRpage
}
voidUART1_Init(void)
{
charSFRPAGE_SAVE=SFRPAGE;//SaveCurrentSFRpage
SFRPAGE=UART1_PAGE;
SCON1=0x10;//SCON1:
mode0,8-bitUART,enableRX
SFRPAGE=TIMER01_PAGE;
TMOD&=~0xF0;
TMOD|=0x20;//TMOD:
timer1,mode2,8-bitreload
if(SYSCLK/BAUDRATE/2/256<1)
{
TH1=-(SYSCLK/BAUDRATE/2);
CKCON|=0x10;//T1M=1;SCA1:
0=xx
}
elseif(SYSCLK/BAUDRATE/2/256<4)
{
TH1=-(SYSCLK/BAUDRATE/2/4);
CKCON&=~0x13;//ClearallT1relatedbits
CKCON|=0x01;//T1M=0;SCA1:
0=01
}
elseif(SYSCLK/BAUDRATE/2/256<12)
{
TH1=-(SYSCLK/BAUDRATE/2/12);
CKCON&=~0x13;//T1M=0;SCA1:
0=00
}
else
{
TH1=-(SYSCLK/BAUDRATE/2/48);
CKCON&=~0x13;//ClearallT1relatedbits
CKCON|=0x02;//T1M=0;SCA1:
0=10
}
TL1=TH1;//InitializeTimer1
TR1=1;//StartTimer1
SFRPAGE=UART1_PAGE;
TI1=1;//IndicateTX1ready
SFRPAGE=SFRPAGE_SAVE;//RestoreSFRpage
}
voidTimer3_Init(void)
{
charSFRPAGE_SAVE=SFRPAGE;//SaveCurrentSFRpage
SFRPAGE=TMR3_PAGE;//SetSFRpage
TMR3CN=0x00;
TMR3CF=0x08;
RCAP3L=0x9C;
RCAP3H=0xFD;
TMR3=RCAP3;
SFRPAGE=0xe7;
EIE2|=0x01;
SFRPAGE=SFRPAGE_SAVE;
}
voidTimer4_Init(void)
{
charSFRPAGE_SAVE=SFRPAGE;//SaveCurrentSFRpage
SFRPAGE=TMR4_PAGE;
TMR4CN=0x00;
TMR4CF=0x0A;
RCAP4L=0x37;
RCAP4H=0xFB;
TMR4=RCAP4;
SFRPAGE=0xe7;
EIE2|=0x04;
SFRPAGE=SFRPAGE_SAVE;
}
voidTimer3_ISR(void)interrupt14
{
uts_tx=~uts_tx;
count_s++;
TF3=0;
}
voidTimer4_ISR(void)interrupt16
{
count++;
TF4=0;
}
voidCPT0_ISR(void)interrupt10
{
SFRPAGE=CPT0_PAGE;
CP0FIF=0;
SFRPAGE=TMR4_PAGE;
TMR4CN=0x00;
x=1;
distan=0.85*count/2;//计算距离
if((distan>200)||(distan<5))
{
x=0;
count=0;
}
}
voidWait_MS(unsignedintms)
{
charSFRPAGE_SAVE=SFRPAGE;//SaveCurrentSFRpage
SFRPAGE=TMR2_PAGE;
TMR2CN=0x00;//StopTimer3;ClearTF3;
TMR2CF=0x00;//useSYSCLK/12astimebase
RCAP2=-(SYSCLK/1000/12);//Timer2overflowsat1kHz
TMR2=RCAP2;
ET2=0;//DisableTimer2interrupts
TR2=1;//StartTimer2
while(ms)
{
TF2=0;//Clearflagtoinitialize
while(!
TF2);//Waituntiltimeroverflows
ms--;//Decrementms
}
TR2=0;//StopTimer2
SFRPAGE=SFRPAGE_SAVE;//RestoreSFRPAGE
}
//-----------------------------------------------------------------------------
//EndOfFile
//-----------------------------------------------------------------------------
5、实验现象
6、总结:
通过这次实验我们更加理解了超声波和LED灯实验原理,提升了我们自主动手实验的能力及自主思考的能力,更好的把理论转化为实验操作。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 物联网课程设计 超声波控制led 联网 课程设计 超声波 控制 led