直流电机转速测量与控制程序

合集下载

电机转速控制实验报告

电机转速控制实验报告

电机转速控制实验报告
1. 实验目的
本实验旨在研究电机转速控制的原理和方法,通过实际操作和数据分析来加深对电机控制的理解,并验证控制算法的有效性。

2. 实验原理
电机转速控制是通过改变电机供电电压或者改变电机绕组的接线方式来控制电机的转速。

在本次实验中,我们将采用调制技术来实现电机转速的控制。

3. 实验设备与材料
- 电机:直流电机
- 控制器:单片机控制器
- 传感器:转速传感器
- 电源
- 连接线
4. 实验步骤
1. 搭建实验电路:将电机和传感器连接至控制器,并接通电源。

2. 编写控制程序:根据所选的控制算法,编写相应的控制程序,并将其烧录至控制器中。

3. 运行实验:根据预设条件,控制电机的转速并记录数据。

4. 数据分析:对实测数据进行分析,验证控制算法的有效性。

5. 实验结果与分析
在实验过程中,我们采用了调制技术来实现电机转速的控制。

通过对控制程序的设计和实验数据的分析,我们得出以下结论:
- 当调制信号的频率增加时,电机的转速也随之增加,说明控制算法的设计是成功的。

- 通过调整调制信号的占空比,我们可以实现对电机转速的精确控制。

6. 实验总结
通过本次实验,我们深入了解了电机转速控制的原理和方法。

实验结果表明,调制技术能够有效地实现电机转速的控制,并且可以通过调整参数来实现不同的控制效果。

在实验过程中,我们还学习了如何编写控制程序和分析实验数据。

这些都对我们进一步深入研究电机控制提供了良好的基础。

7. 参考文献
- 电机控制技术原理与应用教材
- 直流电机转速控制实验指导书。

直流电机测速系统课程设计

直流电机测速系统课程设计

西安邮电学院单片机课程设计报告书题目:电机测速系统院系名称:自动化学院学生姓名:专业名称:自动化班级:自动XXXX班时间:20XX年X月X日至 X月XX日电机测速系统一、设计目的随着科技的飞速发展,计算机应用技术日益渗透到社会生产生活的各个领域,而单片机的应用则起到了举足轻重的作用。

在工程实践中,经常会遇到各种需要测量转速的场合,例如在发动机、电动机、机床主轴等旋转设备的试验运转和控制中,常需要分时或连续测量、显示其转速及瞬时速度。

为了能精确地测量转速,还要保证测量的实时性,要求能测得瞬时转速。

因此设计一种较为理想的电机测速控制系统是非常有价值的。

二、设计要求1.用按键控制电机起停;2.电机有两种速度,通过按键来改变速度;3.通过数码管显示每分钟或每秒的转速。

四、设计方案及分析(包含设计电路图)1. STC89C52单片机介绍STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programmable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。

该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

(1)单片机最小系统单片机最小系统电路如图所示,由主控器STC89C52、时钟电路和复位电路三部分组成。

单片机STC89C52作为核心控制器控制着整个系统的工作,而时钟电路负责产生单片机工作所必需的时钟信号,复位电路使得单片机能够正常、有序、稳定地工作。

图单片机最小系统(2)晶振电路(3)复位电路复位是单片机的初始化操作。

其主要功能是把PC 初始化为0000H ,使单片机从0000H 单元开始执行程序。

除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。

2. ST151光电转速传感器是根据光敏二极管工作原理制造的一种感应接收光强度变化的电子器件,当它发出的光被目标反射或阻断时,则接收器感应出相应的电信号。

直流电机转速测控实验

直流电机转速测控实验

直流电机转速测控实验一、实验目的1. 掌握电机转速的测量原理;学会根据被测环境、对象不同选择合适的传感器测量转速;2. 掌握电机转速控制的原理;学会用计算机和传感器组成转速测控系统。

二、实验原理图1所示为计算机直流电机转速测控系统原理图。

图1 计算机测控直流电机转速原理框图根据被测环境和对象选择不同转速传感器(光电、霍尔、磁电)实现直流电机转速的测量及控制。

