北京交大单片机课程设计声控灯_单片机课程设计声控灯

2020-02-27 其他范文 下载本文

北京交大单片机课程设计声控灯由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机课程设计声控灯”。

单片机课程设计报告

一. 设计说明

声控灯

目前的照明灯调节一般都是单一亮度的,通过S51和声音传感器调节LED亮的个数实现亮度的调节。

二. 总体设计

系统总体设计

三. 硬件电路设计

整体电路如图所示

(声音传感器用按钮开关代替)

声音传感器

烧写电路: 由于AT89S51支持ISP,所以可以直接使用USBISP下载线下载,十分方便。

四. 软件设计

单片机程序设计使用C语言,在Keil uVision3环境下调试完成;

调试中使用的ISIS 7 Profeional USBISP使用progisp1.68下载。

主程序流程:该程序逻辑比较复杂,使用了5个变量作为标志,分别用作外部中断计数,定时器0、1计数,所处模式标志。单片机复位后灯全灭,程序运行在模式0,当有声音作为外部中断进入程序后,开始计时2S,记录2S内声音响起的次数,同时有0.4S的消抖延时。2S后进入中断服务程序中模式0的分支,之后再通过声音次数重新选择模式。这时按照不同的模式亮灯,同时再次有中断后进入相应的模式分支中。

五. 问题与解决

管脚的预定义:设计中使用的头文件为ATmel提供的AT89X51的标准头文件,刚开始编程时没有注意到该头文件中是如何定义端口的,以为是P0^2,编译后通过查找错误,并到头文件中找相关定义才知道应该是P0_2.模式切换的问题:刚开始编程时把程序想的太简单,有很多问题没有考虑清楚,流程不完整,导致仿真时不出结果,经过2天的思考,把各个模式都想清楚了,再用几个标志变量,整个流程得以完整实现。

芯片的选择:由于灯用于照亮,选用的高亮LED,电流较大,不能用IO口直接驱动,经过查找资料,最终选用8路达林顿管ULN2803作为驱动电路,效果比较理想。

消抖:在编程前我用示波器观察过声音传感器的输出,有声音时会有一个尖脉冲,波形比较稳定,所以我以为这个程序不需要消抖,但是当最终板子出来后实验发现还是会有抖动干扰。所以加了0.4S的消抖。

六. 设计成果

板子上电后进入待机状态,以拍手为例,2S内拍1下,亮2个灯(亮度等级1),拍2下亮4个灯(亮度等级2),拍3下亮6个灯(亮度等级3),拍4下亮8个灯(亮度等级4)。之后再拍1下是降1个亮度等级,拍2下是升1个亮度等级。

七. 设计感想

这次单片机课程设计中,虽然使用到的器件非常简单,程序涉及的知识也不多,但是整个程序在逻辑上要求比较高,在编程初期思考了很久。在整个设计过程中,硬件电路的焊接比较顺利,在调试中也只遇到了消抖的问题。在整个实验中熟悉了C语言在单片机编程中的应用,感觉高级语言有很大优势,如果逻辑比较复杂的程序用汇编来做的话无法想象。

附件:程序代码#include #define LED1 P2_1 #define LED2 P2_2 #define LED3 P2_3 #define LED4 P2_4 /*子函数、变量定义*/ void sound_int(void);void t0(void);void t1(void);void t0_0(void);void t0_1(void);void t0_2(void);void t0_3(void);void t0_4(void);void bright0(void);void bright1(void);void bright2(void);void bright3(void);void bright4(void);unsigned int i;unsigned int j;unsigned int t;unsigned int k;/*主函数*/ void main(void){

i=0;

j=0;

t=0;

k=0;

LED1 = 0;

LED2 = 0;

LED3 = 0;

LED4 = 0;

PX0=1;

PT0=0;

PT1=0;

EX0=1;

ET0=1;

ET1=1;

IT0=0;

EA=1;

while(1);}

//变量初始化

//IO口初始化

//外部中断优先级高

//定时器中断优先级低

//外部中断允许

//定时器中断允许

//边沿触发

//总中断允许 4

/****************************************/ /*函数名:外部中断***********************/ /*功能:定时器初始化、外部中断标志数累加*/ /****************************************/ void sound_int(void)interrupt 0 {

EX0=0;

//关外部中断

k=0;

//定时器1中断计数清0

j=j+1;

//外部中断计数

TMOD=0x22;

//定时器0工作方式2 ,定时器1作方式2

TH0=56;

//定时中断1次200us

TL0=56;

TF0=0;

//定时器0清0

TR0=1;

//启动T0

TH1=56;

TL1=56;

TF1=0;

TR1=1;

} /**********************************************/ /*函数名:定时器中断0**************************/ /*功能:从第一次外部中断开始计时,2S后选择分支*/ /**********************************************/ void t0(void)interrupt 1 { t=t+1;

//进中断次数累加,使定时时间为200us*10000=2S if(t==10000)

//从第一次外部中断开始计时,2S后选择分支

{

switch(i)

{

case 0:t0_0();break;

case 1:t0_1();break;

case 2:t0_2();break;

case 3:t0_3();break;

case 4:t0_4();break;

}

} } /**********************************************/ /*函数名:定时器中断1**************************/ /*功能:400ms消抖******************************/ /**********************************************/ void t1(void)interrupt 3 { k=k+1;if(k==2000)

EX0=1;} /**********************************************/ /*功能:不同状态下对外部中断的不同响应*********/ /**********************************************/ //----------------void t0_0(void)

{ TR0=0;TR1=0;EA=0;switch(j){

case 0:bright0();break;

case 1:bright1();break;

case 2:bright2();break;

case 3:bright3();break;

default:bright4();break;} } //----------------void t0_1(void){ TR0=0;TR1=0;EA=0;switch(j){

case 0:bright1();break;

case 1:bright0();break;

default:bright2();break;} } //----------------void t0_2(void){ TR0=0;TR1=0;EA=0;switch(j){

case 0:bright2();break;

case 1:bright1();break;

default:bright3();break;} } //----------------void t0_3(void){ TR0=0;TR1=0;EA=0;switch(j){

case 0:bright3();break;

case 1:bright2();break;

default:bright4();break;} } //----------------void t0_4(void){ TR0=0;TR1=0;EA=0;switch(j){

case 1:bright3();break;

default:bright4();break;} } /**********************************************/ /*功能:灯的四个显示状态***********************/ /**********************************************/ void bright0(void){ LED1=0;LED2=0;LED3=0;LED4=0;i=0;j=0;t=0;k=0;EA=1;}//----------------

void bright1(void){ LED1=0;LED2=0;LED3=0;LED4=0;i=1;j=0;t=0;k=0;LED1=1;EA=1;}

//----------------void bright2(void){ TR0=0;LED1=0;LED2=0;LED3=0;LED4=0;i=2;j=0;t=0;k=0;LED1=1;LED2=1;EA=1;

} //----------------void bright3(void){ LED1=0;LED2=0;LED3=0;LED4=0;i=3;j=0;t=0;k=0;LED1=1;LED2=1;LED3=1;EA=1;}

//----------------void bright4(void){

LED1=0;LED2=0;LED3=0;LED4=0;i=4;j=0;t=0;k=0;LED1=1;LED2=1;LED3=1;LED4=1;EA=1;}

//----------------

《北京交大单片机课程设计声控灯.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
北京交大单片机课程设计声控灯
点击下载文档
相关专题 单片机课程设计声控灯 单片机 交大 北京 单片机课程设计声控灯 单片机 交大 北京
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文