0%

传感器实验报告(第三次)

7.1蜂鸣器控制实验

一、实验目的

1.掌握蜂鸣器的控制原理。
2.掌握蜂鸣器的控制程序的编程方法。

二、实验内容

1.在IAR集成开发环境中编写蜂鸣器的控制程序。

三、基础知识

本系统采用的是有源压电式蜂鸣器。
a.“有源”指的是蜂鸣器本身内含驱动了,直接给它一定的电压就了一响,相对的是“无源”是需要靠外部的驱动才可以驱动。
b.压电式是指以压电式陶瓷的压电效应,来带动金属片的振动而发声。
c.这里写图片描述
由P0.7输出高电平时,三极管Q1导通,蜂鸣器上电而鸣叫;反之三极管截至,蜂鸣器停止鸣叫。

四、实验代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "ioCC2530.h"      // 申明该文件中用到的头文件
unsigned char pluse_table_1[] =
{
0x05, 0x09, 0x0a, 0x06,
};
void delay(void);

void main( void )
{
P0DIR = (0x01<<0)|(0x01<<7); //P0.0,P0.7为输出方式
P2DIR |= 0x01; // 设置P2.0为输出方式

while(1)
{
P0_7 = 1;//打开蜂鸣器
P0_0 = 0;//LED点亮
P2_0 = 0;//LED点亮
delay();
P0_7 = 0;//关闭蜂鸣器
P0_0 = 1;//LED熄灭
P2_0 = 1;//LED熄灭
delay();
}
} // end of main()


void delay(void) //延时时间约400ms
{
unsigned int i;
unsigned char j;

for(i=0;i<5000;i++)
{
for(j=0;j<200;j++)
{
asm("NOP");
asm("NOP");
asm("NOP");
}
}
}
// the end

五、实验现象

烧写程序后,复位。可看到蜂鸣器周期性的鸣叫与停止,鸣叫的时间与停止的时间相同。鸣叫的同时,LED灯亮;不叫时则熄灭。可通过修改delay函数控制蜂鸣器鸣叫时长。


7.2矩阵LED控制实验

一、实验目的

1.掌握矩阵LED的控制原理。
2.掌握矩阵LED的控制程序的编程方法。

二、实验内容

1.在IAR集成开发环境中编写矩阵LED的控制程序。

三、基础知识

本系统采用的是8*8的矩阵LED。它是有8行8列共64个发光二极管组成的LED矩阵。每个LED有两个控制信号,即行信号与列型号;仅当行信号为1,列型号为0 时,该LED才能发光。

四、实验代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "ioCC2530.h"      // 申明该文件中用到的头文件
unsigned char pluse_table_1[] =
{
0x05, 0x09, 0x0a, 0x06,
};
void delay(void);

void main( void )
{
unsigned char i;
P0DIR = (0x01<<0)|(0x01<<4)|(0x01<<5)|(0x01<<6)|(0x01<<7); // 设置P0.0,P0.4,P0.5,P0.6,P0.7为输出方式
P1DIR = 0xff; // 设置P1为输出方式
P2DIR |= 0x01; // 设置P2.0为输出方式
P0_7 = 0;//关闭蜂鸣器
while(1)
{
//全灭
P0 |= (0x1 << 6);
P1 = 0x0;
P0 &= ~(0x1 << 6);
delay();

//逐行显示
for(i=0;i<8;i++){
P0 |= (0x1 << 6);
P1 = 0xff;
P0 &= ~(0x1 << 6);

P0 |= (0x1 << 5);
P1 = ~(0x01<<i);
P0 &= ~(0x1 << 5);
delay();
}
//逐列显示
for(i=0;i<8;i++){
P0 |= (0x1 << 6);
P1 = (0x01<<i);
P0 &= ~(0x1 << 6);

P0 |= (0x1 << 5);
P1 = 0x0;
P0 &= ~(0x1 << 5);
delay();
}
//全亮
P0 |= (0x1 << 6);
P1 = 0xff;
P0 &= ~(0x1 << 6);

P0 |= (0x1 << 5);
P1 = 0x0;
P0 &= ~(0x1 << 5);
delay();
}
} // end of main()


void delay(void) //延时时间约400ms
{
unsigned int i;
unsigned char j;

for(i=0;i<2000;i++)
{
for(j=0;j<200;j++)
{
asm("NOP");
asm("NOP");
asm("NOP");
}
}
}
// the end

五、实验现象

 烧写程序后,复位。可看到一些四种现象,全灭,按行点亮,按列点亮,全亮。四种现象依次循环执行。
 在按行显示时,每一列使能信号均为0,即此时若有行信号1,则这一行的全亮。若更改语句P1 = 0xff;则可使得在行信号为1时,某些列由于缺少使能信号0,因此不满足LED点亮条件,从而不能点亮,即这一列仅有部分LED点亮。


7.3步进电机控制实验

一、实验目的

1.掌握步进电机的控制原理。
2.掌握步进电机的控制程序的编程方法。

二、实验内容

1.在IAR集成开发环境中编写矩阵LED的控制程序。

三、基础知识

a.步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件。在非超载情况下,电机的转速、停止只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,给一个脉冲,电机相应转过一个步距角,这之间存在线性关系。同时,步进电机只有周期性的误差而无累积误差。
b.本系统采用的步进电机为四相式步进机,但工作模式为两相四拍。有两种工作模式:半步模式和整部模式。

四、实验代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "ioCC2530.h"      // 申明该文件中用到的头文件
unsigned char pluse_table_1[] =
{
0x05, 0x09, 0x0a, 0x06,
};
void delay(void);

void main( void )
{
unsigned char i;
P0DIR = 0xf1; // 设置P0.0,P0.4,P0.5,P0.6,P0.7为输出方式
P1DIR = 0xf1; // 设置P1.0,P1.4,P1.5,P1.6,P1.7为输出方式
P2DIR |= 0x01; // 设置P2.0为输出方式

P0_6 = 0;//停止直流电机
while(1)
{
for(i=0;i<4;i++){
P1 = (pluse_table_1[i]<<4);
delay(); //延时
}
P0_0 = ~P0_0; // 反转LED
P2_0 = ~P2_0;
}
} // end of main()


void delay(void) //延时时间约400ms
{
unsigned int i;
unsigned char j;

for(i=0;i<500;i++)
{
for(j=0;j<200;j++)
{
asm("NOP");
asm("NOP");
asm("NOP");
}
}
}
// the end

五、实验现象

烧写程序后,复位。可看到步进电机每隔一定时间转动一个固定的角度。可通过更改函数delay来控制间隔时间。可通过更改语句 P1 = (pluse_table_1[i]<<4);来更改转动的角度。

原文链接:本人CSDN博客