当前位置:文档之家› 基于51单片机的光电编码器测速报告

基于51单片机的光电编码器测速报告

基于51单片机的光电编码器测速报告
基于51单片机的光电编码器测速报告

基于51单片机的光电编码器测速报告

课程名称:标题:

课程设计报告

|基于51单片机速度测量的199微机原理光电编码器课程设计

在位置控制系统中,电机可以正转或反转,因此为了对与其相连的编码器输出的脉冲进行计数,需要相应的计数器向上或向下计数,即向上或向下计数有许多计数方法,包括纯软件计数和硬件计数。本文分别分析了两种常用的计数方法,并比较了它们的优缺点。最后,提出了一种新的计数方法,利用80C51单片机内部的计数器实现光电编码器输出脉冲的上下可逆计数,节省了硬件资源,获得了较高的计数频率。该设计以STC89C52RC芯片、光电编码器和1602液晶为核心,辅以必要的电路,构成了基于51单片机的光电编码器转速表该系统

有两个控制键,分别用于控制每秒和每分钟的转速,并用1602液晶显示速度。速度计测速准确,具有实时检测功能,操作简单。关键词:光电编码器,51单片机,C语言,1602液晶显示器

2

目录

1,设计任务和要求 (4)

1.1设计任务.................................................................................................................

4 1.2设计要求 (4)

2、方案的总体设计是 (5)

2.1方案

一 (5)

2.2方案二。.............................................................................................................. ...5 2.3系统采用方案.. (5)

3,硬件设

计 (7)

3.1单片机最小系统....................................................................................................7 3.2液晶模块..................................................................................................7 3.3系统电源.................................................................................................................. ..8 3.4光电编码器电路..........................................................................................................8 3.5整体电路. (9)

4,软件设计 (10)

4.1 keil软件推出 (10)

4.2系统程序流程..................................................................................................................

10

5,仿真与实现 (12)

5.1 proteus软件推出 (12)

5.2模拟过

程.................................................................................................................. ...12 5.3物理生产和调试........................................................................................................13 5.4使用说明.. (14)

6,总结.................................................................................................................

15

6.1设计总结 (15)

6.2经验总结 (1)

5

7,参考文献 (16)

3

1、设计任务和要求

1.1设计任务

1)。了解更多小型设备

2)。巩固51单片机和c语言知识,熟悉单片机和c语言的实际操作和应用3)。掌握仿真软件的应用并绘制原理图4)。加深焊接技能。

提高焊接能力

5)。熟悉调试方法和技巧。提高解决实际问题的能力。熟悉设计报告

1.2设计要求

1)的编写过程。两个键控制每分钟和每秒钟显示的功能2)。74LS 74辅助光电编码器进行转向测量3)。光电编码器输出脉冲计数4),1602液晶速度

4

2。总体设计方案

a光电编码器是基于51单片机设计的测速方案设计实现光电编码器测量的电路;利用单片机内部精密至精密的定时计数器实现一个周期时间计数脉冲数;74LS74作为辅助芯片,完善了光电编码器在转向测量中的功能。P0和P2端口控制1602液晶显示器的旋转速度;用P1 和P1 实现液晶显示器每秒和每分钟转速的功能;复位按钮功能用于实现复位操作。调节蓝白色滑动变阻器来调节液晶的亮度。

2.1方案

51单芯片时序/计数器是一个8位时序/计数器,在模式2下工作时可以自动重新加载工作时,高八位和低八位加载相同的初始值。当低八位满时,高八位自动加载到第八位,这样可以省略用户软件中重新加载初始值常量的语句,并且可以产生相当精确的计时时间。由于只有8位参与计数,计数周期最多为256微秒。使用初始值加载0x38,

每200微秒进入一个中断,5000个中断为100毫秒,即实现1秒脉冲计数光电编码器的a连接到单片机的外部,光电编码器的b连接到单片机的P1 来自a相的脉冲在每次触发中断时计数一个脉冲,然后检测P1 .的高电平和低电平如果它是高水平,它将被倒置,如果它是低水平,它将被向前旋转。两个反相器用作放大两个三极管作为开关连接,形成DC电机驱动电路。P1 和P1 分别控制每分钟和每秒钟液晶显示器的旋转速度P2端口控制1602液晶的数据端口,P0的三个引脚控制1602液晶的数据/命令选择端、读/写选择端和使能端的显示速度

2.2方案2

51微控制器的时序/计数器在模式0下工作时为16位时序/计数器工作时,高八位和低八位分别加载初始值。当低八位满时,高八位加1由于16位参与计数,其计数周期最多为65536微秒0xfc加载8位高初始值,0x18加载8位低初始值。每1000微秒进入一个中断,1000个中断是1秒,这形成了1秒周期的脉冲计数。在该方案中,74LS74芯片外部连接到方案1。光电编码器的a连接到单片机的引脚P3 ,单片机的计数器1用于脉冲计数,也连接到74LS74的时钟信号接口。光电编码器的b接74LS74的D接口。q端接在P3 引脚,q端接在P3 引脚两个外部中断用于判断正旋转和负旋转P1 和P1 分别控制每分钟和每秒钟液晶显示器的旋转速度P2端口控制1602液晶的数据端口,P0的三个引脚控制1602液晶的数据/命令选择端、读/写选择端和使能端的显示速度

2.3系统采用方案

1)总体设计

图1是该设计的总体框图,通过该图大致介绍了整个光电编码器测速系统的主要部分。

5

图1系统一般框架

2)一般工作原理

由于定时器工作模式2是8位,所以可以加载的值太小。对于脉冲统计的每个周期,需要输入5000个定时器中断。由于输入中断的次数太多,当较低的8位已满且程序仍在中断子程序中运行且无法触发中断时,很容易发生这种情况。因此,不采用工作模式2工作模式0只需输入定时中断1000次,就可以进行一个周期的脉冲统计,因此选择功能模式0在方案1中,虽然电路简单,但纯软件计数速度慢,难以满足实时性要求,容易出错。我们可以用单片机内部的计数器来上下计数。芯片中有两个16位定时计数器,可用于计数脉冲。两个外部中断用于检测正旋转和负旋转,从而避免了对每个脉冲进行高低电平检测的步骤。控制键、液晶和复位的设计与方案1和方案2相同。总而言之,最终计划被确定为计划2。

6

3,硬件设计

3.1单片机最小系统

单片机要正常工作,首先要产生片上时钟信号在单片机中,振荡器的输入端XTAL1和输出端XTAL2之间连接一个应时晶体振荡器,可以构成自激振荡器电容器串联在两端之间,并在两个电容器之间接地,以稳定频率并微调振荡频率。电容通常约为30PF,振荡脉冲频率范围为0-24兆赫该电路选用12兆赫晶体振荡器时钟电路图如下:

