基于蓝牙控制的灯光控制系统设计实验报告.docx

基于蓝牙控制的灯光控制系统设计实验报告.docx

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
专业学习资料 专业学习资料 基于蓝牙控制的的灯光控制系统 第一章功能描述 1、 本设计采用蓝牙作为上位机和下位机之间的通信方式 ,本设计使用手机APP 作为上位机控制下位机(单片机)。 2、 采用DS1302时钟芯片,通过开发板上的数码管显示时分秒 ,即使断开电 源,DS1302芯片中的时间也会正常走,不需要重复写入时间。 3、 手机连接蓝牙后,手机APP可以控制LED灯显示红绿蓝三种颜色,还可以向 单片机发送LED灯亮的时间以及灯灭的时间。 4、 当灯亮的时候,可以通过按键调节占空比调节灯光亮度也就是 PWM调光。 在灯光开启之前以及灯灭之后 PWM调光按键无效。 第二章下位机软件设计思路以及原理 本设计使用了 STC12C5A60S2单片机、数码管、HC-05蓝牙模块、LED彩 灯、DS1302时钟模块。 2.1单片机程序设计 单片机部分程序设计主要包括定时器 0和定时器1以及串口部分程序设计 2.1.1定时器以及PWM调光部分程序设计 定时器主要用到了定时器0以及定时器1,在本设计中有一项功能是PWM 调光功能,由于单片机没有PWM模块,所以在本设计中我们采用定时器0来模 拟实现PWM的功能,其中定时器0的初始化程序如下所示。 void TimerOI ni t() { TMOD = 0x02; //定时器0,工作模式2,8位定时模式 TH0=210; //写入预置初值(取值1-255,数越大 PWM频率越 高) TL0=210; //写入预置值 (取值1-255,数越大PWM频率越高) TR0=1; //启动定时器0 PWM_T=0; } void timer0() in terrupt 1 { t++; //每次定时器溢出加1 if(t==250) //PWM 周期 100 个单位 { t=0; //使t=0,开始新的PWM周期 P仁0x07&P1; // 输出端口 } if(PWM_T==t) //按照当前占空比切换输出为高电平 { P仁0 xf8|P1; } } 这一部分程序主要是让单片机每个 45微秒进入一次定时器0中断,其中t 每隔45微秒加一次,计数到250的时候重新置零,并让P1的高五位置零,也 就是亮度达到最大。PWM_T是调节占空比的,初始值是0 ,是通过按键控制 PWM_T数值的增加与减少的。当PWM_T的数值与t相等的时候将P1的高五位 置为高电平。 定时器1部分程序设计如下所示 void Timerllnit(void)//timerl void Timerllnit(void) //timerl初始化程序 TMOD &= TMOD &= 0x0F; //设置定时器模式 TMOD |= TMOD |= 0x10; //设置定时器模式 TL1 = 0x00;//设置定时初值TH1 = 0xEE; TL1 = 0x00; //设置定时初值 TH1 = 0xEE; //设置定时初值 TF1 = 0; //清除TF1标志 TR1 = 1; //定时器1开始计时 } void timer1() in terrupt 3 //设置定时初值 //设置定时初值 //设置定时初值 TH1 = 0xEE; keysca n(); t1++; if(t1 == 100) { write_1302(0x8e,0x00); hour=read_1302(0x85); mi nute=read_1302(0x83); seco nd=read_1302(0x81); write_1302(0x8e,0x80); t1 = 0; } // if(t1 == 20) t = 0; } 定时器1设置每5ms进入一次中断,进入中断之后先重装初值,然后进行 按键扫描,本设计中只用到了独立按键,所以只需要扫描两个按键就行了 。没 进入一次t1就加1,当t1等于100的时候也就是500ms的时候读取一次 DS1302的时,分,秒。因为DS1302的时,分,秒三个变量每隔一秒种才变化 一次,所以每个500ms读取一次是比较节省资源的做法,而且可以保证数据读 取无误。 2.1.2串口部分程序设计 void send_data(uchar byte) // 串口发送函数 { SBUF = byte; while(!TI); TI = 0; } void Uartln it(void) r // 串口 初始化 baud = 9600 ; { PCON &= 0x7F; //波特率不倍速 SCON = 0x50; 〃8位数据,可变波特率 AUXR &= 0xFB; //独立波特率发生器时钟为Fosc/12,即12T BRT = 0xFD; //设定独立波特率发生器重装值 AUXR |= 0x01; //串口 1选择独立波特率发生器为波特率发生

文档评论(0)

cooldemon0602 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档