51单片机通过按键简单控制直流电机正反转程序(Proteus仿真)

51单片机通过按键简单控制直流电机正反转程序(Proteus仿真)


在这里插入图片描述

  • Proteus仿真
  • AT89C52motor
  • 器件
    在这里插入图片描述
    在这里插入图片描述
  • 原理图搭建
    在这里插入图片描述

实例代码

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
直流电机正、反转控制
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
#include <REGX52.H>

sbit led_n=P0^0;
sbit led_r=P0^1;
sbit led_s=P0^2;

sbit ZZ=P2^0;
sbit FZ=P2^1;
sbit TZ=P2^2;

sbit IN1=P1^0;
sbit IN2=P1^1;
sbit ENA=P1^2;

int count=0;
void T0\_isr() interrupt 1 using 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
count++;
if(count<3)
{
ENA=0;
}
else
{
ENA=1;
}
if(count>=10)
{
count=0;
}

}
void delayms(unsigned char xms)
{
unsigned char i,j;
for(i=xms; i>0; i--)
for(j-110; j>0; j--);
}
void keyscan()
{
if(ZZ==0)
{
delayms(10);
if(ZZ==0)
{

IN1=1;
IN2=0;
led_n=0;
led_r=1;
led_s=1;
}
while(ZZ==0);
}
if(FZ==0)
{
delayms(10);
if(FZ==0)
{

IN1=0;
IN2=1;
}
while(FZ==0);
}
if(TZ==0)
{
delayms(10);
if(TZ==0)
{

IN1=0;
IN2=0;
}
while(TZ==0);
}
}

void main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
IN1=0;
IN2=0;
while(1)
{
keyscan();
}
}