图2

单片机的时钟电路图,像其它微处理器一样,应该使CPU和系统部件处于一定的初始状态,并从头开始工作。这需要复位操作复位电路有两种模式:上电自动复位和按键自动复位。上电自动复位仅在电源开始接通时复位,然后需要断电重启才能再次复位,不方便。按键自动复位不仅可以在电源打开时复位,也可以在任何时候通过按键复位。因此,选择了按键复位模式复位电路如下:

图3复位电路图

3.2液晶模块

该可调DC电机的最大速度为1XXXX每分钟。从以下事实可以看出,各种仿真器制造商纷纷宣布全力支持Keil。Keil提供了一个完整

的开发计划,包括C编译器、宏汇编、连接器、库管理和一个强大的模拟调试器等。这些部分通过集成开发环境(uVision)进行组合运行Keil软件需要奔腾或更多的中央处理器,16MB或更多的内存,20M 或更多的可用硬盘空间,WIN98,nt,WIN2000,WINXP和其他操作系统对于使用51系列单片机的爱好者来说,掌握该软件的使用是非常必要的。如果你用C语言编程,Keil几乎是你唯一的选择(目前,你只能在中国购买这个软件,你购买的模拟机可能只支持这个软件)。即使你不使用C语言,只使用汇编语言进行编程,它方便易用的集成环境和强大的软件模拟和调试工具也会让你事半功倍。Keil C51生成的目标代码非常高效,大多数语句生成的汇编代码简洁易懂。在开发大型软件时,它能更好地体现高级语言的优势。与汇编语言相比,C语言在功能、结构、可读性和可维护性方面具有明显的优势,易于学习和使用。用汇编语言,然后用C语言开发它,我有了更深的体会。

4.2系统程序流程

1)主程序流程

图8是光电编码器测速系统的主程序流程图根据该图,可以直观地理解,整个控制程序的总趋势是首先扫描每秒速度和每分钟速度的控制键,然后在确定显示速度的模式之后执行液晶显示程序来显示速度。然后它返回到控制按键扫描的程序,从而连续重复这个循环。

图8主程序流程图

10

2)中断程序流程图

图9是光电编码器测速系统的中断程序流程图脉冲计数周期主要由单片机内部精确到毫秒的定时器构成,每次以相同的时间间隔中断,中断1000次形成一个周期。当一个周期的时间到达时,将进行脉冲计算。在一个周期时间到来之前进入主程序。以便控制每个周期中方波的高电平和低电平的持续时间,即控制方波的占空比从图中还可以清楚地看出,中断程序主要涉及方波的调节。首先,判断高水平是否没有达到规定时间,如果没有,则允许gdp+1,即保持高水平。如果国内生产总值是100,这意味着主要计划调整了方波,以保持高水平的所有时间。如果国内生产总值为0,它可以一直保持高水平。如果高电平达到调节时间,让控制电机的两个引脚为低电平,并让ddp+1,即让低电平保持不变如果低电平没有达到规定时间,进入主程序保持低电平,等待下一次中断。如果低水平达到规定时间,让ddp=gdp=0,即重新开始下一个方波。

图9定时器中断程序流程图

11

5,仿真与实现

5.1 proteus软件简介

Proteus是世界著名的EDA工具(仿真软件)。从原理图布局、代码调试到单片机与外围电路的联合仿真,从一键开关到PCB设计,真正实现了从概念到产品的完整设计。目前,它是世界上唯一集成电路仿真软件、印刷电路板设计软件和虚拟模型仿真软件的设计平台。其处理器型号支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、A VR、ARM、8086和MSP430。在XXXX,增加了Cortex和DSP系列处理器,并不断增加其他系列的处理器型号。在编译方面,它也支持KEIL、IAR、MPLAB和其他编译器PROTEUS不仅可以可视化许多单片机实例的功能,还可以可视化许多单片机实例的运行过程前者能在一定程度上达到物理演示实验的效果,而后者难以达到。然而,其元件和连接电路与传统的单片机实验硬件高度对应。这在一定程度上取代了传统单片机实验教学的功能,如元件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。利用Proteus软件仿真设计单片机系统是虚拟仿真技术与计算机多媒体技术相结合的综合应用,有利于培养学生的电路设计能力和仿真软件的操作能力。单片机课程设计与全国大学生电子设计实践证明,在进行实际生产之前,如果利用Proteus进行系统仿真开发成功,可以大大提高单片机系统的设计效率。因此,变形杆菌具有较高的推广利用价值。

由于所设计的光电编码器无法在仿真软件中进行仿真,只能对液晶显示部分进行仿真,因此忽略了仿真原理图。图10是使用keil软件编写程序时的调试过程图我用C语言写它第一次编写程序后,编译它。对话框中显示了几个错误。点击错误提示,主程序将只显示光标到错误的地方。根据这个错误提示,进行修改,再次编译,程序仍然会显示错误。重复前面的操作。经过几次修改后,不会出现如图所示的错误提示。这是程序的编写方式。它需要不断修正才能准确。该程序写得很好,并编译成十六进制文件。只有十六进制文件可以刻录到微控制器

12

图10 keil软件模拟图

5.3物理生产与调试

图11是物理图的背面,图12是物理图的正面

原理图和孔板图良好,编写程序后即可开始焊接。焊接开始后,燃烧程序进入,但液晶无法显示。因此,我对液晶显示部分进行了仿真,仿真可以实现正确的显示。然后我检查是否有任何焊接错误,没有发现错误。我想如果我能正确控制1602液晶针,它应该能显示。所以我在外观上做了P2=0xaa,en=1,rw=0,rs=1,然后我用万用表检查液晶上的液晶是否和我设定的一样,电平引脚是否和我设定的一样。

我又让P2=0x55,en=0,rw=1,rs=0。结果,我发现rs液体引脚是高的,我把它设置为低。我用万用表检查,发现rs引出的电线与电源短路,但我看不到短路的地方。我先将rs引出的导线焊接成两段,然后检查一段是否短路,然后焊接成两段,继续检查,最后发现短路的地方,原来是两个焊盘本身连接在一起。我将用电烙铁焊接其中一个焊盘,并用电线连接起来。通电后,液晶将立即正常显示。

图11物理图背面

图12物理图正面

13

5.4指令

如图12所示,该光电编码器测速系统的组成部分包括:STC89C52单片机、光电编码器、74LS74芯片、40针集成电路插座、光电编码器三个四针触摸开关、四个电阻、一个电解电容、两个陶瓷电容、一个六角自锁开关、一个晶体振荡器和一个103蓝白色滑动变阻器