三. 实验仪器和设备1. CSY-5000型传感器测控技术实训公共平台;2. 环形带综合测控实验台;3. 数据采集模板及测控软件(LabVIEW试用版);4. 12V直流电机调节驱动挂箱;5. 光电式、霍尔式、磁电式转速传感器各一件;6. PC机及RS232通讯接口。

四.实验预习要求1.查阅资料,了解旋转轴转速测量的常用方法;2.掌握采用光电式、霍尔式、磁电式传感器测量转速的原理及特点;3.理解计算机测控直流电机转速的系统工作原理;4.熟悉CSY-5000型传感器测控技术实训平台的硬件配置。

五. 实验步骤及内容第一部分:转速测量1、在关闭公共平台主机箱电源开关的前提下,连接数据采集模板电源线、RS232通讯线;2、根据你选用的转速传感器,按转速传感器附录图1、图2、图3示意图安装接线;(注意光电、霍尔传感器为+5V供电,磁电传感器为+15V供电)3、主机箱上0~12V可调电源与电压表(电压表量程选择20V档)及环形带综合测控实验台电机(环形带综合测控实验台背面)接口并接(注意接口的相应极性);4、检查接线无误后,首先将主机箱上0~12V可调旋钮逆时针方向缓慢调节到底(起始输出电压最小);然后桌面“环形带综合测试软件”(或者启动计算机中的测试软件目录“SensorTest.vi”),双击打开,显示图2环形带综合测试程序软件界面;再打开主机箱电源开关给测量系统供电。

图2 环形带综合测试软件界面5、在计算机的环形带综合测试程序软件界面采单栏下方栏点击运行按钮,串口通讯正常后选择测试软件中“手动转速控制与测量”选项,软件界面显示为图3转速测量选择传感器类型界面;在界面下方选择“传感器类型”为现在做测量转速实验相对应的转速传感器。

基于STM32直流电机控制程序

基于STM32直流电机控制程序

STM32 直流减速电机控制直流减速电机控制中,最常用的方法就是通过PWM来控制直流电机的转速。

在控制小车走直线的过程中,需要两者的转速一置(如果要走得很直,还需要在短时间内保证两者的行程大致相当,这可以用PID算法来控制,以后的文章中会专门叙述)。

因此,在检测到两者转速不一样时,需要动态调整其中一个或两个轮子的PWM的点空比(简单点的就以一个轮为基准,调整另外一个轮子即可;如果以一个固定的标准的话,需要调整两个轮子的PWM占空比)。

