这是一篇 2017–2018 年的嵌入式学习笔记,保留当时的工具、代码和实验过程。 查看系列目录

原图(暂不可用)

蜂鸣器

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
#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char

sbit led = P0^0;
sbit sound = P2^0;
sbit key1 = P3^0;
sbit key2 = P3^2;
sbit key3 = P3^4;

void delay(uint timer)
{
uchar j = 124;
while(timer--)
{
while(j--);
}
}

void speak(uchar timer)
{
uint i =0 ;
uchar j = 0;
for (i=400;i>0;i--)
{
sound = ~ sound;
led = ~ led;
for(j=timer;j>0;j--);
}
led=1;
sound=0;
}

void keyscan()
{ uchar num=0;

if(num != P3)
{
num=P3;
delay(10);
if(num==P3)
{
if(key1==0)
{
speak(80);
}
if(key2==0)
{
speak(160);
}
if(key3==0)
{
speak(240);
}
}
}
}

void main()
{
led=1;
sound=0;
while(1)
{
keyscan();
}
}

version2

显示函数做了略微的修改

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
void keyscan()
{ uchar num=0;

if(num != P3)
{
num=P3;
delay(10);
if(num==P3)
{
if(key1==0)
{
speak(90);
}
if(key2==0)
{
speak(90);
delay(10);
speak(90);
}
if(key3==0)
{
speak(90);
speak(240);
}
}
}
}

定时器模拟门铃

原图(暂不可用)

定时器模拟门铃

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
74
75
76
77
78
79
#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char

sbit led = P0^0;
sbit sound = P2^0;
sbit key1 = P3^0;
uint num;


void delay(uint timer)
{
uchar j = 124;
while(timer--)
{
while(j--);
}
}

void timer1() interrupt 3
{
sound = ~ sound;
led = ~ led;
num++;
if(num<400)
{
TH1=(8192-700)/32;
TL1=(8192-700)%32;
} else if(num<800)
{
TH1=(8192-1000)/32;
TL1=(8192-1000)%32;
} else
{
TR1=0;
num=0;
}


}

void timer1_init()
{
TMOD=0x00;
TH1=(8192-700)/32;
TL1=(8192-700)%32;
ET1=1;
EA=1;
}

void keyscan()
{ uchar key_num=0;
led=1;
if(key_num != P3)
{
key_num=P3;
delay(10);
if(key_num==P3)
{
if(key1==0)
{
TR1=1;
}
}
}
}

void main()
{
num=0;
led=1;
sound=0;
timer1_init();
while(1)
{
keyscan();
}
}