整个光电编码器测速系统安装在20×10大小孔板上。1602液晶显示器用于显示测量的转速。单片机下面的两个键是控制键。从左到右,第一个是用于显示每秒转速的控制键,第二个是用于显示每分钟转速的控制键控制键的右侧是一个74LS74芯片,四个行引脚(用于连接光电编码器)和两个1K电阻构成光电编码器的测速电路部分。单片机右

侧的蓝白色滑动变阻器通过调节蓝白色滑动变阻器来调节液晶的亮度该键是复位键,系统将在每次按下时复位一次,返回初始状态。重置按钮下方的蓝白色自锁开关是一个电源开关。当行针连接到电源时,当按下蓝白色自锁开关时,系统将通电,当按下蓝白色自锁开关时,系统将断电。蓝白自锁开关上方的红色发光二极管是电源指示灯。当系统通电时,指示灯会亮起,当系统断电时,指示灯会变暗。蓝白色自锁开关下的四排引脚从上到下依次连接5V VCC、RXD、TXD 和GND

应在使用前通电。由于在开关连接到电源后,系统尚未通电,因此在按下蓝色和白色自锁开关后,电源接通开机时,当单片机连接到电源时,1602液晶显示器的第一行显示“欢迎使用”,第二行显示real_speed: 0000您可以按下显示每秒速度的键或以每分钟显示的速度旋转主轴,与按下的控制键相对应的旋转速度将显示在液晶上。如果是正向旋转,液晶的第二行将显示real_speed: xxxx。如果是反向旋转,液晶将显示real_speed:-xxxx如果不按控制键,液晶屏的第二行将显示真实速度:0000

14

6,概要

6.1设计概要

我的课题是基于51单片机的光电编码器测速当我选择这个话题时,我开始思考光电编码器在日常生活中是什么样子,如何测量速度,以

及需要什么设备。在决定设计哪种速度测量系统后,我开始列出这个速度测量系统所需的部件。本光电编码器测速系统是基于给定的显示系统设计的,所以在设计电路原理图之前,首先要掌握给定显示系统原理图的连接方式和连接原理。在我理解了所有这些之后,我将考虑如何在现有的基础上设计外围设备来实现期望的功能。经过深思熟虑,决定只需在外围硬件上增加两个触摸开关、一些电阻和一个74LS74芯片,就可以实现光电编码器的测速功能因为我希望焊接尽可能紧密因此,为了方便以后的焊接,减少焊接误差,有必要在孔板软件中绘制孔板图。设计电路时,有必要最大限度地减少飞线的使用。完成绘图后,将它与给定的图表进行比较,以确保没有连接错误。绘图完成后,对孔板图进行校正,使电路不被破坏,更直,并且在连接处没有连接头。校正后,保存孔板图。硬件已经设计好。接下来,我将为我想设计的光电编码器测速系统设计软件,使其智能化。经过几次调试,我的程序在keil软件中显示0错误用网络标签的形式来画DXP的示意图更方便。只需将系统分成小模块,在组件接口上标记出与接口相连的单片机的相应管脚,然后将标记好的模块放置在不同的区域。在画出该图的总体结构并与给定的图进行比较后,在确认没有任何连接错误后,我修改了DXP原理图,使电路不开路,更直。画出DXP原理后,完成了整个电路的设计这大概就是我的设计过程和思维方式。

6.2经验总结我认为在项目设计中获得的经验是非常重要的一部分,它是经验的积累和总结。通过这次供应链管理课程设计,我不仅加深

了对供应链管理理论的理解并将其运用到实践中,还学会了如何培养我们的创新精神,从而不断战胜和超越自己。创新可以是在原有基础上的改进,从而不断完善其功能,成为现实。我们已经安排了这个单片机课程设计,给我们一个很好的实践来应用我们所学的知识。对于本课程的设计,我们花了很多心思,不仅复习和巩固了本课程的理论内容,还丰富了与本专业相关的其他知识,如软件应用等。我们在探索中学习,在探索中成长,在学习过程中带着问题学习。我发现效率很高。这就是我为这个课程设计所做的,应该让人们一目了然地理解你的想法,这也为数据的保存和交换提供了便利。我认为在课程设计中遇到问题是很正常的,但是我们应该记录下每次遇到的问题,并清楚地分析它们,以免在课程设计中犯下下次遇到同样问题的错误。事实上,这个设计也是我们所学知识的综合应用。这使我深刻地认识到,学习单片机必须有一定的基础,电子技术中的数字电路和模拟电路,尤其是数字电路,必须有一定的理论基础。程序设计语言中也应该有汇编语言或C语言。要成为单片机的主人,我们必须先学好汇编语言,然后再转到C语言,所以我们在学习C语言的时候不能忘记以前的知识。我们应该把所学的知识紧密结合起来,综合运用。所谓的设计需要创新。只有全面应用知识,我们才能真正设计好。

15

7,参考文献

[1]杨长兴,刘卫国。C++编程:中国铁道部出版社

[2]李朝清。单片机原理与接口技术(第三版):北京航空航天大学出版社3]康。电子技术基础(第五版):高等教育出版社

[4]刘坤,赵宏博,张先东。51单片机C语言应用(第二版):人民邮电出版社[5]阎石数字电子计数基金会(第五版):高等教育出版社

16

附录

源程序

# include # define uchar unsigned char # define uint unsigned int sbiten = P02;//使能位sbitrw = P01;//读/写选择位sbitrs = P00;//数据/命令选择位sbitfensu = p11//除速键sbit miaosu=p1 ;//第二速度键浮动w;浮点a = 0;

uchar k = 2;//每个四位的uchar num1、num2的实际正向和反向标志位速度;漂浮真实;

uint t;//定时器1中断

uchar码表1[]=\显示设定速度uchar码表2[]= \//无效延迟(UCHARZ) {

UCHARX,Y;对于(x = 100x > 0;x -)表示(y = z;y > 0;y-);} void write _ com(uchal com)//写命令函数{ rw = 0;

uchar real _ GW、real_sw、real_bw、real_qw、expc_gw、expc_sw、expc_bw。//设置速度和实际速度

显示实际速度

RS = 0;en = 0;P2 = com;延迟(5);en = 1;延迟(5);

17

}

en = 0;

void write _ date(uchardate)//写数据函数{ rw = 0;}

void显示(uchar add,uchar expc _ date)//显示速度{

write _ com(0x 80+add);//写命令指针指向要写入数据的地址写日期(ex PC _ date);//写入数据} void(){

tcon = 0x0f;TMOD = 0X15;EX1 = 1;EX0 = 1;EA = 1;

// on总中断

ET1 = 1;//开启T1中断TR1 = 1;//允许T1中断

IP = 0X08;//将定时器1设为优先级TH0 = 0;TL0 = 0;

TH1 =(65536-1000)/256;TL1 =(65536-1000)% 6;write _ com(0x 38);//显示模式write _ com(0x0C);//不显示光标

18

