最新51单片机课程设计声控灯Word下载.docx

上传人:b****4 文档编号:6502317 上传时间:2023-05-06 格式:DOCX 页数:10 大小:1.42MB
下载 相关 举报
最新51单片机课程设计声控灯Word下载.docx_第1页
第1页 / 共10页
最新51单片机课程设计声控灯Word下载.docx_第2页
第2页 / 共10页
最新51单片机课程设计声控灯Word下载.docx_第3页
第3页 / 共10页
最新51单片机课程设计声控灯Word下载.docx_第4页
第4页 / 共10页
最新51单片机课程设计声控灯Word下载.docx_第5页
第5页 / 共10页
最新51单片机课程设计声控灯Word下载.docx_第6页
第6页 / 共10页
最新51单片机课程设计声控灯Word下载.docx_第7页
第7页 / 共10页
最新51单片机课程设计声控灯Word下载.docx_第8页
第8页 / 共10页
最新51单片机课程设计声控灯Word下载.docx_第9页
第9页 / 共10页
最新51单片机课程设计声控灯Word下载.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

最新51单片机课程设计声控灯Word下载.docx

《最新51单片机课程设计声控灯Word下载.docx》由会员分享,可在线阅读,更多相关《最新51单片机课程设计声控灯Word下载.docx(10页珍藏版)》请在冰点文库上搜索。

最新51单片机课程设计声控灯Word下载.docx

A.使用单片机实现声控灯B.当说话声音大于一定程度时,发光二极管显示,延时大于1秒

二、设计框图

1、硬件框图

三、方案设计

如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;

相反,如果要接在P1。

0口的LED1熄灭,就要把P1。

0口的电平变为高电平;

同理,接在P1。

1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1.因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。

在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了.

四、硬件原图设计

五、程序流程图

六、仿真图

仿真结果如下:

当S2关闭

当S3关闭

七、制作

八、调试

 流水灯制作完成后,我们对它进行了调试,一开始灯不停地闪,无法接受到声音信号。

后来,我们对PCB进行了检查,发现有放大电路的集电极连接线断路了,导致声音信号没法被芯片接收到。

我们迅速的电路进行了修复。

修复后,电路能够顺利的进行工作了。

 

九、心得体会

回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功。

在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。

比如在调试的时候,程序老是不稳定中断服务程序有时执行一次,有时又执行两次,开始我以为是板子受环境影响。

后来在网上XX才知道是软件问题,是我忘了在执行中断服务程序时候把相应的中断关了,导致在执行中断服务程序时易受影响执行两次或两次以上。

在这个发现问题之后,我在中断服务程序中关了相应的外中断之后.问题就解决了,下载程序到板子之后,运行就正常了。

此次课程设计让我明白了,想要把所学的东西应用于实践一定要有扎实的基本功,理论和实践是有很大的差别的。

十、源程序

#include<

reg51.h〉

typedefunsigned charuchar;

typedefunsigned int uint;

#defineledP1//流水灯控制

sbitvoice=P2^4;

//声音输入ﻩ11011011

ucharcodetab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//上到下

ucharcodetab2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

//下到上

ucharcodetab3[]={0xe7,0xdb,0xbd,0x7e};

//中间到两边

ucharcodetab4[]={0x7e,0xbd,0xdb,0xe7};

//两边到中间

uchar he[4]={0,0,0,0};

ucharnum=0;

ucharcounter=0;

//定时计数

ucharcounter1=0;

bit flag=0;

//切换闪烁

bitflag1=0;

void delay1m(uintx)

{

uinti,j;

 for(i=0;

i〈x;

i++)  //连数x次,约xms

 for(j=0;

j<

120;

j++);

//数120次,约1ms

}

voidtime0_time1_init()

ﻩTMOD=0x11;

ﻩTH1=(65535—50000)/256;

TL1=(65535-50000)%256;

ﻩTH0=(65535—50000)/256;

TL0=(65535-50000)%256;

ﻩTR0=0;

ET1=ET0=TR1=EA=1;

voidmain()

time0_time1_init();

delay1m(2000);

while

(1)

ﻩif(!

flag1)

{

ﻩﻩﻩif(!

voice)

ﻩﻩ{

ﻩﻩﻩnum++;

flag1=1;

he[0]=he[1]=he[2]=he[3]=0;

ﻩﻩif(num>

=5){num=0;

ﻩﻩTR0=1;

}

}

void time1_interrupt()interrupt 3

TH1=(65535—50000)/256;

TL1=(65535—50000)%256;

ﻩcounter++;

ﻩif(counter>

=6)

ﻩcounter=0;

ﻩswitch(num)

ﻩ{

ﻩﻩﻩcase0:

if(flag==0){led=0x00;

flag=1;

}else{led=0xff;

flag=0;

}break;

//闪烁

ﻩﻩﻩcase1:

led=tab1[he[0]];

he[0]++;

if(he[0]>=8)he[0]=0;

break;

//上到下

ﻩﻩcase2:

led=tab2[he[1]];

he[1]++;

if(he[1]〉=8)he[1]=0;

break;

//下到上

ﻩﻩcase3:

led=tab3[he[2]];

he[2]++;

if(he[2]>=4)he[2]=0;

break;

//中间到两边

case4:

led=tab4[he[3]];

he[3]++;

if(he[3]>

=4)he[3]=0;

break;

ﻩdefault:

break;

ﻩ}

ﻩ}

void time0_interrupt()interrupt 1

TH0=(65535—50000)/256;

TL0=(65535-50000)%256;

counter1++;

ﻩif(counter1〉=20)//1s后再检测

{

ﻩcounter1=0;

flag1=0;

ﻩTR0=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2