直流电机正反转程序
- 格式:docx
- 大小:14.53 KB
- 文档页数:4
L298N控制直流电机正反转一、概述在现代工业自动化和机械设备中,直流电机因其控制简单、响应迅速等特点而被广泛应用。
直流电机的控制并非一件简单的事情,特别是要实现其正反转功能,就需要一种可靠的电机驱动器。
L298N是一款常用的电机驱动器模块,它基于H桥驱动电路,可以有效地控制直流电机的正反转,并且具备过载保护和使能控制功能,使得电机控制更为安全、可靠。
L298N模块内部集成了两个H桥驱动电路,可以同时驱动两个直流电机,且每个电机的驱动电流可达2A,使得它适用于驱动大多数中小型的直流电机。
L298N模块的控制逻辑简单明了,只需通过控制其输入逻辑电平,即可实现电机的正反转、停止等功能。
掌握L298N 模块的使用方法,对于熟悉和掌握直流电机的控制具有重要的意义。
在接下来的内容中,我们将详细介绍L298N模块的工作原理、控制逻辑、驱动电路连接方法以及在实际应用中的使用技巧,以帮助读者更好地理解和应用L298N模块,实现直流电机的正反转控制。
1. 简述直流电机在工业和生活中的重要性直流电机,作为一种重要的电能转换和传动设备,在工业和生活中发挥着至关重要的作用。
它们广泛应用于各种机械设备中,成为驱动各种工业设备和家用电器运行的核心动力源。
在工业领域,直流电机的重要性无可替代。
它们被广泛应用于各种生产线上的机械设备,如机床、泵、风机、压缩机、传送带等。
这些设备需要稳定、可靠的动力源来驱动,而直流电机正好满足这些需求。
它们具有高效、稳定、易于控制等优点,能够实现精确的速度和位置控制,从而提高生产效率和产品质量。
直流电机还在交通运输领域发挥着重要作用。
例如,电动汽车、电动火车、无人机等新型交通工具都采用了直流电机作为动力源。
这些交通工具需要高效、环保的动力系统来驱动,而直流电机正是满足这些需求的理想选择。
在生活中,直流电机也无处不在。
它们被广泛应用于各种家用电器中,如电扇、吸尘器、洗衣机、冰箱、空调等。
这些家电需要稳定、可靠的动力源来运行,而直流电机正是这些家电的核心动力源。
电机正反转接法电机正反转接法是指在电机运行过程中,通过改变电源电压的极性,实现电机的正反向旋转。
正反转接法是电机控制的一种常用方法,广泛应用于各种电机系统中。
我们来了解一下电机的基本工作原理。
电机是将电能转化为机械能的设备,根据不同的工作原理可以分为直流电机和交流电机两大类。
在正常情况下,电机通过电源供电,根据电压的极性,电机会以一定的方向进行旋转。
而当我们需要改变电机的旋转方向时,就需要采用正反转接法。
正反转接法的基本原理是通过改变电源电压的极性,使电机的旋转方向发生变化。
具体实现方式有两种:一种是通过机械开关切换电源的正负极性,另一种是通过电子元器件实现电源极性的切换。
在第一种方式中,我们可以通过手动切换电源的正负极性来实现电机的正反向旋转。
通常情况下,我们需要通过一个双刀双掷开关来切换电源的极性。
当开关处于一个位置时,电源的正负极性与电机的正常供电方向一致,电机会以正向旋转;而当开关切换到另一个位置时,电源的正负极性与电机的正常供电方向相反,电机会以反向旋转。
通过这种方式,我们可以方便地实现电机的正反向切换。
在第二种方式中,我们可以通过电子元器件来实现电源极性的切换。
常见的实现方式是使用一个双极性电源和一个H桥驱动电路。
H桥电路由四个开关组成,可以控制电源的正负极性。
当我们需要电机正向旋转时,打开其中两个开关,使电源正极连接到电机的正极,电源负极连接到电机的负极;而当我们需要电机反向旋转时,关闭前两个开关,打开另外两个开关,使电源正极连接到电机的负极,电源负极连接到电机的正极。
通过控制这四个开关的状态,我们可以实现电机的正反向切换。
除了上述两种基本方式,还有其他一些特殊的正反转接法。
例如,对于某些特殊类型的电机,可以通过改变电机绕组的接线方式来实现正反向旋转。
这种方式通常用于特定的电机控制系统中,需要根据具体情况进行设计和实现。
总结来说,电机正反转接法是通过改变电源电压的极性,实现电机的正反向旋转。
直流电动机正反转原理
直流电动机正反转原理是通过改变电流的方向和大小来实现的。
直流电动机是由永磁体和电枢组成的,电枢上通过一对刷子与电源相连。
当电源正极的电流进入电枢后,刷子与电枢接触,电流通过电枢产生磁场。
然后,刷子与电源的负极接触,电流改变方向,磁场极性也发生改变。
这样,磁场与永磁体之间会产生作用力,使得电枢开始旋转。
当电枢旋转到一定角度时,刷子与电枢断开,电流中断,电枢将继续以惯性运动。
此时,直流电机进入自动励磁状态,因为电枢的旋转产生的感应电动势会使电流重新流过电枢,重新激励磁场。
然后,刷子再次接触电枢,电流更新,电枢方向发生改变,在感应力的作用下,电枢再次旋转。
为了改变直流电动机的转向,只需改变电流的方向即可。
例如,如果交换电源引线的连接方式,即将正极连接到原先的负极,负极连接到原先的正极,电流的方向就会改变。
这样,电枢的感应力的方向也会改变,使电枢旋转的方向也随之改变。
因此,通过改变电流的方向和大小,可以实现直流电动机的正反转。
直流无刷电机如何控制正反转直流电机具有响应快速、较大的起动转矩、从零转速至额定转速具备可提供额定转矩的性能。
我们知道直流无刷电机在许多场合不但要求电机具有良好的起动和调节特性,而且要求电机能够正反转。
那么如何实现直流无刷电机的正反转?请看下文。
通常采用改变逆变器开关管的逻辑关系,使电枢绕组各相导通顺序变化来实现电机的正反转。
为了使电机正反转均能产生平均电磁转矩以保证对称运行,必须设计转子位置传感器与转子主磁极和定子各相绕组的相互位置关系,以及正确的逻辑关系。
正/反转控制(DIR)通过控制端子“DIR”与端子“COM”的通、断可以控制电机的运转方向。
端子“DIR”内部以电阻上拉到+12,可以配合无源触点开关使用,也可以配合集电极开路的PLC等控制单元;当“DIR”与端子“COM”不接通时电机顺时针方向运行(面对电机轴),反之则逆时针方向运转;为避免直流无刷驱动器的损坏,在改变电机转向时应先使电机停止运动后再操作改变转向,避免在电机运行时进行运转方向控制。
转速信号输出(SPEED)直流无刷驱动器通过端子SPEED~COM为用户提供与电机转速成比例的脉冲信号。
每转脉冲数=6×电机极对数,SPEED频率(Hz)=每转脉冲数×转速(转/分)÷60。
例:4对极电机,每转24个脉冲,当电机转速为500转/分时,端子SPEED的输出频率为200Hz。
直流无刷电机foc控制技术解决方案从能耗角度来看,消费类电子产品和工业设备从传统的AC马达过渡到体积更小、更为高效的BLDC电机具有重大意义,但设计BLDC控制算法的复杂性阻止了工程师们实现这种过渡的积极性。
从手机中的小型振动马达到家用洗衣机和空调中使用的更复杂的马达,马达已成为消费领域中的日常装置。
马达同样也是工业领域中的一个重要组成部分,在很多应用中广泛运用,如驱动风扇、泵等各种机械设备。
这些马达的能量消耗是非常巨大的:研究表明,仅在中国,马达所消耗的能源占工业总能耗的60%至70%,其中风扇和泵所消耗的能源占中国整体功耗的近四分之一。
正反转工作原理
正反转工作原理是指一种机械装置或电气设备通过改变电流方向或机械转动方向来实现不同功能的工作过程。
对于机械装置而言,正反转工作原理通常通过控制电动机的转向来实现。
电动机通常由一个定子和一个转子组成。
当给定子中通电时,它产生一个旋转磁场,这个磁场与转子中的磁场相互作用,从而使转子开始旋转。
通过改变电流的方向,可以改变定子产生的磁场的旋转方向,从而改变转子的旋转方向。
这就实现了正反转的功能。
对于电气设备而言,正反转工作原理通常通过改变电路中的电流方向来实现。
以直流电机为例,正反转工作原理是通过控制电枢和电刷之间的接线位置来实现的。
当电路中的电流方向与电枢的磁场方向一致时,电机正转;当电流方向与电枢的磁场方向相反时,电机反转。
这是因为电流的方向决定了电枢产生的磁场方向,从而影响电机的转动方向。
总的来说,无论是机械装置还是电气设备,正反转工作原理都是通过改变电流或机械转动的方向来实现不同功能的工作过程。
这种工作原理在许多领域都得到广泛应用,如汽车、机械制造、电机驱动等。
它为各种设备提供了灵活性和多样性,使设备能够适应不同的工作需求。
单片机控制的直流电机正反转和加速减速C程序简介本文档旨在向读者介绍如何使用单片机控制直流电机实现正反转和加速减速功能的C程序。
程序实现正反转控制以下是控制直流电机正反转的C程序示例:include <avr/io.h>void motor_forward(){// 设置引脚控制直流电机正转}void motor_reverse(){// 设置引脚控制直流电机反转}int main(){// 初始化单片机引脚设置和其他必要的配置while (1){// 检测是否需要正转或反转,根据需要调用motor_forward()或motor_reverse()函数}return 0;}加速减速控制以下是控制直流电机加速减速的C程序示例:include <avr/io.h>void motor_speed_up(){// 调整引脚控制直流电机的占空比以加速电机转速}void motor_slow_down(){// 调整引脚控制直流电机的占空比以减速电机转速}int main(){// 初始化单片机引脚设置和其他必要的配置while (1){// 检测是否需要加速或减速,根据需要调用motor_speed_up()或motor_slow_down()函数}return 0;}结论通过上述示例程序,我们可以实现通过单片机控制直流电机的正反转和加速减速功能。
读者可以根据实际需求进行相应的参数调整和功能扩展。
请注意,上述示例程序仅为演示目的,具体的引脚配置和控制方式需根据实际硬件和单片机型号进行调整。
12v直流电机正反转控制器工作原理
12V直流电机正反转控制器是一种重要的电路设备,它能够实现电机的正转和反转控制。
下面将详细介绍其工作原理。
该控制器由多个电子元件组成,包括触发器、电阻、电容和继电器等。
当控制器接收到电机正转信号时,触发器工作,通过继电器将正极与电机相连,同时将负极与电机断开。
这样电流就可以流经电机,使其正转。
当控制器接收到电机反转信号时,触发器反转,通过继电器将负极与电机相连,同时将正极与电机断开。
这样电流就可以改变流向,使电机反转。
控制器的工作原理可以简单概括为:接收到正转信号时,使电机正转;接收到反转信号时,使电机反转。
通过不同信号的输入,控制器就能实现电机的正转和反转控制。
值得注意的是,控制器还需要考虑到电机的保护问题。
在正转和反转过程中,控制器需要监测电机的电流和温度等参数,以避免电机过载或过热。
当电机超过设定的安全范围时,控制器会自动切断电源,以确保电机的安全运行。
总的来说,12V直流电机正反转控制器通过触发器、继电器等元件的协同工作,实现对电机正转和反转的控制。
同时,它还要考虑电机的保护问题,以确保电机的安全运行。
这种控制器在各种电动设
备中得到广泛应用,为我们的生活带来了很大的便利。
直流电机正反转原理一、引言直流电机是一种常见的电动机,广泛应用于各种机械设备中。
正反转是直流电机的基本功能之一,它能够使电机在不同方向上旋转,从而实现不同的工作目的。
本文将详细介绍直流电机正反转的原理。
二、直流电机结构直流电机由定子和转子两部分组成。
定子通常由铁芯和绕组组成,铁芯上有若干个槽,绕组就绕在这些槽里面。
转子由磁芯和永磁体或者电枢组成。
当通以直流电源时,定子绕组中会产生磁场,而转子上的永磁体或者电枢会受到这个磁场的作用而旋转。
三、正反转原理1. 磁场方向改变直流电机正反转的关键在于改变磁场方向。
当通以正向电流时,定子绕组产生一个顺时针方向的磁场,而当通以反向电流时,则产生一个逆时针方向的磁场。
因此,要实现正反转功能,只需要改变通入定子绕组中的电流方向即可。
2. 交换电极连接改变电流方向的方法有很多种,其中一种比较简单的方法是交换电极连接。
当电源正极与定子绕组的一端相连时,就会产生一个顺时针方向的磁场,而当电源正极与定子绕组的另一端相连时,则会产生一个逆时针方向的磁场。
因此,只需要交换电极连接即可实现正反转功能。
3. 使用切换器除了交换电极连接之外,还可以使用切换器来改变电流方向。
切换器通常由多个开关组成,每个开关都可以控制一段绕组是否通电。
当需要正转时,只需要让某些开关通电,而让其他开关断电;当需要反转时,则反过来控制这些开关即可。
四、实现方法1. 交换电极连接交换电极连接是最简单也是最常见的实现方法之一。
通常情况下,直流电机有两个接线端子,一个是正极,另一个是负极。
只需要将这两个接线端子互相交换即可实现正反转功能。
2. 使用切换器使用切换器可以实现更加灵活、精确的控制。
通常情况下,切换器由多个开关组成,每个开关可以控制一段绕组是否通电。
当需要正转时,只需要让某些开关通电,而让其他开关断电;当需要反转时,则反过来控制这些开关即可。
3. 使用直流电机控制器直流电机控制器是一种专门用于控制直流电机的设备。
直流正反转限位接线方法引言直流电机广泛应用于工业控制系统中,其中一个重要的操作是实现正反转功能。
为了确保电机在正反转过程中的安全和可靠性,需要正确接线并设置限位开关。
本文将介绍直流电机的正反转限位接线方法,包括接线原理、接线步骤和注意事项。
接线原理直流电机的正反转是通过改变电机两个输入端的极性来实现的。
通常情况下,电机的两个输入端分别与一个双刀双掷开关(DPDT)和两个限位开关相连。
当DPDT开关处于一个位置时,电机正转;当DPDT开关处于另一个位置时,电机反转。
限位开关则用于检测电机是否达到预定位置,并在达到位置时切断电源。
接线步骤以下是直流电机正反转限位接线的步骤:1.准备材料:一台直流电机、一个DPDT开关、两个限位开关、导线等。
2.确定接线位置:根据实际情况确定DPDT开关和限位开关的安装位置,并将它们固定在合适的位置上。
3.连接DPDT开关:将DPDT开关的中间两个接线端分别与电机的两个输入端相连。
将DPDT开关的左右两个接线端分别与电源正负极相连。
4.连接限位开关:将一个限位开关的一个接线端与电机正转方向相关联,另一个限位开关的一个接线端与电机反转方向相关联。
将这两个限位开关的另一个接线端分别连接到控制系统中。
5.检查接线:检查所有连接是否牢固,并确保没有短路或断路现象。
6.测试功能:通过操作DPDT开关和触发限位开关来测试正反转和限位功能是否正常。
注意事项在进行直流电机正反转限位接线时,需要注意以下几点:1.安全性:在进行任何电气工作之前,确保断开电源并采取适当的安全措施,以避免触电等事故发生。
2.接线正确性:请仔细阅读电路图或相关文档,确保正确连接所有组件,并遵循正确的极性规定。
3.限位开关位置:选择合适的位置安装限位开关,以确保能够准确检测到预定位置并切断电源。
4.导线选择:选择合适规格和长度的导线,并确保导线质量良好,以确保电流传输的可靠性和稳定性。
5.电气绝缘:在进行接线时,确保所有电气部件之间有足够的绝缘,以防止短路和其他电气故障。
电机正反转简单程序电机正反转是一个非常重要的控制技术,在很多领域都得到广泛应用。
下面我来分享一下电机正反转的简单程序。
首先,我们需要确定你使用的是什么类型的电机。
如果是直流电机,就可以采用下面这个程序:void setup() {pinMode(9, OUTPUT); //引脚9连接电机}void loop() {digitalWrite(9, HIGH); //正转delay(5000); //持续5秒digitalWrite(9, LOW); //停止delay(1000); //等待1秒digitalWrite(9, LOW); //反转delay(5000); //持续5秒digitalWrite(9, LOW); //停止delay(1000); //等待1秒}如果是交流电机,就需要使用一个电机驱动模块,如L298N模块。
下面是一个交流电机正反转的简单程序:void setup() {pinMode(9, OUTPUT); //IN1pinMode(10, OUTPUT); //IN2pinMode(11, OUTPUT); //使能引脚}void loop() {digitalWrite(11, HIGH); //使能digitalWrite(9, HIGH); //正转digitalWrite(10, LOW); //正转delay(5000); //持续5秒digitalWrite(9, LOW); //停止digitalWrite(10, LOW); //停止delay(1000); //等待1秒digitalWrite(9, LOW); //反转digitalWrite(10, HIGH); //反转delay(5000); //持续5秒digitalWrite(9, LOW); //停止digitalWrite(10, LOW); //停止delay(1000); //等待1秒}以上程序只是给出了一个简单的示例,实际应用中还需要根据电机的特定要求来进行修改。
ULN2003直流电机正转以及10级PWM调速功能说明本设计是基于STC89C52单片机和ULN2003芯片驱动的直流电机。
并在数码管显示当前速度级数。
具有正传和PWM10级调速等功能。
速度的控制是由PWM输入信号来完成的。
通过调节pwm信号的占空比来完成速度的控制。
(1)通过52单片机加载程序,ULN2003做驱动控制直流电机旋转。
(2)用按键增加或者减小当前的旋转速度,可以控制10级变速。
(3)用数码管显示当前旋转的速度级数。
一、原理图(1)最小系统(2)驱动芯片二、源程序代码#include<reg52.h>#define uint unsigned intuint pp;char num=2,dis;sbit pwm=P3^6;sbit s2=P3^4;sbit s3=P3^5;sbit dula=P2^0; //段选信号的锁存器控制sbit wela=P2^1; //位选信号的锁存器控制sbit cs88=P2^2; //点阵管的锁存器控制cs88=0;//关点阵管sbit LCD1602=P2^5; //定义LCD1602使能端,用于HJ-C52实验板复位,与本实验无关sbit DS1302=P2^7; //定义DS1302时钟使能端,用于HJ-C52实验板复位,与本实验无关sbit SD=P2^6; //定义SD卡使能端,用于HJ-C52实验板复位,与本实验无关void cmg88()//关数码管,点阵函数cmg88();//关数码管,点阵函数{dula=1;P0=0x00;dula=0;cs88=0x00;P0=0x00;cs88=1;}unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};void keyscan(){if(s2==0){while(!s2);num++;if(num==11)num=10;dis=num;}if(s3==0){while(!s3);num--;if(num==-1)num=0;dis=num; }}void display(a) {dula=0;P0=table[a];dula=1;dula=0;wela=0;P0=0xfe;wela=1;wela=0;}void main(){TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。
直流电机正反转控制的原理
直流电机是应用广泛的一种机械控制元件,主要用于控制机械设备的运动和位置。
直流电机的正反转控制是一个重要的技术。
本文将介绍直流电机正反转控制的原理,主要分为三部分:原理介绍、正反转控制方式及其应用。
一、原理介绍
直流电机的正反转控制主要是利用控制电路来控制。
直流电机的核心是磁铁,具有定向性,当磁铁将相应的电流通过电路,会形成磁场,磁场的强度和方向可以影响电机的旋转方向。
当电流的方向反向时,磁场也会变化,导致电机的正反转。
二、正反转控制方式
1.接控制方式:通过控制电路直接控制直流电机的正反转。
一般情况下,可以采用开关继电器的控制方式,即将接线方式改变,从而实现电机的正反转控制。
2.频器控制方式:采用变频器作为控制元件,改变电机的转速,实现电机的正反转控制。
可以根据需要调节电机的转速,使电机达到预期的旋转方向。
三、应用
直流电机正反转控制广泛应用于水泵、风机、发电机组、卷扬机械等机械设备的控制,在工业系统中具有重要的地位。
总之,直流电机的正反转控制是通过改变控制电路的方式,来实现。
它的优点是可以通过直接控制或变频器控制,采用不同的控制模
式,从而实现电机的正反转控制。
广泛应用于各种机械设备控制,在工业系统中起着重要的作用。
低压电工证考试电机正反转接线方法
电机正反转接线方法主要分为直流电机和交流电机:
1. 直流电机:正反转的控制可以通过改变电极的极性来实现。
一般来说,只需要控制电机的两个电极的接线即可。
如果想让电机正转,将电源的正极接到电机的正极,负极接到电机的负极。
如果想让电机反转,将电源的正极接到电机的负极,负极接到电机的正极。
2. 交流电机:一般需要通过控制电机的线圈相位来实现正反转。
在单相交流电机中,通常可以通过改变启动电容器和运行电容器的接线顺序来实现正反转。
具体来说,将电容器的两个端子连接到电机的两个线圈,然后将电容器的端子交换位置即可实现正反转。
建议咨询专业人士获取更准确的信息。
电机正反转的原理及应用1. 前言电机是日常生活中常见的一种设备,它有着广泛的应用领域,包括工业生产、家用电器、交通工具等。
电机的正反转功能是电机的核心之一,具有重要的作用。
本文将介绍电机正反转的原理以及其在实际应用中的具体应用案例。
2. 电机正反转的原理电机的正反转是通过改变电流的方向或者改变线圈的连接方式来实现的。
以下是一些常见的电机正反转控制方法:2.1 直流电机正反转控制直流电机的正反转可以通过改变直流电源的极性来实现。
当直流电源的正负极连接到电机的正负极时,电机会以一个方向旋转。
当改变电源连接方式后,电机的旋转方向也会相应改变。
2.2 交流电动机正反转控制交流电动机的正反转可以通过改变电动机的供电相序来实现。
电动机的供电相序可以通过电动机控制器或者控制电路来调节,从而改变电机的旋转方向。
2.3 步进电机正反转控制步进电机的正反转可以通过改变电流的相序控制来实现。
步进电机通常有两相或四相,通过改变电流的相位差或者改变电流的方向来控制电机的正反转。
3. 电机正反转的应用案例电机的正反转功能在各个领域都有着广泛的应用。
以下是一些常见的电机正反转应用案例:3.1 电动工具电动工具中常常使用电机正反转功能,比如电钻、电动螺丝刀等。
通过控制电机的旋转方向,电动工具可以实现两种不同的操作模式,提高工作效率。
3.2 电梯电梯正反转控制是电梯系统中的重要部分。
通过改变电梯电机的旋转方向,可以控制电梯的运行方向,实现楼层的上升和下降。
3.3 机械臂机械臂是工业自动化领域常见的设备,电机正反转功能可以用来控制机械臂的运动方向。
通过精确的控制电机的正反转,可以实现机械臂的准确定位和精确操作。
3.4 交通工具交通工具中的电机正反转控制广泛应用于电动车辆和电动机车。
通过改变电机的旋转方向,可以实现车辆的前进和倒退,提供灵活的操控方式。
4. 结论电机的正反转功能是电机的重要特性之一,在各个领域中都有着广泛的应用。
通过改变电流的方向或者改变线圈的连接方式,可以实现电机的正反转控制。
(1)主程序main.c#include<reg51.h>#include"ds1302.h"sbit Xianwei1=P1^0;sbit Xianwei2=P1^1;sbitMotor_A=P1^2;sbitMotor_B=P1^3;sbitMotor_EN=P1^4;unsigned char Num=0;unsigned intdisp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};/*//---存储顺序是秒分时日月周年,存储格式是用BCD码---//uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};*/void main(){uchar state=0;Motor_A=1;Motor_B=1;Motor_EN=0;Ds1302Init();while(1){Ds1302ReadTime();if((TIME[2]==0x06)&&(TIME[1])==0) //06:00{state++;if(state>2)state=1;}if(state==1){while(Xianwei1!=0){Motor_A=1; //正转Motor_B=0;Motor_EN=1;}}if(state==2){while(Xianwei2!=0){Motor_A=0; //反转Motor_B=1;Motor_EN=1;}}}}(2)ds1302.h#ifndef __DS1302_H_#define __DS1302_H_//---包含头文件---//#include<reg51.h>#include<intrins.h>//---重定义关键词---//#ifndefuchar#define uchar unsigned char#endif#ifndefuint#define uint unsigned int#endif//---定义ds1302使用的IO口---//sbit DSIO=P3^4;sbit RST=P3^5;sbit SCLK=P3^6;//---定义全局函数---//void Ds1302Write(ucharaddr, uchardat); uchar Ds1302Read(ucharaddr);void Ds1302Init();void Ds1302ReadTime();//---加入全局变量--//extern uchar TIME[7]; //加入全局变量(3)ds1302.c#include"ds1302.h"//---DS1302写入和读取时分秒的地址命令---////---秒分时日月周年最低位读写位;-------//uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};//---DS1302时钟初始化2013年1月1日星期二12点00分00秒。
#include <reg51.h>
#include"lcd.h"
#include <intrins.h>
#define uint unsigned int
unsigned char Key_Scan();
#define GPIO_LED P3 //led使用P3口
//--定义全局变量--//
unsigned char PuZh1[]="status: foreward"; //正转unsigned char PuZh2[]="status:inversion"; //反转unsigned char PuZh3[]=" stop "; unsigned char PuZh4[]="";
sbit a=P1^0;
sbit c=P1^1;
sbit d=P1^2;
sbit e=P1^3;
sbit K1=P1^5;
sbit K2=P1^7;
sbit K3=P1^6;
void Delay10ms(unsigned int c); //延时10ms
void motorzheng(void)//正转
{
a=0;
c=1;
d=1;
e=0;
Delay10ms(100);
}
void motorting(void)//电机停止
{
a=0;
c=0;
d=0;
e=0;
Delay10ms(100);
}
void motorfan(void)//反转
{
a=1;
c=0;
d=0;
e=1;
Delay10ms(100);
}
void main()
{
while(1)
{
unsigned char ledValue, keyNum,i;
keyNum = Key_Scan(); //扫描键盘
if(keyNum==1)
{ LcdInit(); //初始化显示屏
for(i=0;i<16;i++)
{ LcdWriteCom(0x80+i);
LcdWriteData(PuZh1[i]);
LcdWriteCom(0x80+0X40+i);
LcdWriteData(PuZh4[i]);
} //lcd显示正转
GPIO_LED = ledValue;
motorzheng();
}
if(keyNum==2)
{ LcdInit(); //初始化显示屏
for(i=0;i<16;i++)
{ LcdWriteCom(0x80+i);
LcdWriteData(PuZh2[i]);
LcdWriteCom(0x80+0X40+i);
LcdWriteData(PuZh4[i]);
} //lcd显示反转
GPIO_LED = ledValue;
motorfan();
}
if(keyNum==3)
{ LcdInit(); //初始化显示屏
for(i=0;i<16;i++)
{ LcdWriteCom(0x80+i);
LcdWriteData(PuZh3[i]);
LcdWriteCom(0x80+0X40+i);
LcdWriteData(PuZh4[i]);
}
GPIO_LED = ledValue;
motorting();
}
}
}
unsigned char Key_Scan()
{
unsigned char keyValue = 0 , i; //保存键值
//--检测按键1--//
if (K1==0) //检测按键K1是否按下
{
Delay10ms(1); //消除抖动
if (K1==0) //再次检测按键是否按下
{
keyValue = 1;
i = 0;
while ((i<10) && (K1==0)) //检测按键是否松开
{
Delay10ms(1);
i++;
}
}
}
if (K3==0) //检测按键K1是否按下
{
Delay10ms(1); //消除抖动
if (K3==0) //再次检测按键是否按下
{
keyValue = 3;
i = 0;
while ((i<10) && (K1==0)) //检测按键是否松开
{
Delay10ms(1);
i++;
}
}
}
//--检测按键2--//
if (K2==0) //检测按键K2是否按下
{
Delay10ms(1); //消除抖动
if (K2==0) //再次检测按键是否按下
{
keyValue = 2;
i = 0;
while ((i<10) && (K2==0)) //检测按键是否松开
{
Delay10ms(1);
i++;
}
}
}
return keyValue; //将读取到键值的值返回
}
void Delay10ms(unsigned int c) //延时
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
} } }。