rs = 1;en = 0;P2 =日期;延迟(5);en = 1;延迟(5);en = 0;

延时(10);//延迟显示

write _ com(0x 06);//显示光标移动位置write _ com(0X01);//清除屏幕

write _ com(0X80);//显示欢迎使用(num 1 = 0;num1

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

编码器使用教程与测速原理

编码器使用教程与测速原理 我们将通过这篇教程与大家一起学习编码器的原理,并介绍一些实用的技术。 1.编码器概述 编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上分,可以分为增量式编码器和绝对式编码器。 从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。常见的是光电编码器(光学式)和霍尔编码器(磁式)。 2.编码器原理 光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。光电编码器是由光码盘和光电检测装置组成。光码盘是在一定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,检测装置检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。 霍尔编码器是一种通过磁电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。霍尔编码器是由霍尔码盘和霍尔元件组成。霍尔码盘是在一定直径的圆板上等分地布置有不同的磁极。霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。

可以看到两种原理的编码器目的都是获取AB相输出的方波信号,其使用方法也是一样,下面是一个简单的示意图。 3.编码器接线说明 具体到我们的编码器电机,我们可以看看电机编码器的实物。 这是一款增量式输出的霍尔编码器。编码器有AB相输出,所以不仅可以测速,还可以辨别转向。根据上图的接线说明可以看到,我们只需给编码器电源5V供电,在电机转动的时候即可通过AB相输出方波信号。编码器自带了上拉电阻,所以无需外部上拉,可以直接连接到单片机IO读取。

编码器测速

飞思卡尔智能车舵机和测速的控制设计与实现 时间:2010-04-1411:53:10来源:电子设计工程作者:雷贞勇谢光骥五邑大学 2.1舵机工作原理 舵机在6V电压下正常工作,而大赛组委会统一提供的标准电源输出电压为7.2V,则需一个外围电压转换电路将电源电压转换为舵机的工作电压6V。图2为舵机供电电路。 舵机由舵盘、位置反馈电位计、减速齿轮组、直流动电机和控制电路组成,内部位置反馈减速齿轮组由直流电动机驱动,其输出轴带动一个具有线性比例特性的位置反馈电位器作为位置检测。当电位器转角线性地转换为电压并反馈给控制电路时,控制电路将反馈信号与输入的控制脉冲信号相比较,产生纠正脉冲,控制并驱动直流电机正向或反向转动,使减速齿轮组输出的位置与期望值相符。从而达到舵机精确控制转向角度的目的。舵机工作原理框图如图3所示。 2.2舵机的安装与调节 舵机的控制脉宽与转角在-45°~+45°范围内线性变化。对于对速度有一定要求的智能车,舵机的响应速度和舵机的转向传动比直接影响车模能否以最佳速度顺利通过弯道。车模在赛道上高速行驶,特别是对于前瞻性不够远的红外光电检测智能车,舵机的响应速度及其转向传动比将直接影响车模行驶的稳定性,因此必须细心调试,逐一解决。由于舵机从执行转动指令到响应输出需占用一定的时间,因而产生舵机实时控制的滞后。虽然车模在进入弯道时能够检测到黑色路线的偏转方向,但由于舵机的滞后性,使得车模在转弯过程中时常偏离跑道,且速度越快,偏离越远,极大限制车模在连续弯道上行驶的最大时速,使得车模全程赛道速度很难进一步提高。为了减小舵机响应时间,在遵守比赛规则不允许改造舵机结构的前提下,利用杠杆原理,采用加长舵机力臂的方案来弥补这一缺陷,加长舵机力臂示意图如图4所示。

测速编码器

测速编码器技术参数 电机的位置检测在电机控制中是十分重要的,特别是需要根据精确转子位置控制电机运动状态的应用场合,如位置伺服系统。电机控制系统中的位置检测通常有:微电机解算元件,光电元件,磁敏元件,电磁感应元件等。这些位置检测传感器或者与电机的非负载端同轴连接,或者直接安装在电机的特定的部位。其中光电元件的测量精度较高,能够准确的反应电机的转子的机械位置,从而间接的反映出与电机连接的机械负载的准确的机械位置,从而达到精确控制电机位置的目的。本文主要介绍高精度的光电编码器的内部结构、工作原理与位置检测的方法。 一.光电编码器的介绍: 光电编码器是通过读取光电编码盘上的图案或编码信息来表示与光电编码器相连的电机转子的位置信息的。根据光电编码器的工作原理可以将光电编码器分为绝对式光电编码器与增量式光电编码器,下面我就这两种光电编码器的结构与工作原理做介绍。 1、绝对式光电编码器 绝对式光电编码器如图所示,他是通过读取编码盘上的二进制的编码信息来表示绝对位置信息的。编码盘是按照一定的编码形式制成的圆盘。图1是二进制的编码盘,图中空白部分是透光的,用“0”来表示;涂黑的部分是不透光的,用“1”来表示。通常将组成编码的圈称为码道,每个码道表示二进制数的一位,其中最外侧的是最低位,最里侧的是最高位。如果编码盘有4个码道,则由里向外的码道分别表示为二进制的23、22、21和20,4位二进制可形成16个二进制数,因此就将圆盘划分16个扇区,每个扇区对应一个4位二进制数,如0000、0001、…、1111。 按照码盘上形成的码道配置相应的光电传感器,包括光源、透镜、码盘、光敏二极管和驱动电子线路。当码盘转到一定的角度时,扇区中透光的码道对应的光敏二极管导通,输出低电平“0”,遮光的码道对应的光敏二极管不导通,输出高电

最全最好的课程设计-51单片机电子日历时钟( 含源程序)

LED日历时钟课程设计 院系: 班级: 姓名: 学号: 指导教师: 2012 年06 月16 日

目录

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 第一章前言 数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。虽然现在市场上已有现成的电子钟集成电路芯片,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示期、农历、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k B ytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

飞思卡尔光电编码器测速程序

#include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIV ATIVE "mc9s12xs128" volatile uint speed_back=0,temp=0; void delay_ms(uint ms) { volatile uint x=0; while(ms--) { for(x=2800;x>0;x--) { _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); } } } //注意外接16M晶体。 //飞思卡尔推荐配置,主频道50MHZ,速度更快! void Init_PLL(void) { CLKSEL = 0X00; //disengage PLL to system PLLCTL_PLLON = 1; //turn on PLL SYNR = (0xc0|0x18); //SYDIV=0X18=24 REFDV = (0x40|0x07); //REFDIV=0X07=7 POSTDIV = 0x00; //pllclock=2*osc*(1+SYDIV)/(1+REFDIV)=100MHz; _asm(nop); //BUS CLOCK=50M _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop);

测速编码器说明书