程序第一步:设置GPIO,略(输出PWM的管脚用Mode_AF_PP即可)程序第二步:设置定时器,(保证产生两路PWM即可,我用的是TIM4)void TIM4_Configuration(void){TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;//时间基初始化TIM_TimeBaseInitStructure.TIM_Period=144; //18K/144=125Hz,这个是电机PWM的频率TIM_TimeBaseInitStructure.TIM_Prescaler=4000; //72000000/4000=18KTIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0x0000;TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);//输出比较模式设置,用于4路PWM输出TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2; //输出PWMTIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //使能正向通道TIM_OCInitStructure.TIM_OutputNState=TIM_OutputState_Disable; //失能反向通道TIM_OCInitStructure.TIM_Pulse=PWM_L; //左轮DIR的占空比TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low; //输出极性为低电平TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCPolarity_High;//互补输出极性为高电平TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;TIM_OC1Init(TIM4,&TIM_OCInitStructure); //PWM_L初始化TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Disable); //改变点空比后,立即产生效应TIM_OCInitStructure.TIM_Pulse=PWM_R; //左轮PWM的占空比TIM_OC2Init(TIM4,&TIM_OCInitStructure); //PWM_R初始化TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Disable); //改变点空比后,立即产生效应//使能定时器4TIM_Cmd(TIM4,ENABLE);TIM_CtrlPWMOutputs(TIM4,ENABLE);}程序第三步:在SysTick中断中,读取两个轮子的速(具体的方法是:每0.1秒读一次,并以此人作为速度的依据),并比较,如果以右轮为基准,则调整左轮的PWM占空比。

直流电机调速系统设计与实现

直流电机调速系统设计与实现

直流电机调速系统设计与实现直流电机调速系统是一种常见的电机控制系统,通过调节电机的转速和输出功率,可以实现对机械设备的精准控制。

在工业生产和机械设备中得到广泛应用。

本文将介绍直流电机调速系统的设计和实现过程。

一、系统设计1. 电机选择:首先需要选择适合的直流电机作为调速系统的执行器。

根据需要的输出功率和转速范围,选择合适的电机型号和规格。

2. 电机驱动器选择:电机驱动器是控制电机转速的核心设备。

根据电机的额定电流和电压,选择合适的电机驱动器。

常见的电机驱动器包括PWM调速器、直流电机驱动模块等。

3. 控制器选择:控制器是调速系统的大脑,负责接收输入信号,并输出控制信号来调节电机转速。

常见的控制器包括单片机、PLC等。

4. 传感器选择:为了实现闭环控制,通常需要使用传感器来检测电机的转速和位置。

根据具体的需求选择合适的传感器,如编码器、霍尔传感器等。

5. 调速算法设计:根据应用需求,设计合适的调速算法。

常见的调速算法包括PID控制、模糊控制等。

二、系统实现1. 硬件连接:根据设计需求,将电机、电机驱动器、控制器和传感器等硬件设备连接起来。

确保电气连接正确无误。

2. 软件编程:根据设计的调速算法,编写控制程序。

在控制器上实现信号的采集、处理和输出,实现电机的闭环控制。

3. 参数调试:在系统搭建完成后,进行参数调试。

根据实际效果,调节PID参数等,使电机能够稳定运行并达到设计要求的转速和功率输出。

4. 性能测试:进行系统的性能测试,包括转速稳定性、响应速度等。

根据测试结果对系统进行优化和改进。

5. 系统应用:将设计好的直流电机调速系统应用到具体的机械设备中,实现精准的控制和调节。

根据实际应用情况,对系统进行进一步调优和改进。

通过以上设计和实现过程,可以建立一个稳定可靠的直流电机调速系统,实现对电机转速和功率的精确控制。

在工业生产和机械领域中得到广泛应用,提高了生产效率和设备的精度。

希望本文对直流电机调速系统的设计和实现有所帮助,让读者对这一领域有更深入的了解。

实验13--直流电机测速实验

实验13--直流电机测速实验

4562、由DAC0832经功放电路驱动直流电机,计数光电开关通关次数并经过换算得出直流电机的转速,并将转速显示在LED上。

3、G5区的0、1号按键控制直流电机转速快慢, (最大转速≈96r/s,5V,误差±1r/s)六、演示程序(完整程序见目录SPEED);键盘、LED显示子程序请参阅综合实验一.MODEL TINYEXTRN CMD_8279:WORD, DATA_8279:WORDEXTRN Display8:NEAR, SCAN_KEY:NEAR,GetKeyA:NEARPCIBAR1 EQU 14H ;PCI9052 I/O基地址(用于访问局部配置寄存器)PCIBAR3 EQU 1CH ;8位I/O空间基地址(它就是实验仪的基地址,;也为DMA & 32 BIT RAM板卡上的8237提供基地址) PCIIPR EQU 3CH ;IRQ号INTCSR EQU 4CH ;PCI9052 INTCSR地址mask_int_9052 EQU 24HVendor_ID EQU 10EBH ;厂商ID号Device_ID EQU 8376 ;设备ID号VoltageOffset EQU 5 ;0832调整幅度.STACK 200.DATAIO8259_0 DW 00F0HIO8259_1 DW 00F1HRD_IO8259 DW 0000HCon_8253 DW 00E3HT0_8253 DW 00E0HT1_8253 DW 00E1HDA0832 DW 00D0HIO_Bit8_BaseAddress DW ?PCI_IO_BaseAddress0 DW ?PCI_IRQ_NUMBER DB ?INT_MASK DB ?INT_Vector DB ?INT_CS DW ? ;保护原中断入口地址INT_IP DW ?msg0 DB 'BIOS不支持访问PCI $'msg1 DB '找不到Star PCI9052板卡 $'msg2 DB '读PCI9052 I/O基地址时出错$'msg3 DB '读8位I/O空间基地址时出错$'msg4 DB '读IRQ号出错$'buffer DB 8 DUP(0) ;显示缓冲区,8个字节buffer1 DB 8 DUP(0) ;显示缓冲区,8个字节VOLTAGE DB 0 ;转换电压数字量Count DW 0 ;一秒转动次数NowCount DW 0 ;当前计数值kpTime DW 0 ;保存上一次采样时定时器的值bNeedDisplay DB 0 ;需要刷新显示.CODESTART: MOV AX,@DATAMOV DS,AXMOV ES,AXNOPCALL InitPCICALL ModifyAddress ;根据PCI提供的基地址,将偏移地址转化为实地址CALL ModifyVector ;修改中断向量、允许中断MOV bNeedDisplay,1 ;显示初始值MOV VOLTAGE,99H ;初始化转换电压输入值,99H-3.0VMOV Count,0 ;一秒转动次数MOV NowCount,0 ;当前计数值MOV kpTime,0 ;保存上一次采样时定时器的值CALL DAC0832 ;初始D/ACALL Init8253CALL Init8259STIMAIN: CALL IfExitCALL GetKeyA ;按键扫描JNB Main1JNZ Key1Key0: MOV AL,VoltageOffset ;0号键按下,转速提高ADD AL,VOLTAGECMP AL,VOLTAGEJNB Key0_1MOV AL,0FFH ;最大Key0_1: MOV VOLTAGE,AL ;D/ACALL DAC0832JMP Main2Key1: MOV AL,VOLTAGE ;1号键按下,转速降低SUB AL,VoltageOffsetJNB Key1_1XOR AL,AL ;最小Key1_1: MOV VOLTAGE,ALCALL DAC0832 ;D/AJMP Main2Main1: CMP bNeedDisplay,0JZ MAINMOV bNeedDisplay,0 ;1s定时到刷新转速Main2: CALL RateTest ;计算转速/显示JMP MAIN ;循环进行实验内容介绍与测速功能测试;转速测量/显示RateTest: MOV AX,CountMOV BL,10DIV BLCMP AL,0JNZ RateTest1MOV AL,10H ;高位为0,不需要显示RateTest1: MOV buffer,AHMOV buffer+1,ALMOV AL,VOLTAGE ;给0832送的数据AND AL,0FHMOV buffer+4,ALMOV AL,VOLTAGEAND AL,0F0HROR AL,4MOV buffer+5,ALMOV buffer+2,10H ;不显示MOV buffer+3,10HMOV buffer+6,10HMOV buffer+7,10HLEA SI,bufferLEA DI,buffer1MOV CX,8REP MOVSBLEA SI,bufferCALL Display8 ;显示转换结果RETTimer0Int: MOV bNeedDisplay,1MOV AX,NowCountSHR AX,1SHR AX,1MOV Count,AX ;转一圈,产生四个脉冲,Count = NowCount/4MOV NowCount,0RETIntProc: PUSH AXPUSH DXCALL ClearIntMOV DX,RD_IO8259IN AL,DXIN AL,DX ;判断由哪个中断源引起的中断CMP AL,08HJNZ IntProc1CALL Timer0IntJMP IntProc2IntProc1: CMP AL,0FHJNZ IntProc2CALL CountIntIntProc2: MOV DX,IO8259_0MOV AL,20HOUT DX,ALPOP DXPOP AXIRETCountInt: MOV DX,Con_8253MOV AL,40HOUT DX,AL ;锁存MOV DX,T1_8253IN AL,DXMOV AH,ALIN AL,DXXCHG AL,AH ;T1的当前值XCHG AX,kpTimeSUB AX,kpTimeCMP AX,100JB CountInt1 ;前后二次采样时间差小于100,判断是干扰INC NowCountCountInt1: RETInit8253 PROC NEARMOV DX,Con_8253MOV AL,34HOUT DX,AL ;计数器T0设置在模式2状态,HEX计数MOV DX,T0_8253MOV AL,12HOUT DX,ALMOV AL,7AHOUT DX,AL ;CLK0=31250Hz,1s定时MOV DX,Con_8253MOV AL,74HOUT DX,AL ;计数器T1设置在模式2状态,HEX计数MOV DX,T1_8253MOV AL,0FFHOUT DX,ALMOV AL,0FFHOUT DX,AL ;作定时器使用RETInit8253 ENDPInit8259 PROC NEARMOV DX,IO8259_0MOV AL,13HOUT DX,ALMOV DX,IO8259_1MOV AL,08HOUT DX,ALMOV AL,09HOUT DX,ALMOV AL,7EHOUT DX,ALRETInit8259 ENDP;数模转换,A-转换数字量DAC0832 PROC NEARMOV DX,DA0832MOV AL,VOLTAGEOUT DX,ALRETDAC0832 ENDP;IfExit、InitPCI、ModifyAddress、ModifyVector、ClearInt、Exit子程序请参阅8259实验END START七.实验扩展及思考题实验内容:在日光灯或白炽灯下,将转速调节到25、50、75,观察转盘有什么现象出来。

基于51单片机的直流电机转速PI控制

基于51单片机的直流电机转速PI控制
2.1 直流电机转速控制电路原理图
… …
图 xx 电路原理图
上图中 LED 数码管显示中的 74LS164 芯片的引脚及功能如下所述:
芯片引脚功能对照表
符号 SA、SB Q0~Q7 CP(CLK) VCC GND /MR(/CLR)
功能 串行数据输入端 并行数据输出端 时钟输入端(上升沿有效) 电源正(5V) 接地 清零端(低电平有效)
直流电机 PI 转速控制—基于 51 单片机
1.项目系统组成
本项目由 STC89C52RC 单片机最小系统,12MHZ 晶振。直流电机驱动电路、直流电机(5V)、光电测 速电路以及数码管显示电路组成。详细器件见下文电路图。
2.直流电机转速控制电路原理
直流调速的方法有多种,本文是基于 PWM(脉冲宽度调制)技术,改变直流电机等效电枢电压,以此 在一定范围实现直流电机的调速。
void timer1() interrupt 3 {
TR1=0; TH1=pwmh; TL1=pwml; PWM1=0;
//T1 中断响应函数
//关闭定时器 T1 //T1 重置初值 //T1 重置初值,改变 PWM 占空比 //输出低电平
}
void PID_pwm()
{
unsigned int speed=0,pwm=0,pwmhh=0,pwmll=0; speed=10*pulse; //脉冲数换算为转速(转/分)speed=60*pulse*1000/(12*50*10)
综上所述,要想电机正转,则需要 PWM1=1,同时 PWM2=0;要想电机反转,则需要 PWM2=1,同时 PWM1=0;要想电机停止,则需要 PWM1=1,同时 PWM2=1,或者 PWM1=0,同时 PWM2=0。

直流电机转速计算机控制实验结论

直流电机转速计算机控制实验结论

直流电机转速计算机控制实验结论
在本次实验中,我们通过计算机控制技术实现了对直流电机转速的有效调节。

实验结果表明,计算机控制技术在直流电机控制领域具有显著的优势和应用前景。

首先,通过实验数据的分析,我们发现计算机控制技术可以实现对直流电机转速的精确控制。

在实验过程中,我们通过改变输入的电压或电流,观察到了直流电机转速的相应变化。

这表明计算机控制技术可以快速、准确地响应指令,实现对电机转速的精细调节。

其次,计算机控制技术还具有灵活性高的优点。

在实验中,我们通过编写不同的控制程序,实现了对直流电机不同转速模式和响应时间的控制。

这使得计算机控制技术在不同的应用场景中具有广泛的应用前景。

此外,我们还发现计算机控制技术可以有效地提高直流电机的能效。

在实验中,我们通过优化控制算法,减少了电机的能耗并提高了其运行效率。

这为节能减排和可持续发展提供了重要的技术支持。

综上所述,直流电机转速计算机控制实验结果表明,计算机控制技术在直流电机控制领域具有广泛的应用前景和重要的价值。

未来,我们可以通过进一步研究和开发,实现更加高效、智能的电机控制系统,为工业自动化和智能制造的发展做出更大的贡献。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

直流电机转速测量与控制程序
#include "reg51.h"
#include "absacc.h"
#define LEDLen 6
#define Tick 10 // 10 x 100us = 1ms
unsigned int C100us; // 100us记数单元
xdata unsigned char CS0832 _at_ 0xb000;
xdata unsigned char OUTBIT _at_ 0x8002; // 位控制口xdata unsigned char OUTSEG _at_ 0x8004; // 段控制口xdata unsigned char IN _at_ 0x8001; // 键盘读入口
unsigned char LEDBuf[LEDLen]; // 显示缓冲
code unsigned char LEDMAP[] = { // 八段管显示码
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
code unsigned char KeyTable[] = { // 键码定义
0x16, 0x15, 0x14, 0xff,
0x13, 0x12, 0x11, 0x10,
0x0d, 0x0c, 0x0b, 0x0a,
0x0e, 0x03, 0x06, 0x09,
0x0f, 0x02, 0x05, 0x08,
0x00, 0x01, 0x04, 0x07
};
long int n;
unsigned char flag;
unsigned char DA;
unsigned char Key_temp;
unsigned char k_TEMP[2];
void time1_int(void);
void delay(unsigned char CNT)
{
unsigned char i;
while (CNT-- !=0)
for (i=50; i !=0; i--);
}
unsigned char TestKey()
{
OUTBIT = 0; // 输出线置为0
return (~IN & 0x0f); // 读入键状态(高四位不用) }
unsigned char GetKey()
{
unsigned char Pos;
unsigned char i;
unsigned char k;
i = 6;
Pos = 0x20; // 找出键所在列
do {
OUTBIT = ~ Pos;
Pos >>= 1;
k = ~IN & 0x0f;
} while ((--i != 0) && (k == 0));
// 键值= 列x 4 + 行
if (k != 0) {
i *= 4;
if (k & 2)
i += 1;
else if (k & 4)
i += 2;
else if (k & 8)
i += 3;
OUTBIT = 0;
do delay(10); while (TestKey()); // 等键释放
return(KeyTable[i]); // 取出键码
} else return(0xff);
}
void DisplayLED()
{
unsigned char i;
unsigned char Pos;
unsigned char LED;
Pos = 0x20; // 从左边开始显示for (i = 0; i < LEDLen; i++) {
OUTBIT = 0; // 关所有八段管LED = LEDBuf[i];
OUTSEG = LED;
OUTBIT = Pos; // 显示一位八段管delay(5);
Pos >>= 1; // 显示下一位
}
OUTBIT = 0; // 关所有八段管}
void time1_int(void) interrupt 3
{
C100us--;
if (C100us == 0)
{
C100us = Tick;
TR0 = 0;
TR1 = 0;
n=TH0*256+TL0;
TH0 = 0;
TL0 = 0;
TH1 = 255 - 50;
TL1 = 255 - 50;
flag = 1;
TR0 = 1;
TR1 = 1;
}
}
void main()
{
unsigned char i = 0;
//TMOD = 0X05; // T0计数方式C100us = Tick;
n = 0;
TMOD = 0X15;
TH0 = 0;
TL0 = 0;
TH1 = 255 - 50; // 定时100US
TL1 = 255 - 50;
ET1 = 1; // 开中断
EA = 1;
while(1){
if (TestKey())
{
Key_temp = GetKey() & 0x0f ;
LEDBuf[i] = LEDMAP[Key_temp];
k_TEMP[i] = Key_temp;
i++;
if(i==2)
{
i = 0;
break;
}
}
}
Key_temp = k_TEMP[0]*10+k_TEMP[1];
DA = 0x2f;
CS0832 = DA;
TR0 = 1;
TR1 = 1;
while(1){
while(flag)
{
LEDBuf[4] = LEDMAP[n/10];
LEDBuf[5] = LEDMAP[n%10];
if(n>Key_temp)
{ DA--;
CS0832 = DA;
}
if(n<Key_temp)
{
DA++;
CS0832 = DA;
}
if(n==Key_temp)
{TR0=0;
TR1=0;
}
flag = 0;
}
DisplayLED(); // 显示计数值}
}。

相关文档
最新文档