西电《单片机应用系统创作设计》 课程实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、程序流程图:
图5
三、原创功能子函数分析:(2,用的是什么原理)
void Key_Touch_Slid() //滑动触摸检测程序
{
uchar key_check;
uchar key_temp1,key_temp2;
key_check = KeyPort01;//读取IO口状态,判断是否有键按下
key_temp1 = key_check&0xE0;
四、如何实现高亮LED亮度调节:(如何实现的及遇到的困难)
1、调节高亮LED的亮度市面上基本分为恒压法和恒流法调节,假设本次课设采用恒流驱动来调节大功率(1W及以上功率)LED亮度,那么就需要大功率LED灯珠进行有效散热,以及对专用恒流芯片放置体积较大的散热片进行散热,但是题目中限制了PCB板的大小,客观条件下无法增大PCB面积,增加散热用铝基板,所以方案最终决定使用小功率高亮LED作为发光元器件,用5V1A充电头作为电源,用直插封装耐流值高的三极管作为开关管,来控制高亮LED的亮度。
图6
如图6所示,即为PWM占空比调节原理,在单位周期内,如果高电平为有效电平,则占空比分别为:40%、60%、80%,可以简单理解为有效电压值所占单位时间的比例。
2、由于PCB板的大小限制,在制作过程中,为了节约空间,触摸按键的铜层设置的不易过大,间隔也不易过大,当TTP226没有设置灵敏度的时候,会出现按下一个按键的时候,旁边的按键也会出现干扰,也会被同时按下。经过调试测试,最终将TTP226的灵敏度调节为1档时,按键按下时不会相互干扰。
课设试验报告
一、硬件电路分析
图1
图1所示为整个触摸调光系统的电源部分,整体供电采用的为5V1A小型手机充电开关电源,接口为普通USB接口,如图所示,5V电源经过电容滤波,再经过1117-3.3V稳压芯片降压为3.3V,最终将干净的3.3V电压供给给MSP430使用。
图2
图2所示为MSP430最小系统,20管脚全部用插针引出,方便调试、下载程序使用。最小系统中设置2个运行指示灯,用作程序运行过程中的功能指示使用。复位电路则采用官方提供的复位电路0.1uF复位电容、泄放电阻及按键,用于最小系统程序复位使用。
key_check = KeyPort02;//读取IO口状态,判断是否有键按下
key_temp2 = key_check&0x3B;
if(key_temp1!=0xE0||key_temp2!=0x3B) //IO口值发生变化则表示有键按下
{
if(KEY_1==0) //按键1
{
while(KEY_1==0);
Key_Temp04=0;
Key_Temp05=0;
Key_Temp06=0;
}
}
if(KEY_2==0) //按键2
{
while(KEY_2==0);
if(Key_Temp01==1)
{
if(Gear_Now==0) //减弱一个档位
{
Pwm_Set(Gear_Now);
}
if((Gear_Max>=Gear_Now) && (Gear_Now>0))
图3
图3所示为高亮LED驱动电路部分,驱动方式为直插三极管直接驱动,通过控制三极管开关通断,用恒压法分别控制两个高亮二极管的亮度,也即通过单片机输出的PWM,通过 调节PWM占空比,来最终调节LED的亮度。
图4
如图4所示,为TTP226专用8路触摸芯片,C15-C22为触摸芯片的防干扰电容,主要作用为滤除高频干扰,防止误触,OPS0、OPS1、OSC1、OSC2为芯片控制设置端口,可以通过高低电平的设置,可以对输出输出信号的高低电平进行设置;D1-D8为输出端口信号显示LED,当OUT端输出为高电平时,LED为发光状态;SLE1-SLE4为触摸控制芯片的灵敏度控制端口,用于调整触摸按键的灵敏度,AHL用于调整,输出端为高电平或者为低电平。
{
Gear_temp = Gear_Now-1;
Pwm_Set(Gear_temp);
}
Key_Temp01=0;
Key_Temp02=1;
}
整个滑动检测部子函数首先我们假设手指由KEY1向KEY6滑动为增大亮度,由KEY6向KEY1滑动为减小亮度,根据实际进行分析,滑动一共分为3种情况,第一种为边缘滑动检测,由于只存在KEY1只与KEY2相邻,那么当单片机检测到KEY1被按下并且弹起的时候,此时只需要检测是否在KEY1被按下并且弹起之前有按下并弹起过KEY2,如果KEY2没有被按下或弹起过,那么程序则将KEY1的标志位Key_Temp01设置为1,其他KEY2——KEY6的标志位均设置为0,意味着KEY1此时已经被按下且弹起;如果在按下并弹起KEY1之前,程序检测到KEY2已经被按下并弹起过,也即是Key_Temp02=1为真的时候,则程序执行亮度减弱1个档位的操作,且程序会将KEY1的标志位Key_Temp01设置为1,其他KEY2——KEY6的标志位均设置为0;第二种为中间按键滑动检测,以KEY2为例,如果在按下并弹起KEY2之前,程序检测到KEY1已经被按下弹起过,也即是Key_Temp01=1为真的时候,那么当KEY2在被按下并弹起的时候,则程序执行增大1个档位亮度的操作,且此时将按键KEY2的位置标志位Key_Temp02设置为1,其余按键标志位均设置为0,同理当在按下并弹起KEY2之前,程序检测到KEY3已经被按下弹起过,那么当KEY2在被按下并弹起的时候,则程序执行减小1个档位亮度的操作,并将按键KEY2的位置标志位Key_Temp02设置为1,其余按键标志位均设置为0;第三种情况与第一种情况正好相反,因为与KEY6相邻的按键有且只有KEY5,所以当检测到KEY6按下的时候,需要提前判断KEY5是否被按下并弹起过,如果KEY5在之前已经被按下并弹起过,也即Key_Temp05=1的时候,程序则会执行增亮1个档位的操作,执行完后,需要将当前按键位置设置为Key_Temp06=1,其余按键标志位设置为0;如果在按下KEY6之前没有按动过KEY5,则只需将当前按键位置设置为Key_Temp06=1,其余按键标志位设置为0即可。
if(Key_Temp02==1)
{
Gear_temp = Gear_Now+1; //亮度增加一个档位
Pwm_Set(Gear_temp);
LED1_ON;
Key_Temp02=0;
Key_Temp01=1;
}
else
{
Key_Temp01=1;
Key_Temp02=0;
Keቤተ መጻሕፍቲ ባይዱ_Temp03=0;
相关文档
最新文档