BEN测速编码器在智能车舵机控制中的应用2.1 舵机工作原理 舵机在6 V电压下正常工作,而大赛组委会统一提供的标准电源输出电压为7.2 V,则需一个外围电压转换电路将电源电压转换为舵机的工作电压6 V。图2为舵机供电电路。 舵机由舵盘、位置反馈电位计、减速齿轮组、直流动电机和控制电路组成,内部位置反馈减速齿轮组由直流电动机驱动,其输出轴带动一个具有线性比例特性的位置反馈电位器作为位置检测。当电位器转角线性地转换为电压并反馈给控制电路时,控制电路将反馈信号与输入的控制脉冲信号相比较,产生纠正脉冲,控制并驱动直流电机正向或反向转动,使减速齿轮组输出的位置与期望值相符。从而达到舵机精确控制转向角度的目的。舵机工作原理框图如图3所示。 2.2 舵机的安装与调节 舵机的控制脉宽与转角在-45°~+45°范围内线性变化。对于对速度有一定要求的智能车,舵机的响应速度和舵机的转向传动比直接影响车模能否以最佳速度顺利通过弯道。车模在赛道上高速行驶,特别是对于前瞻性不够远的红外光电检测智能车,舵机的响应速度及其转向传动比将直接影响车模行驶的稳定性,因此必须细心调试,逐一解决。由于舵机从执行转动指令到响应输出需占用一定的时间,因而产生舵机实时控制的滞后。虽然车模在进入弯道时能够检测到黑色路线的偏转方向,但由于舵机的滞后性,使得车模在转弯过程中时常偏离跑道,且速度越快,偏离越远,极大限制车模在连续弯道上行驶的最大时速,使得车模全程赛道速度很难进一步提高。为了减小舵机响应时间,在遵守比赛规则不允许改造舵机结构的前提下,利用杠杆原理,采用加长舵机力臂的方案来弥补这一缺陷,加长舵机力臂示意图如图4所示。

单片机编程全集(含源代码)

前言 (2) 基础知识:单片机编程基础 (2) 第一节:单数码管按键显示 (4) 第二节:双数码管可调秒表 (6) 第三节:十字路口交通灯 (7) 第四节:数码管驱动 (9) 第五节:键盘驱动 (10) 第六节:低频频率计 (15) 第七节:电子表 (18) 第八节:串行口应用 (19)

前言 本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@https://www.doczj.com/doc/fc3106323.html,,或郑郁正@中国;以便相互学习。结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。https://www.doczj.com/doc/fc3106323.html, 针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。对于这些提出问题的读者,本人在此深表谢意。 想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。如果有什么问题,我们可以相互探讨和研究,共同学习。 本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。 基础知识:单片机编程基础 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) https://www.doczj.com/doc/fc3106323.html, 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 C语言编程基础: 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为 x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

51单片机课程设计

课程设计说明书
课程设计名称






学生姓名
指导教师
单片机原理及应用课程设计 电子信息工程 140405 20141329 李延琦 胡黄水
2016 年 12 月 26 日

课程设计任务书
课程设计 题目
酒精测试仪
起止日期
2016 年 12 月 26 日— 2017 年 1 月 6 日
设计地点
计算机科学与工程学 院单片机实验室 3409
设计任务及日程安排: 设计任务:分两部分: (一)、设计实现类:进行软、硬件设计,并上机编程、联线、调试、 实现; 1.电子钟的设计 2.交通灯的设计 3.温度计的设计 4.点阵显示 5.电机调速 6.电子音乐发声(自己选曲) 7.键盘液晶显示系统 (二)、应用系统设计类:不须上机,查资料完成软、硬件设计画图。 查资料选定题目。 说明:第 1--7 题任选其二即可。(二)里题目自拟。 日程安排: 本次设计共二周时间,日程安排如下: 第 1 天:查阅资料,确定题目。 第 2--4 天:进实验室做实验,连接硬件并编写程序作相关的模块实验。 第 5--7 天:编写程序,并调试通过。观察及总结硬件实验现象和结果。 第 8--9 天:整理资料,撰写课程设计报告,准备答辩。 第 10 天:上交课程设计报告,答辩。 设计报告要求:
1. 设计报告里有两个内容,自选题目内容+附录(实验内容),每 位同学独立完成。 2. 自选题目不须上机实现,要求能正确完成硬件电路和软件程序 设计。内容包括: 1) 设计题目、任务与要求 2)硬件框图与电路图 3) 软件及流程图 (a)主要模块流程图 (b)源程序清单与注释 4) 总结 5) 参考资料 6)附录 实验上机调试内容
注:此任务书由指导教师在课程设计前填写,发给学生做为本门课程设计 的依据。

51单片机PID调增量式光电编码器测速.

编码器输出的A向脉冲接到单片机的外部中断INT0,B向脉冲接到I/O端口P1.0。当系统工作时,首先要把INT0设置成下降沿触发,并开相应中断。当有有效脉冲触发中断时,进行中断处理程序,判别B脉冲是高电平还是低电平,若是高电平则编码器正转,加1计数;若是低电平则编码器反转,减1计数。 基于51单片机的直流电机PID闭环调速系统原理详解与程序 (2013-08-04 01:18:15) 转载▼ 标签: 分类:单片机 51单片 机 直流电 机 pid pcf8591 基于51单片机的直流电机PID闭环调速系统 1.电机转速反馈: 原理:利用光电编码器作为转速的反馈元件,设电机转一周光电编码器发送N个PWM波形,利用测周法测量电机转速。 具体实现:将定时器0设置在计数模式,用来统计一定的时间T内接受到的脉冲个数M个,而定时器0置在计时模式,用来计时T时间。则如果T时间接受到M个PWM波形,而电机转一圈发出N个PWM波形,则根据测周法原理,电机的实际的转速为:real_speed=M/(N*T),单位转/秒。若将定时器1置在计数模式,则PWM波形应该由P3^3脚输入。 代码实现:

//定时器0初始化,用来定时10ms void Init_Timer0(void) { TMOD |= 0x01; //使用模式1,16位定时器,且工作在计时模式 TH0=(65536-10000)/256; //定时10ms TL0=(65536-10000)%6; EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 } // 计数器1初始化,用来统计定时器1计时250ms内PWM波形个数 void Init_Timer1(void) { TMOD |= 0x50; //使用计数模式1,16位计数器模式 TH1=0x00; //给定初值,由0往上计数 TL1=0x00; EA=1; //总中断打开 ET1=1; //定时器中断打开 TR1=1; //定时器开关打开 } //定时器0的中断服务子函数,主要完成脉冲个数的读取,实际转速的计算和PID 控制以及控制结 //果输出等工作 void Timer0_isr(void) interrupt 1 { unsigned char count; TH0=(65536-10000)/256; //重新赋值 10ms TL0=(65536-10000)%6;

51单片机控制LED灯程序设计

