下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.JIANGXI UNtVERSITf OF SCIENCE AND TECHMCLG&Y编辑版 word单片机创新设计报告设计题目:基于单片机的电机测速及显示学 院:机电工程学院专 业:测控技术与仪器班级学号:071姓 名:董新彬同组人员:李爽、朱浩波指导教师: 王军 冯梅林设计时间: 201Q 10、10-201。10、30单片机简介 31.1 单片机历史31.2 AT89C51的主要特性 41.3 管脚说明 51.4 振荡器特性 71.5 芯片擦除 8二、硬件电路的设计82.1 AT89C51下载器部分 82.2 电机驱动部分11三、程序设计 163.1 下载器程序 163.2
2、电机测速程序 25四、总结 39五、参考文献 40单片机简介单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时, 学习使用单片机了解计算机原理与结构的最佳选择。1.1 单片机历史1)第一阶段(1976-1978):单片机的控索阶段。以Intel 公司的MCS - 48为代表。MCS - 48的推出是在工控领域的控索,参与这一控索的公司还有Motorola 、 Zilog 等,都取得了满意的效果。这就是 SCM 的诞生年代,“单机片”一词即由此而来。
3、2)第二阶段(1978-1982)单片机的完善阶段。 Intel 公司在 MCS-48基础上推出了完善的、典型的单片机系列MCS -51。它在以下几个方面奠定了典型的通用总线型单片机体系结构。完善的外部总线。MCS-51设置了经典的8位单片机的总线结构,包括8 位数据总线、16位地址总线、控制总线及具有很多机通信功能的串行通信接口。 CPU 外围功能单元的集中管理模式。体现工控特性的位地址空间及位操作方式。指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令。编辑版 word3)第三阶段(1982-1990):8 位单片机的巩固发展及16 位单片机的推出阶段,也是单片机向微控制器发展的阶段
4、。Intel 公司推出的MCS - 96系列单片机,将一些用于测控系统的模数转换器、程序运行监视器、脉宽调制器等纳入片中,体现了单片机的微控制器特征。随着MCS - 51系列的广应用,许多电气厂商竞相使用80C51为内核,将许多测控系统中使用的电路技术、接口技术、多通道A/D 转换部件、 可靠性技术等应用到单片机中,增强了外围电路路功能,强化了智能控制的特征。4)第四阶段(1990):微控制器的全面发展阶段。随着单片机在各个领域全面深入地发展和应用,出现了高速、大寻址范围、强运算能力的8 位 /16 位 /32 位通用型单片机,以及小型廉价的专用型单片机1.2 AT89C51 的主要特性 与M
5、CS-51兼容 4K字节可编程闪烁存储器,寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24Hz 三级程序存储器锁定 128*8位内部RAM32可编程 I/O 线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路1.3 管脚说明VCC:供电电压。GND:接地。P0 口: P0 口为一个8位漏级开路双向I/O 口,每脚可吸收8TTL 门电流。当P1 口的管脚第一次写1时,被定义为高阻输入。P0能够 用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH 编程时, P0 口作为原码输入口,当FIASH 进行校验
6、时,P0输出原码,此时P0外部必须被拉高。P1 口: P1 口是一个内部提供上拉电阻的8位双向 I/O 口, P1 口缓冲器能接收输出4TTL 门电流。 P1 口管脚写入1 后, 被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1 口作为第八位地址接收。P2 口: P2 口为一个内部上拉电阻的8位双向I/O 口,P2 口缓冲器可接收,输出4 个 TTL 门电流,当P2 口被写“1 ”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被P2 口当用于外P2 口输出地外部拉低,将输出电流。这是由于内
7、部上拉的缘故。部程序存储器或16位地址外部数据存储器进行存取时,址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。P2 口在FLASH编程和校验时接收高八位地址信号和控制信号。P3 口: P3 口管脚是8个带内部上拉电阻的双向I/O 口,可接收输出 4 个 TTL 门电流。当P3 口写入“1 ”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故。P3 口也可作为AT89C51的一些特殊功能口,如下表所示:P3.0 RXD (串行输入口)P3.1 TXD
8、 (串行输出口)P3.2 /INTO (外部中断0)P3.3 /INT1 (外部中断1)P3.4 TO (记日t器0外部输入)P3.5 T1 (记日t器1外部输入)P3.6 /WR (外部数据存储器写选通)P3.7 /RD (外部数据存储器读选通)P3 口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持 RST脚两个机器周期的高电平时间。ALE/PROG :当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。 因此它可
9、用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE 脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX, MOVC 指令是 ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。/PSEN :外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN 信号将不出现。/EA/VPP :当 /EA 保持低电平时,则在此期间外部程序存储器( 0000H-FFFFH) , 不管是否有内部程序存储器。注意加密方式
10、1 时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1 :反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。1.4 振荡器特性XTAL1 和 XTAL2 分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2 应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。1.5 芯片擦除整个 PEROM 阵列和三个锁定位的电擦除
11、可通过正确的控制信号组合,并保持ALE 管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1 ”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外, AT89C51 设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU 停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下, 保存 RAM 的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。二、硬件电路的设计2.1 AT89C51 下载器部分SP-51Pro(即Easy51pr。编程器可以烧录Atmel公司系列单片机芯片,具有性能稳定,烧录速度
12、快,性价比高等优点。产品性能介绍如下: 支持的芯片支持目前最为经典和市场占有量最大的ATMEL 公司生产的AT89C51、 C52、 C55 和最新的S51、 S52; AT89C1051、 2051、 4051等芯片。产品特点1 .使用串口通讯,芯片自动判别,编程过程中的擦除、烧写、校验各种操作完全由编程器上的监控芯片 89C51控制,不受PC配置及其主频的影响,因此烧写成功率高可以达到100,烧写速度很快并且烧写速度和微机的档次无关。2 .采用57600高速波特率进行数据传送,编程速度可以和一般并行编程器相媲美,经测试,烧写一片4K ROM的AT89C51仅需要9.5S而读取和校验仅需要3
13、.5S。3 .体积小巧,省去笨重的外接电源适配器,直接使用USB端口 5V电源,携带方便,非常初学者学习51 单片机的要求。4 .软件界面友好,菜单、工具栏、 快捷键齐全,全中文操作,提供加密功能,可以保护您的创作产权。可以说是麻雀虽小,五脏俱全!5 .功能完善,具有编程、读取、校验、空检查、擦除、加密等系列功能;6 .40pin和20pin锁紧插座,所有器件全部以第一脚对齐,无附加跳线,对于 DIP 封装芯片无需任何适配器;7 .采用优质万用锁紧插座,和接触不良等问题彻底说再见,可烧写40脚单片机芯片和20脚单片机芯片8 .改进的烧写深度确保每一片C51 系列芯片的反复烧写次数都能达到100
14、0以上!内部数据至少保存10年。9 .因为采用了9 针传口通讯,这样一来就不会再和打印机抢一个打印口,随时随地想烧就烧,让芯片编程成为一种快乐!(3)硬件连接1 .通讯电缆与编程器连接好,2 .将串口插头插入电脑串口,3 .USB插头插入电脑任一个 USB 口,此时编程器上LED点亮,表明 电源接通。4 .接着安装软件,本软件支持Win9x/me/2000/NT, 标准 Window 操作界面。 本软件属于绿色软件,不需要安装,直接把相关的软件拷贝到硬盘中,运行其中的Easy 51Pro 2_0程序即可。 软件使用程序启动后,会自动检测硬件及连接,状态框中显示“就绪”字样, 表示编程器连接和设
15、置均正常。否则请检查硬件连接和端口设置。把单片机芯片正确地放到编程器的相应插座上,注意,芯片的缺口要朝向插座的把手方向。芯片放好后,就可以对芯片进行读写操作了,读写操作按下面的步骤进行:1、程序运行,请先选择器件(点下选框)2、用“打开文件”选择打开要编写的.HEX 和 .BIN 文件3、用“保存文件”可以保存读出来的文件4、用“擦除器件”擦除芯片5、用“写器件”编程编辑版 word6、用“读器件”读取芯片中的程序,加密的读不出来7、用“校验数据”检查编程的正确与否8、用“自动完成”自动执行以上各步骤9、用“加密”选择加密的级数 2.12电机驱动部分* Easy 51 Pro wZ.OA.T3
16、9S52检测器件读人文件GMCU工程则口mE工耳引舅冲10M字节)操作案件完成.编程需:写嘉怦完成.遍理郭漆器牛完成.数据己短保存到獴冲2.一二一二二效验开始/自动)打开文件我发现口个单元不对J保存文件自动)槽除器件(自动)写器件读器件(自动)效睑数掴自动完成加密Lock li t-l写锁定位凄器件完成援冲健冲上状态设置2.2电机驱动部分图4-3中所示为一个典型的直流电机控制电路。电路得名于“H桥驱动电路”是因为它的形状酷似字母 H。4个三极管组成H的4条 垂直腿,而电机就是H中的横杠(注意:图4.12及随后的两个图都 只是示意图,而不是完整的电路图,其中三极管的驱动电路没有画出 来)。如图所
17、示,H桥式电机驱动电路包括4个三极管和一个电机。要使电 机运转,必须导通对角线上的一对三极管。 根据不同三极管对的导通 情况,电流可能会从左至右或从右至左流过电机, 从而控制电机的转 向。图4-3 H桥简易驱动电路要使电机运转,必须使对角线上的一对三极管导通。例如,如图4-4所示,当Q1管和Q4管导通时,电流就从电源正极经 Q1从左至 右穿过电机,然后再经Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管 Q1和Q4导通时,电 流将从左至右流过电机,从而驱动电机按特定方向转动(电机周围的 箭头指示为顺时针方向)。图4-4 H桥电路驱动电机顺时针转动图4-5所示为另
18、一对三极管 Q2和Q3导通的情况,电流将从右 至左流过电机。当三极管 Q2和Q3导通时,电流将从右至左流过电 机,从而驱动电机沿另一方向转动(电机周围的箭头表示为逆时针方 向)。图4-5 H桥驱动电机逆时针转动驱动电机时,保证 H桥上两个同侧的三极管不会同时导通非常 重要。如果三极管Q1和Q2同时导通,那么电流就会从正极穿过两 个三极管直接回到负极。此时,电路中除了三极管外没有其他任何负 载,因此电路上的电流就可能达到最大值(该电流仅受电源性能限 制),甚至烧坏三极管。基于上述原因,在实际驱动电路中通常要用 硬件电路方便地控制三极管的开关。图4-6所示就是基于这种考虑的改进电路,它在基本 H桥
19、电路 的基础上增加了 4个与门和2个非门。4个与门同一个“使能”导通 信号相接,这样,用这一个信号就能控制整个电路的开关。而 2个非 门通过提供一种方向输人,可以保证任何时候在H桥的同侧腿上都只有一个三极管能导通。(与本节前面的示意图一样,图 4.15所示也 不是一个完整的电路图,特别是图中与门和三极管直接连接是不能正 常工作的。)信号和一个使能信号。如果 DIRL信号为0, DIR R信号为1,并 且使能信号是1,那么三极管Q1和Q4导通,电流从左至右流经电 机(如图4.-7所示);如果DIRL信号变为1,而DIRR信号变为 0,那么Q2和Q3将导通,电流则反向流过电机。图4-7使能信号与方
20、向信号的使用实际使用的时候,用分立元件制作 H桥是很麻烦的,好在现在 市面上有很多封装好的 H桥集成电路,接上电源、电机和控制信号 就可以使用了,在额定的电压和电流内使用非常方便可靠。比如常用的 L293D、L298N、TA7257R SN754410等。编辑版word三、程序设计3.1 下载器程序#include <E51Pro.h>BYTE ComBuf18;/ 串口通讯数据缓存,发送和接收都使用UINT nAddress;/ROM 中地址计数UINT nTimeOut;/ 超时计数ProWork pw;/ 编程器一般操作void Delay_us(BYTE nUs)微秒级延时
21、 <255us TH0=0;TL0=0;TR0=1;while(TL0<nUs)/ 利用 T0 做定时计数器,循环采样,直到达到定时值 TR0=0;void Delay_ms(UINT nMs)/ 豪秒级的延时<65535msUINT n=0;TR0=1;while(n<nMs)/ 利用 T0 做定时计数器,循环采样,直到达到定时值TH0=0;TL0=20;while(TH0<4) n+; TR0=0;BOOL WaitComm()/ 等待上位机的命令,18字节BYTE n=0;RI=0;while(!RI)/ 等待第一个字节 ComBufn=SBUF;RI=0;
22、n+;for(n;n<=17;n+) nTimeOut=0;while(!RI) nTimeOut+;if(nTimeOut>10000)/ 后 17个字节都有超时限制 return 0;ComBufn=SBUF;RI=0; return 1;BOOL WaitResp()/ 等待上位机回应,1 字节 ,有超时限制nTimeOut=0;RI=0;while(!RI) nTimeOut+;if(nTimeOut>50000) return 0; RI=0;ComBuf0=SBUF;return 1;BOOL WaitData()/ 写器件时等待上位机数据,18字节,有超时限制B
23、YTE n;RI=0;for(n=0;n<=17;n+) nTimeOut=0;while(!RI) nTimeOut+;if(nTimeOut>10000) return 0; RI=0; ComBufn=SBUF; return 1;void SendData()/发送数据或回应操作完成,18字节 BYTE n=0;for(n;n<=17;n+)TI=0;SBUF=ComBufn;while(!TI)TI=0;void SendResp()/回应上位机1个字节,在写器件函数中使用 TI=0;SBUF=ComBuf0;while(!TI)TI=0;void SetVpp5V
24、()/ 设置 Vpp 为 5vP3_4=0;P3_3=0;void SetVpp0V()/ 设置 Vpp 为 0vP3_3=0;P3_4=1;void SetVpp12V()/设置 Vpp 为 12vP3_4=0;P3_3=1;void RstPro()/ 编程器复位 pw.fpProOver();/ 直接编程结束SendData();/通知上位机,表示编程器就绪,可以直接用此函数因 为协议号(ComBuf0)还没被修改,下同 void ReadSign()/读特征字pw.fpReadSign();SendData();/通知上位机,送出读出器件特征字void Erase()擦除器件pw.fp
25、Erase();SendData();/通知上位机,擦除了器件void Write()/ 写器件BYTE n;pw.fpInitPro();/ 编程前的准备工作SendData();/回应上位机表示进入写器件状态,可以发来数据while(1)if(WaitData()/ 如果等待数据成功if(ComBuf0=0x07)/ 判断是否继续写for(n=2;n<=17;n+)/ComBuf217 为待写入数据块if(!pw.fpWrite(ComBufn)/<<<<<<<<<<<<<<<<<&
26、lt;< 调 用 写该器件一个单元的函数pw.fpProOver();/ 出错了就结束编程ComBuf0=0xff;SendResp();/回应上位机一个字节,表示写数据 出错了WaitData();/等待上位机的回应后就结束 return;nAddress+;/ 下一个单元ComBuf0=1;/ 回应上位机一个字节,表示数据块顺利完成,请求继续SendResp();else if(ComBuf0=0x00)/ 写器件结束break;else可能是通讯出错了pw.fpProOver();return;else/等待数据失败pw.fpProOver();return;pw.fpProOve
27、r();/ 编程结束后的工作Delay_ms(50);/延时等待上位机写线程结束ComBuf0=0;/ 通知上位机编程器进入就绪状态SendData();void Read() 读器件BYTE n;pw.fpInitPro();/ 先设置成编程状态SendData();/回应上位机表示进入读状态while(1)if(WaitResp()等待上位机回应1个字节if(ComBuf0=0)/ComBuf0=0 表示读结束 break;else if(ComBuf0=0xff)/0xff 表示重发 nAddress=nAddress-0x0010;for(n=2;n<=17;n+)/ComBuf
28、217 保存读出的数据块 ComBufn=pw.fpRead();/<<<<<<<<<<<<<<<<<<< 调用写该 器件一个单元的函数nAddress+;/ 下一个单元ComBuf0=6;/ 向上位机发送读出的数据块 SendData(); elsebreak;/等待回应失败pw.fpProOver();/ 操作结束设置为运行状态ComBuf0=0;/ 通知上位机编程器进入就绪状态SendData();void Lock()/ 写锁定位pw.fpLock();SendData()
29、;所支持的FID,请在这里继续添加extern void PreparePro00();FID=00:AT89C51 编程器extern void PreparePro01();FID=01:AT89C2051 编程器extern void PreparePro02();FID=02:AT89S51 编程器void main()SP=0x60;SetVpp5V();/先初始化 Vpp 为 5vSCON=0x00;TCON=0x00;/PCON=0x00;/ 波特率 *2IE=0x00;/TMOD: GATE|C/!T|M1|M0|GATE|C/!T|M1|M0/001 0000 1TMOD=0
30、x21;/T0 用于延时程序TH1=0xff;TL1=0xff;/ 波特率28800*2,注意PCON/SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI/010100 0 0SCON=0x50;TR1=1;Delay_ms(1000);/健日t 1秒后编程器自举ComBuf0=0;SendData();while(1)/ 串口通讯采用查询方式if(!WaitComm()/ 如果超时,通讯出错Delay_ms(500);ComBuf0=0;/ 让编程器复位,使编程器就绪switch(ComBuf1) 根据 FID 设置(ProWork)pw 中的函数指针 case 0:/a
31、t89c51 编程器PreparePro00();break;case 1:/at89c2051编程器PreparePro01();break;case 2:/at89s51 编程器PreparePro02();break;/case 3:支持新器件时,请继续向下添加/ break;/case 4:/ break;default:ComBuf0=0xff;ComBuf1=0xff;/ 表示无效的操作 break;switch(ComBuf0)/ 根据操作ID 跳到不同的操作函数case 0x00:RstPro();编程器复位break;case 0x01:ReadSign();优卖特征字bre
32、ak;case 0x02:Erase();/擦除器件 break;case 0x03:Write();/ 写器件 break;case 0x04:Read();/读器件 break;case 0x05:Lock();/ 写锁定位 break;default:SendData(); break;3.2电机测速程序/*LED.C128X 64 LED驱动程序头文件*/#ifndef LED_H_#define LEDH#include<REG51.H> / 定义背光控制信号sbit LED_BL=P1M;/ 点亮背光灯void LEDLightOn();/ 熄灭背光灯void LEDL
33、ightOff();/ 清屏void LEDClear();/ 初始化void LEDInit();/显示ASCII码void LEDPutChar(unsigned char c);/ 显示字符串void LEDPuts(unsigned char*s);#endif /LED_H_/*LED.C128X 64 LED驱动程序*/#include <INTRINS.H>#include <ABSACC.H>/#include "LED.H"/定义屏幕光标(取值063,光标本身不可见) unsigned char LEDCursor;int i,j;
34、/*LEDLightOn()功能:点亮背光灯*/void LEDLightOn()LED_BL = 1;/*函数: LEDLightOff()功能:熄灭背光灯*/void LEDLightOff()LED_BL = 0;/*函数: LEDGetBF()功能:读出状态位BF返回:BF=1 ,表示忙,不可进行任何操作BF=0,表示不忙,可以进行正常操作*/bit LEDGetBF()unsigned char dat;dat = XBYTE0xD002; /XBYTE 的定义见<ABSACC.H>return (bit)(dat & 0x80);/*函数: LEDWriteCm
35、d()功能:向LED 发送命令参数:cmd:命令字,详见器件的数据手册*/void LEDWriteCmd(unsigned char cmd)while ( LEDGetBF() );XBYTE0xD000 = cmd;/*函数: LEDWriteDat()功能:向LED 写入数据参数:dat,要写入的数据说明:目标地址由地址计数器AC 隐含指定,写完后AC 自动加 1*/void LEDWriteDat(unsigned char dat)while ( LEDGetBF() );XBYTE0xD001 = dat;/*函数: LEDReadDat()功能:从LED 读出数据返回:读出的数
36、据*/*unsigned char LEDReadDat()volatile unsigned char dat;while ( LEDGetBF() );dat = XBYTE0xD003;dat = XBYTE0xD003; / 需要连续执行两次才能够读出真正的数据return dat;*/ /*函数: LEDSetAC()功能:设置DDRAM (显示数据RAM)的AC (地址计数器)值参数:ac:地址计数器值,范围0 63*/void LEDSetAC(unsigned char ac)ac &= 0x3F;ac |= 0x80;LEDWriteCmd(ac);/*函数:LEDC
37、lear()功能:LED 清屏,并使光标回到0*/void LEDClear()LEDWriteCmd(0x01); / 清屏命令LEDCursor = 0;/*函数: LEDDelay()功能:延时(t*100)个机器周期*/void LEDDelay(unsigned char t)unsigned char n;don = 49;while ( -n != 0 ); while ( -t != 0 );/*函数:LEDInit()功能:LED 初始化*/void LEDInit()LEDWriteCmd(0x30); / 设置基本指令集 LEDDelay(3);LEDWriteCmd(0
38、x30); / 设置基本指令集(需要再执行一次)LEDDelay(1);LEDWriteCmd(0x0C);/ /开启显示LEDDelay(3);LEDClear();/ 清屏LEDDelay(250);LEDWriteCmd(0x06); / 设置进入点 LEDDelay(10);/*函数: LEDCheckAC()功能:根据光标位置调整AC*/void LEDCheckAC()switch ( LEDCursor )case 16:LEDSetAC(16); break;case 32:LEDSetAC(8);break;case 48:LEDSetAC(24);break;case 64
39、:LEDCursor = 0;LEDSetAC(0);break;default:break;/*函数: LEDPutChar()功能:显示ASCII 码参数:c为可显示的 ASCII码(0x200x7F)*/void LEDPutChar(unsigned char c)LEDWriteDat(c);LEDCursor+;LEDCheckAC();/*函数: LEDPutHZ()功能:显示汉字参数:ch,cl:汉字编码*/void LEDPutHZ(unsigned char ch, unsigned char cl) if ( LEDCursor & 0x01 )/ 显示汉字时,必
40、须偶地址对准,即光标位置不能是奇数LEDPutChar(' '); / 额外输出一个空格LEDWriteDat(ch);LEDWriteDat(cl);LEDCursor += 2;LEDCheckAC(); /*函数: LEDPuts()功能:显示字符串参数:*s:要显示的字符串(可同时包含 ASCII码和汉字)*/void LEDPuts(unsigned char *s) unsigned char ch, cl; for (;) ch = *s+;if ( ch = '0' ) break;if ( ch < 0x80 ) LEDPutChar(c
41、h); elsecl = *s+;LEDPutHZ(ch,cl); /*显示主程序*/#include"LED.H"#include<REG51.H>/#include "DELAY.H" /* 包 含 延 时 函 数 的 头 部 文 件 delay_us();delay_ms();*/ /*函数: Delay()延时 1ms 65.53st>0 时,延时(t*0.001) st=0 时。延时65.53s*/*unsigned char SD4='1',2,'3','4'速度设定unsig
42、ned char FK4=2,2,'3','4' 速度反馈int D=0;/ 方向控制中间变量unsigned int Pwm=0;/速度产生中间变量unsigned int p=0;unsigned int Value=0;unsigned int Pwm_Value=0;unsigned int m;/unsigned int a,b,c,d;sbit KEY1=P2八0;sbit KEY2=P2A1;sbit KEY3=P2A2;sbit MotorA=P1A6;sbit MotorB=P1A7;bit SWTR;bit SWTF;unsigned int
43、 SWTV;#define Pwm_MAX 255void Delay(unsigned int T)SWTV=T;SWTR=1;while(!SWTF);SWTR=0;SWTF=0;void KEY()if(KEY1=0)Value=Value+1;if(KEY2=0)Value=Value-1;if(Value>255) Value=255;if(Value<0) Value=0;if(KEY3=0)if(D=0)D=1;elseD=0;void PWM_Init()static unsigned char t=0; t+;if(t>Pwm_MAX)t=0; if(t&l
44、t;=Pwm_Value) Pwm=1;elsePwm=0;if(D=0)MotorA=0;MotorB=Pwm;elseMotorA=Pwm;MotorB=0;void Show_Value(unsigned char CH) int i;for(i=0;i<4;i+)LEDPutChar(CHi);void Show_Init()LEDWriteCmd(0x80);LEDPuts("速度设定");LEDWriteCmd(0x90);LEDPuts("速度反馈");LEDWriteCmd(0x88);LEDPuts("速度方向");LEDWriteCmd(0x98);LEDPuts("测控 071 ")
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川长江宜众人才服务有限公司受宜宾南溪产业发展集团有限责任公司委托公开招聘国企工作人员14人考试备考试题及答案解析
- 2026年江苏省徐州市公务员人员招聘考试参考试题与答案详解
- 2026年益阳市资阳区公务员人员招聘考试备考题库与答案详解
- 内江隆昌市公安局招聘警务辅助人员(28人)考试备考试题及答案解析
- 2026年莱芜市莱城区公务员人员招聘笔试备考题库与答案详解
- 2026年梅州市梅江区公务员人员招聘笔试备考题库与答案详解
- 2026上海财经大学计算机与人工智能学院面向全球招募人才笔试备考试题及答案解析
- 纺织厂用工规范办法
- 2026年齐齐哈尔市龙沙区公务员人员招聘考试备考试题与答案详解
- 2026年淀粉及淀粉制品制造行业供需格局研究报告及未来五至十年自主创新与安全可控
- 2025年阳光学院辅导员招聘考试笔试试题及答案解析
- 2025年石河子大学马克思主义基本原理概论期末考试真题汇编
- 66kV及以下架空电力线路设计标准
- 浙江省强基联盟2025-2026学年高二上学期11月期中联考数学试卷(含答案)
- 导游仪容仪表培训大纲
- 广东中考化学三年(2023-2025)真题分类汇编:专题02 物质的分类、物质的组成和结构(解析版)
- 中国融通集团2025届秋季校园招聘笔试历年参考题库附带答案详解
- 2013-2022北京高中合格考化学汇编:海水中的重要元素-钠和氯
- 生殖医院管理制度内容
- 小贴士养成良好生活习惯预防脑血管病
- DLT817-2014 立式水轮发电机检修技术规程
评论
0/150
提交评论