当前位置:文档之家› 单片机原理及应用A实验-流水灯、蜂鸣器、独立按键

单片机原理及应用A实验-流水灯、蜂鸣器、独立按键

单片机原理及应用A实验-流水灯、蜂鸣器、独立按键
单片机原理及应用A实验-流水灯、蜂鸣器、独立按键

流水灯、蜂鸣器、独立按键

一、实验目的

1、学习实验系统的基本操作,了解在实验系统中进行程序设计、仿真和调试的操作方法

和步骤;

2、了解单片机的基本输入、输出功能;

3、熟悉Proteus的基本仿真功能;

二、实验原理

1、LED流水灯的原理即为单个控制LED的亮灭、亮灭,让单个LED灯先亮然后很快灭掉,并在很短的时间里使下一个LED重复这一过程。这样让一排LED灯依次亮灭后即形成流水灯的效果。

2、在本次实验中把蜂鸣器用扬声器替代,通过控制扬声器工作时间来控制扬声器的发音频率。

3、按键是机械装置,在其闭合的时候会产生震荡,这会让软件产生误判。为了消除这种影响,就需要对按键进行软件消抖。消抖原理为两次判断,只要相隔一段时间的两次判断皆为按键已按下,那么这次的判断结果就是可信的,所以用到延时函数。

三、实验步骤

1、硬件仿真。先分析实验所需的硬件条件,然后在Proteus上连接好硬件电路,注意连接好必要的电阻等。

2、软件编写。在Keil或其它的单片机编程软件上用C语言编写出构思好的软件。

3、将程序编译为HEX文件,然后烧录到仿真单片机中,进行仿真。

四、实验结果及分析

1、LED流水灯的硬件仿真电路图:

实验中加入了循环处理,所以该流水灯可以顺着亮一遍再逆着亮一遍,如此反复。并且改变流水灯亮灭的时间间隔还可以得到各种不同的效果。

2、蜂鸣器驱动的硬件仿真电路图:

这里用扬声器代替蜂鸣器。以单片机产生的一方波脉冲作为扬声器的电信号输入,用不同频率的方波信号产生不同音调的声音。

3、;

4、独立按键延时去抖的硬件仿真电路图:

用一个按键控制LED灯的亮灭,在软件中对按键进行消抖。

五、体会

这一次的单片机实验让我感到自己对Proteus的运用还欠缺许多,基本可以说是一窍不通。所以,这次实验以后还要花大量的时间在Proteus的学习上,希望可以从中学习到很多的

东西。还有在编程方面,很多的编程思想都还不成熟,想到的方法都有很多欠缺的地方,和书上所给的例子差距还很大。所以,应该更多的接触编程。现阶段,应多看例题。

六、附件

1、LED流水灯程序

#include <>

void main ()

{ int a;

unsigned long int i;

P1 = 0x00;

while (1)

{

for(a=0;a<=8;a++)

{

P1=~(0x01<

for(i=0;i<10000;i++);

}

#

P1 = 0x00;

for(a=0;a<=8;a++)

{

P1=~(0x80>>a) ;

for(i=0;i<10000;i++);

}

}

}

2、蜂鸣器驱动程序

~

#include<>

int x;

sbit BU = P3^5;

void delay100us (unsigned int uiDly)

{

unsigned char i;

do {

i = 46;

do {

} while (--i != 0);

} while (--uiDly != 0);

}

void main()

{

TMOD = 0x01;

\

EA = 1;

TH0 = 0xb8;

TL0 = 0x00;

TR0 = 1;

ET0 = 1;

x = 1;

while(x)

{

delay100us(5);

BU = ~BU;

}

while(1);

}

void Inter() interrupt 1

{

int cnt;

TH0 = 0xb8;

TL0 = 0x00;

cnt ++;

if(cnt >= 75)

{

x = 0;

}

}

3、独立按键延时去抖程序

#include <>

sbit KEY = P1^0;

sbit LED = P1^3;

(

void delay100us (unsigned int uiDly)

{

unsigned char i;

do {

i = 46;

do {

} while (--i != 0);

%

} while (--uiDly != 0);

}

void main()

{

while(1)

{

KEY = 1;

while(1)

{

{

while(KEY == 1)

{}

delay100us(100);

if(KEY != 1)

break;

}

LED = 0;

while(1)

{

while(KEY == 0)

{}

delay100us(100);

if(KEY != 0)

break;

}

LED = 1;

}

}

相关主题
文本预览
相关文档 最新文档