51单片机:LED灯亮灯灭程序设计 1.功能说明:控制单片机P1端口输出,使P1.0位所接的LED点亮,其他7只灯熄灭。 程序: 01: MOV A , #11111110B ; 存入欲显示灯的位置数据 02: MOV P1,A ; 点亮第一只灯 03: JMP $ ; 保持当前的输出状态 04: END ; 程序结束 2.功能说明:单片机P1端口接8只LED,点亮第1、3、4、6、7、8只灯。 程序:

01:START: MOV A , #00010010B ; 存入欲显示灯的位置数据 02:MOV P1,A ; 点亮灯 03:JMP START ; 重新设定显示值 04:END ; 程序结束 3.功能说明:单片机P1端口接8只LED,每次点亮一只,向左移动点亮,重复循环。 程序: 01:START: MOV R0, #8 ;设左移8次 02:MOV A, #11111110B ;存入开始点亮灯位置

03:LOOP: MOV P1, A ;传送到P1并输出 04:RL A ;左移一位 05:DJNZ R0, LOOP ;判断移动次数 06:JMP START ;重新设定显示值 07:END ;程序结束 4.功能说明:单片机P1端口接8只LED,每次点亮一只,向右移动点亮,重复循环。 程序: 01:START: MOV R0, #8 ;设右移8次

02:MOV A, #01111111B ;存入开始点亮灯位置03: LOOP: MOV P1, A ;传送到P1并输出 04: ACALL DELAY ;调延时子程序05: RR A ;右移一位 06: DJNZ R0, LOOP ;判断移动次数07: JMP START ;重新设定显示值08: DELAY: MOV R5,#50 ; 09:DLY1: MOV R6,#100 ; 10: DLY2: MOV R7,#100 ;

基于51单片机FAT32文件系统程序

基于51单片机FAT32文件系统程序 #ifndef __ZNFAT_H__ #define __ZNFAT_H__ #include "mytype.h" //类型重定义 /*******************************************************/ //znFAT的裁减宏--------------------------------------------------------- //#define ZNFAT_ENTER_DIR //有此宏,函数 znFAT_Enter_Dir() 参与编译 #define ZNFAT_OPEN_FILE //有此宏,函数 znFAT_Open_File() 参与编译 //#define ZNFAT_SEEK_FILE //有此宏,函数 znFAT_Seek_File() 参与编译 //#define ZNFAT_READ_FILE //有此宏,函数 znFAT_Read_File() 参与编译 //#define ZNFAT_READ_FILEX //有此宏,函数 znFAT_Read_FileX() 参与编译 //#define ZNFAT_ADD_DAT //有此宏,函数 znFAT_Add_Dat() 参与编译 //#define ZNFAT_CREATE_DIR //有此宏,函数 znFAT_Create_Dir() 参与编译 //#define ZNFAT_CREATE_FILE //有此宏,函数 znFAT_Create_File() 参与编译 //#define ZNFAT_DEL_FILE //有此宏,函数 znFAT_Del_File() 参与编译 //#define ZNFAT_XCOPY_FILE //有此宏,函数 znFAT_XCopy_File() 参与编译 //#define ZNFAT_RENAME_FILE //有此宏,函数 znFAT_Rename_File() 参与编译 //#define ZNFAT_GET_TOTAL_SIZE //有此宏,函数 znFAT_Get_Total_Size() 参与编译 //#define znFAT_GET_REMAIN_CAP //有此宏,函数 znFAT_Get_Remain_Cap() 参与编译 #include "cj.h" #include "cj.h" //---------------------------------------------------------------------- #define SOC(c) (((c-pArg->FirstDirClust)*(pArg->SectorsPerClust))+pArg->FirstDirSector) // 用于计算簇的开始扇区#define CONST const //设备表 #define SDCARD 0 //SD卡 #define UDISK 1 //U盘 #define CFCARD 2 //CF卡 #define OTHER 3 //其它 //这里的存储设备表,可以灵活扩充,以实现对更多存储设备的支持 //------------------------------------------- #define MAKE_FILE_TIME(h,m,s) ((((unsigned int)h)<<11)+(((unsigned int)m)<<5)+(((unsigned int)s)>>1)) /* 生成指定时分秒的文件时间数据 */ #define MAKE_FILE_DATE(y,m,d) (((((unsigned int)y)+20)<<9)+(((unsigned int)m)<<5)+((unsigned int)d)) /* 生成指定年月日的文件日期数据 */ //DPT:分区记录结构如下 struct PartRecord { UINT8 Active; //0x80表示此分区有效 UINT8 StartHead; //分区的开始磁头 UINT8 StartCylSect[2];//开始柱面与扇区 UINT8 PartType; //分区类型 UINT8 EndHead; //分区的结束头 UINT8 EndCylSect[2]; //结束柱面与扇区 UINT8 StartLBA[4]; //分区的第一个扇区 UINT8 Size[4]; //分区的大小

基于51单片机的光电编码器测速报告

课程设计报告 课程名称:微机原理课程设计 题目:基于51单片机的光电编码器测速

光电编码器是高精度位置控制系统常用的一种位移检测传感器。在位置控制系统中,由于电机既可能正转,也可能反转,所以要对与其相连的编码器输出的脉冲进行计数,要求相应的计数器既能实现加计数,又能实现减计数,即进行可逆计数。其计数的方法有多种,包括纯粹的软件计数和硬件计数。文中分别对这两种常用的计数方法进行了分析,对其优缺点进行了对比,最后提出了一种新的计数方法,利用80C51单片机内部的计数器实现对光电编码器输出脉冲的加减可逆计数,既节省了硬件资源,又能得到较高的计数频率。本设计就是由单片机STC89C52RC芯片,光电编码器和1602液晶为核心,辅以必要的电路,构成了一个基于51单片机的光电编码器测速器。该系统有两个控制按键,分别用于控制每秒的转速和每分钟的转速,并将速度用1602液晶显示出来。该测速器测速精准,具有实时检测的功能,操作简单。 关键词:光电编码器,51单片机,C语言,1602液晶

一、设计任务与要求 (4) 1.1 设计任务 (4) 1.2 设计要求 (4) 二、方案总体设计 (5) 2.1 方案一 (5) 2.2 方案二 (5) 2.3 系统采用方案 (5) 三、硬件设计 (7) 3.1 单片机最小系统 (7) 3.2 液晶显示模块 (7) 3.3 系统电源 (8) 3.4光电编码器电路 (8) 3.5 整体电路 (9) 四、软件设计 (10) 4.1 keil软件介绍 (10) 4.2 系统程序流程 (10) 五、仿真与实现 (12) 5.1 proteus软件介绍 (12) 5.2 仿真过程 (12) 5.3 实物制作与调试 (13) 5.4 使用说明 (14) 六、总结 (15) 6.1 设计总结 (15) 6.2 经验总结 (15) 七、参考文献 (16)

(完整版)51单片机汇编指令(全)

指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7) Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1) Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址 #data表示8位常数(立即数) #data16表示16位常数 Add16表示16位地址 Addr11表示11位地址 Rel8位代符号的地址偏移量 Bit表示位地址 @间接寻址寄存器或基址寄存器的前缀 ( )表示括号中单元的内容 (( ))表示间接寻址的内容 指令系统 数据传送指令(8个助记符) 助记符中英文注释 MOV Move 移动 MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV direct , A;A→(direct),累加器A中的内容送直接地址中 MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址 MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址 MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址 MOV direct , #data;8位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

基于51单片机的光电编码器测速

摘要 光电编码器是高精度位置控制系统常用的一种位移检测传感器。在位置控制系统中,由于电机既可能正转,也可能反转,所以要对与其相连的编码器输出的脉冲进行计数,要求相应的计数器既能实现加计数,又能实现减计数,即进行可逆计数。其计数的方法有多种,包括纯粹的软件计数和硬件计数。文中分别对这两种常用的计数方法进行了分析,对其优缺点进行了对比,最后提出了一种新的计数方法,利用80C51单片机内部的计数器实现对光电编码器输出脉冲的加减可逆计数,既节省了硬件资源,又能得到较高的计数频率。本设计就是由单片机STC89C52RC芯片,光电编码器和1602液晶为核心,辅以必要的电路,构成了一个基于51单片机的光电编码器测速器。该系统有两个控制按键,分别用于控制每秒的转速和每分钟的转速,并将速度用1602液晶显示出来。该测速器测速精准,具有实时检测的功能,操作简单。 关键词:光电编码器,51单片机,C语言,1602液晶

目录 一、设计任务与要求 (3) 1.1 设计任务 (3) 1.2 设计要求 (3) 二、方案总体设计 (4) 2.1 方案一 (4) 2.2 方案二 (4) 2.3 系统采用方案 (4) 三、硬件设计 (6) 3.1 单片机最小系统 (6) 3.2 液晶显示模块 (6) 3.3 系统电源 (7) 3.4光电编码器电路 (7) 3.5 整体电路 (8) 四、软件设计 (9) 4.1 keil软件介绍 (9) 4.2 系统程序流程 (9) 五、仿真与实现 (11) 5.1 proteus软件介绍 (11) 5.2 仿真过程 (11) 5.3 实物制作与调试 (12) 5.4 使用说明 (13) 六、总结 (14) 6.1 设计总结 (14) 6.2 经验总结 (14) 七、参考文献 (15)

单片机C语言模块化编程初步资料全

下面让我们揭开模块化神秘面纱,一窥其真面目。 C语言源文件*.c 提到C语言源文件,大家都不会陌生。因为我们平常写的程序代码几乎都在这个XX.C文件里面。编译器也是以此文件来进行编译并生成相应的目标文件。作为模块化编程的组成基础,我们所要实现的所有功能的源代码均在这个文件里。理想的模块化应该可以看成是一个黑盒子。即我们只关心模块提供的功能,而不管模块内部的实现细节。好比我们买了一部手机,我们只需要会用手机提供的功能即可,不需要知晓它是如何把短信发出去的,如何响应我们按键的输入,这些过程对我们用户而言,就是是一个黑盒子。 在大规模程序开发中,一个程序由很多个模块组成,很可能,这些模块的编写任务被分配到不同的人。而你在编写这个模块的时候很可能就需要利用到别人写好的模块的借口,这个时候我们关心的是,它的模块实现了什么样的接口,我该如何去调用,至于模块内部是如何组织的,对于我而言,无需过多关注。而追求接口的单一性,把不需要的细节尽可能对外部屏蔽起来,正是我们所需要注意的地方。 C语言头文件*.h 谈及到模块化编程,必然会涉及到多文件编译,也就是工程编译。在这样的一个系统中,往往会有多个C文件,而且每个C文件的作用不尽相同。在我们的C文件中,由于需要对外提供接口,因此必须有一些函数或者是变量提供给外部其它文件进行调用。 假设我们有一个LCD.C文件,其提供最基本的LCD的驱动函数 LcdPutChar(char cNewValue) ; //在当前位置输出一个字符 而在我们的另外一个文件中需要调用此函数,那么我们该如何做呢? 头文件的作用正是在此。可以称其为一份接口描述文件。其文件内部不应该包含任何实质性的函数代码。我们可以把这个头文件理解成为一份说明书,说明的内容就是我们的模块对外提供的接口函数或者是接口变量。同时该文件也包含了一些很重要的宏定义以及一些结构体的信息,离开了这些信息,很可能就无法正常使用接口函数或者是接口变量。但是总的原则是:不该让外界知道的信息就不应该出现在头文件里,而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件里,否则,外界就无法正确的调用我们提供的接口功能。因而为了让外部函数或者文件调用我们提供的接口功能,就必须包含我们提供的这个接口描述文件----即头文件。同时,我们自身模块也需要包含这份模块头文件(因为其包含了模块源文件中所需要的宏定义或者是结构体),好比我们平常所用的文件都是一式三份一样,模块本身也需要包含这个头文件。 下面我们来定义这个头文件,一般来说,头文件的名字应该与源文件的名字保持一致,这样我们便可以清晰的知道哪个头文件是哪个源文件的描述。

51单片机C语言程序设计复习资料

2013-2014学年上期51单片机C语言程序设计重修复习提纲考试方式:闭卷考试。 考试题型: 填空题(每空1分,共18分);单项选择题(每空2分,共18分);问答及计算题(每题4分,共16分);编程及程序阅读题(5小题,共48分)。 考试分数: 卷面成绩70%+平时成绩15%+实验成绩15%,未缺席、无课堂违纪、作业全交且认真完成的同学平时成绩可获得满分,缺席一次平时成绩扣30分,实验好评次数3次以上且实验报告全优的同学实验成绩可得满分,实验缺席一次扣30分。缺席实验和旷课共3次以上者,无考试资格。 考试时间: 18周周一(12月30日)下午14:00:16:00,考试地点:具体考室另行通知希望大家认真复习,认真听讲,不懂就问,考试成绩不及格允许查卷,如查卷卷面批阅无误成绩不做更改。 编程题为实验或实验类似的题目有3题,其余2题也取自课堂讲授例题,请务必认真复习。第一章单片机概述及单片机知识回顾 掌握什么是单片机、单片机的应用、常见单片机类型、十进制、十六进制、二进制数制转换知识。掌握单片机的硬件组成、CPU的结构、程序计数器PC的功能、存储器结构、机器周期的计算、会画出单片机的最小系统电路图及回答单片机最小系统的组成。 第二章C51语言程序设计基础(本章填空题和选择题比重较大请务必认真复习)掌握C51语言进行软件开发与汇编语言相比的优点、掌握C51的数据类型、特殊功能位的定义、C51的基本运算(位运算重点复习)、数组的定义、C51的结构及函数。 第三章AT89S51片内并行端口及编程(本章有编程题) 掌握P0-P3并行端口的特点,会开关量检测及流水灯程序的编程。 第四章AT89S51单片机的中断系统(本章有编程题) 掌握中断系统的结构、中断请求响应被满足的条件、外部中断的触发选择方式、外部中断的使用与编程。 第五章AT89S51单片机的定时器/计数器(本章有编程器) 掌握定时器的结构,TOMD及TCON的使用,定时器方式0和方式1的特点、会计算定时器初值,会用定时器中断产生PWM波形,会用定时器对外部事件进行计数。 第六章AT89S51单片机的串行口(本章有计算题) 掌握串行通信的基础知识(课本没有的内容请参照课堂讲授笔记或PPT)、串行口的四种工作方式的特点、会计算奇偶校验码、会根据波特率计算T1的初值。 第七章AT89S51单片机与输入/输出外设接口(本章有编程题) 掌握数码管动态显示的原理、掌握矩阵式键盘的原理与编程(矩阵键盘编程必考,但不会考4X4键盘)。 第八章AT89S51单片机与D/A与A/D转换器的接口(本章有编程题) 掌握AD与DA转换的接口、ADC和DAC的技术指标、常用AD和DA转换器。掌握ADC0809和TLC2543的使用与编程(2器件其中之一有编程题)。 第九章AT89S51单片机应用系统与调试(本章有编程题) 掌握单片机应用系统的软件抗干扰方法。

基于STC89C52光电码盘测速 C程序

基于STC89C52光电码盘测速C程序#include #include #define uint unsignedint #define uchar unsigned char float f=0; uchar LED0_data,LED1_data,LED2_data,LED3_data; uchari=0; uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void display(); void delay(uint v); voidinit(); /*定时器初始化*/ voidinit() { TMOD=0x51; //T1计数器,T0定时器,方式1 TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; //开总中断 TL1=0; TH1=0; ET0=1; //开定时器0中断 } /*延时子函数*/ void delay(unsigned int c) { unsignedinti,j; for(i=c;i>0;i--) for(j=110;j>0;j--); } /*将十进制数拆成送数码管的显示码*/ voiddectobit(intdec) { LED3_data=dec/1000; dec=dec % 1000; LED2_data=dec/100; dec=dec % 100;

LED1_data=dec/10; dec=dec % 10; LED0_data=dec; } /*显示程序*/ void display() { P0=table[LED3_data]; //个位 P2&=~0x01; delay(10); P2|=0x01; P0=table[LED2_data]; //十位 P2&=~0x02; delay(20); P2|=0x02; P0=table[LED1_data]; P2&=~0x04; delay(20); P2|=0x04; //百位P0=table[LED0_data]; //千位 P2&=~0x08; delay(20); P2|=0x08; } void main(void) { init(); TR0=1; //启动定时器0 TR1=1; while(1) { dectobit(f); display(); } }

光电编码器测速

实验三光电传感器转速测量实验 实验目的 1.通过本实验了解和掌握采用光电传感器测量的原理和方法。 2.通过本实验了解和掌握转速测量的基本方法。 实验原理 直接测量电机转速的方法很多,可以采用各种光电传感器,也可以采用霍尔元件。本实验采用光电传感器来测量电机的转速。 由于光电测量方法灵活多样,可测参数众多,一般情况下又具有非接触、高精度、高分辨率、高可靠性和相应快等优点,加之激光光源、光栅、光学码盘、CCD器件、光导纤维等的相继出现和成功应用,使得光电传感器在检测和控制领域得到了广泛的应用。光电传感器在工业上的应用可归纳为吸收式、遮光式、反射式、辐射式四种基本形式。图3.31说明了这四种形式的工作方式。 图3.31 光电传感器的工作方式 图3.32直射式光电转速传感器的结构图 直射式光电转速传感器的结构见图3.32。它由开孔圆盘、光源、光敏元件及缝隙板等组成。开孔圆盘的输入轴与被测轴相连接,光源发出的光,通过开孔圆盘和缝隙板照射到光敏元件上被光敏元件所接收,将光信号转为电信号输出。开孔圆盘上有许多小孔,开孔圆盘旋转一周,光敏元件输出的电脉冲个数等于圆盘的开孔数,因此,可通过测量光敏元件输出的脉冲频率,得知被测转速,即 n=f/N 式中:n - 转速f - 脉冲频率N - 圆盘开孔数。 反射式光电传感器的工作原理见图3.33,主要由被测旋转部件、反光片(或反光贴纸)、

反射式光电传感器组成,在可以进行精确定位的情况下,在被测部件上对称安装多个反光片或反光贴纸会取得较好的测量效果。在本实验中,由于测试距离近且测试要求不高,仅在被测部件上只安装了一片反光贴纸,因此,当旋转部件上的反光贴纸通过光电传感器前时,光电传感器的输出就会跳变一次。通过测出这个跳变频率f,就可知道转速n。 n=f 如果在被测部件上对称安装多个反光片或反光贴纸,那么,n=f/N。N-反光片或反光贴纸的数量。 图3.33 反射式光电转速传感器的结构图 实验仪器和设备 1. 计算机 n台 2. DRVI快速可重组虚拟仪器平台 1套 3. 并口数据采集仪(DRDAQ-EPP2)1台 4. 开关电源(DRDY-A)1台 5. 光电转速传感器(DRHYF-12-A) 1套 6. 转子/振动实验台(DRZZS-A)/(DRZD-A) 1 台 实验步骤及内容 1.光电传感器转速测量实验结构示意图如图3.34所示,按图示结构连接实验设备, 其中光电转速传感器接入数据采集仪A/D输入通道。 图3.34 转速测量实验结构示意图 2.启动服务器,运行DRVI程序,点击DRVI快捷工具条上的“联机注册”图标,选择 其中的“DRVI采集仪主卡检测”进行服务器和数据采集仪之间的注册。联机注册成功后,从DRVI工具栏和快捷工具条中启动“内置的Web服务器”,开始监听8500端口。 3.打开客户端计算机,启动计算机上的DRVI程序,然后点击DRVI快捷工具条上的“联 机注册”图标,选择其中的“DRVI局域网服务器检测”,在弹出的对话框中输入服务器IP地址(例如:192.168.0.1),点击“发送”按钮,进行客户端和服务器之间的认证,认证完毕即可正常运行客户端所有功能。 4.在收藏菜单栏中选中“实验指导书”菜单项打开WEB版实验指导书,在实验目录中

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