旋转编码器数码管定时器显示
旋转编码器控制12864液晶多级菜单显示
(5)、工作电流:2.0mAmax
5、接口说明
管 管脚 电平 脚 号
1 VSS 0V
2 VDD 5.0V
3 V0
说明
逻辑电源地。 逻辑电源正。 LCD 驱动电压,应用时在 VEE 与 V0 之间加一 10K 可调电阻。
4 D/I H/L
5 R/W H/L
6
E H.H/L
7 DB0 H/L
8 DB1 H/L
Line 0 1/0 1/0 1/0 1/0 …………
1/0 1/0 1/0 DB0
Line 1 1/0 1/0 1/0 1/0 …………
1/0 1/0 1/0 DB1
Line 2 1/0 1/0 1/0 1/0 ………… X=0
1/0 1/0 1/0 DB2
Line 3 1/0 1/0 1/0 1/0 …………
(4)、输入电压:Vee~Vdd
(5)、工作温度
:0~55℃(常温) / -20~70℃(宽温)
(6)、保存温度
:-10~65℃
4、电气特性
(1)、输入高电平
:3.5Vmin
(2)、输入低电平(Vil):0.55Vmax
(3)、输出高电平( ):3.75Vmin
(4)、输出低电平(Vol):1.0Vmax
(1)、显示开/关设置
L
L
L
L
H
H
H
H
H H/L
功能:设置屏幕显示开/关。 DB0=H,开显示;DB0=L,关显示。不影响显示 RAM(DD RAM)中的内容。
(2)、设置显示起始行
L
L
H
H
行地址(0~63)
功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由 Z 地址计数 器控制的,该命令自动将 A0-A5 位地址送入 Z 地址计数器,起始地址可以是 0-63 范围 内任意一行。Z 地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后 自动加一。
单片机程序编码器
if(B_in) value++;
else value--; //value为编码器的值
P3IF=P3IF|0x04; //改上升沿触发
}
}
/************************************************************************/
* MCU: AT89S52 晶振:11.0592MHz *
* *
* 版本:V1.1 (2009/04/29) *
* *
* 3位数码管显示 *
* *
扫描编码器子函数
在编码器引脚A为低电平期间:
编码器引脚B从0到1为正转,编码器引脚B从1到0为反转。
**********************************************************/
void scan_encoder(void)
{
static bit Curr_encoder_b; //定义一个变量来储存当前B信号
对于方波信号,A,B两相相差90度相(1/4T),这样,在0度相位角,90度,180度,270度相位角,这四个位置有上升沿和下降沿,这样,实际上在1/4T方波周期就可以有角度变化的判断,这样1/4的T周期就是最小测量步距,通过电路对于这些上升沿与下降沿的判断,可以4倍于PPR读取角度的变化,这就是方波的四倍频。这种判断,也可以用逻辑来做,0代表低,1代表高,A/B两相在一个周期内变化是0 0,0 1,1 1,1 0 。这种判断不仅可以4倍频,还可以判断旋转方向。
}
if(updata)
{
updata = 0 ;
51单片机检测光电旋转编码器每周实际脉冲数
程序代码/**************************************************************** **** 文件名: main.c** 创建人: 飘扬** 日期: 2006.10.04** 修改人:** 日期:** 描述: 本程序使用伟纳300A型实验板,来检测光电旋转编码器的实际每周** 输出脉冲数。
程序中,定时器0用于8位数码管动态扫描定时,时间** 为1ms(12MHZ晶振)。
定时器1工作于模式1,计数器方式,直接测量** 接在T1脚的脉冲个数。
外部中断0,工作于边沿触发方式,接在旋转** 编码器的Z信号输出上,用于检测编码器完整旋转一周。
8位数码管,** 接成动态扫描,接在P0和P2口。
左4位,用来显示上一周的实际脉冲** 数,右4位,用来显示当前周的脉冲数。
**** 实际使用,感觉效果还可以。
程序准确的测量出某牌光电旋转编码** 器(400脉冲),实际工作时,双路信号输出脉冲数量不等,及脉冲** 数与标称值的误差情况。
**** 本程序的显示部分,直接修改于伟纳提供的数码管显示1-8例程。
**----------------------------------------------------------------*/#include <reg51.h>#include <intrins.h>unsigned char data dis_digit;unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 30x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, offunsigned char data dis_buf[8];unsigned char data dis_index;unsigned int counter1,counter2; //左右计数器数值void main(){P0 = 0xff;P2 = 0xff;TMOD = 0x51; //定时器0工作在模式1定时器方式,定时器1工作在模式1计数器方式TH0 = 0xFC;TL0 = 0x17;TH1 = 0;TL1 = 0;IE = 0x83; //开定时器0中断和外部中断0IT0 = 1; //外部中断0为边沿触发方式//显示初始化counter1=0; //右测显示的本周当前脉冲数counter2=0; //左测显示的上一周脉冲数dis_digit = 0xfe;dis_index = 0;TR0 = 1;//主程序TR1 = 1;while(1){counter1=(TH1*0xff)+TL1;dis_buf[0] = dis_code[0x0a];dis_buf[1] = dis_code[counter2/100];dis_buf[2] = dis_code[(counter2%100)/10];dis_buf[3] = dis_code[counter2%10];dis_buf[4] = dis_code[0x0a];dis_buf[5] = dis_code[counter1/100];dis_buf[6] = dis_code[(counter1%100)/10];dis_buf[7] = dis_code[counter1%10];}}//外部中断0void int0() interrupt 0{TL1=0;TH1=0;counter2=counter1;}void timer0() interrupt 1// 定时器0中断服务程序, 用于数码管的动态扫描// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量// dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时, // 选通P2.0口数码管// dis_buf --- 显于缓冲区基地址{TH0 = 0xFC;TL0 = 0x17;P2 = 0xff; // 先关闭所有数码管P0 = dis_buf[dis_index]; // 显示代码传送到P0口P2 = dis_digit; //dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管dis_index++; //dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描}。
STC15F204EA单片机旋转编码器版白光T12控制器代码(开发固件)(by金向维)
c=a;//就直接取a
c=c/10;
baiwei=c/100;//计算百位
c=c%100;
shiwei=c/10;//计算十位
c=c%10;
gewei=c;//计算个位
for(d=0;d<20;d++)//显示部分,每次显示20个循环(20帧)
{
if(a<0)//如果a是负数,则百位显示负号
1501,1574,1619,1663,1706,1751,1756,1776,1810,1853,1903,1958,2017,2078,2141,
2204,2266,2327,2387,2444,2500,2554,2607,2657,2706,2738,2800,2844,2889,2931,
ADC_RESL=ADC_RESL&0x03;
ntcdianya=(ADC_RES*4+ADC_RESL);
ntcdianya=2490*ntcdianya/cankaodianya0;//计算ntc电压,单位mV
for(a=0;wendubiao[a]<ntcdianya;a++)//查表计算室温
sw=0;//打开十位
guanduan();//延时关断十位
gonggonghanshu10(duanma[gewei]);//显示个位
gw=0;//打开个位
guanduan();//延时关断个位
}
}
/********************************ADC公共函数**************************************************/
while(a--){源自for(b=0;b<1200;b++);
编码器、显示译码器和数码管
实验三:编码器、显示译码器和数码管班级:姓名:学号:实验日期:一、实验目的:(1)了解编码器,译码器及七段数码管的工作原理。
(2)掌握编码器,七段显示译码器及数码管的使用及测试方法。
(3)学会使用编码器74LS148及七段显示译码器74LS47、数码管组成编码—译码显示系统。
二、实验设备与器件(1)集成芯片74LS148、74LS04、74LS47、共阳极数码管(2)数字万用表(3)数电实验箱三、预习要求(1)查阅资料,了解关于编码器,显示译码器及数码管的介绍(2)了解74LS148,74LS47功能及使用方法(3)掌握编码—译码显示系统的组成原理。
四、预习思考题1、什么是优先编码器?它与普通编码器有什么区别?允许同时在几个输入端有输入信号,编码器按输入信号排定的优先顺序,只对同时输入的几个信号中优先权最高的一个进行编码。
1,输入信号不同:普通的一次只能输入一个信号,但是优先编码器可同时输入多个;2、输入信号优先级不同:在普通编码器中,任何时刻只允许输入一个编码信号,优先编码器在设计时已经将各输入信号的优先顺序排好,当几个信号同时输入时,优先权最高的信号优先编码。
3、处理能力不同:优先编码器相比普通编码器电路有更强的处理能力,因为其能处理所有的输入组合情况。
2、显示译码器74LS47输出的有效驱动电平为高电平还是低电平?输出的是低电平有效;3、显示译码器74LS47能译码显示9以后的数字吗?为什么?9以后的数字无法显示,因为9以后的无法有意义的编译;4、如何测试一个数码管的好坏?一、PFC(功率因数)的高低但是不一定PFC高就是好,还要整体的斜波小,纹波小,干扰低(因为有些厂家故意把PFC做的很高但是忽略了电磁兼容这一部分)。
二、转换效率转换效率的高低,偏差值的大小和稳定,打个比方:AC170-250V这个工作电压区间,我可以尝试从170V-250V去调试,由低到高的不断变化电压,可以在功率计上看到“转换效率,PFC”的波动是否大,来证明其稳定性。
数电实验一:倒计时定时器、BCD代码转化器(设计报告)
数电实验1设计报告实验名称:倒计时定时器 实验目的:1.掌握组合逻辑与时序逻辑电路的设计方法及调试方法2.熟练掌握常用MSI 逻辑芯片的功能及使用方法3.初步掌握Verilog HDL 数字系统设计方法4.熟悉PLD 实验箱的结构和使用及Quartus II 软件的基本操作5.掌握采用Quartus II 软件和实验箱设计实现逻辑电路的基本过程设计任务及要求:一、 倒计时定时器:用适当的中小规模集成电路设计一个定时器,实现60s 以内的定时功能,可以设置60s 以内任何时间作为倒计时的起点,将设计下载到实验箱并进行硬件功能测试。
要求:用开关或按键进行定时设置倒计时计数状态用两位数码管显示计时结束时用彩灯或声响作为提电路设计过程: 1.关于74192芯片 可实现减法计数:74HC192 两位:两片74HC1922.不进行任何的反馈,预置也不起作用的一位倒计时器U174192N A 15B 1C 10D 9UP 5QA 3QB 2QC 6QD 7DOWN4~LOAD 11~BO 13~CO12CLR 14加法计数功能,UP 为加法脉冲输入端 减法计数功能,Down 为减法脉冲输入端 减法计数到0000时,借位Bo =0 加法计数到1111时进位Co =03.计到零停止计数功能,设置启动开关,启动前停在预置值5.加入译码器完成数码管显示设计原理图:数码管动态扫描原理图:分析统图:管脚分配方案:实验题目:BCD代码转换器实验目的:1、掌握组合逻辑与时序逻辑电路的设计方法及调试方法2、熟练掌握常用MSI逻辑芯片的功能及使用方法3、初步掌握Verilog HDL数字系统设计方法4、熟悉PLD试验箱的结构和使用及Quartus 2软件的基本操作5、掌握用Quartus2软件和实验箱设计实现逻辑电路的基本方法设计任务:BCD代码转换1、8421码与5421码之间的转换2、余3码与5421之间的转换3、8421码与2421码之间的转换4、5421码与2421码之间的转换用74283和其它中小规模组合电路实现代码之间的双向可控转换,完成对逻辑设计的波形仿真、下载电路设计步骤(一)、代码转换的设计:写出真值表,找出逻辑关系,利用加法器和逻辑器件,设计对应的电路原理图1、8421码与5421码8421:0000、0001、0010、0011、0100、0101、0110、0111、1000、10015421:0000、0001、0010、0011、0100、1000、1001、1010、1011、1100方法:8421到5421后五个数加00115421到8421后五个数加1101利用开关控制器:1表示8421到5421,0表示54214到84212、余3码与5421码余3码:0011、0100、0101、0110、0111、1000、1001、1010、1011、11005421码:0000、0001、0010、0011、0100、1000、1001、1010、1011、1100方法:余3码到5421:前五个数加11015421到余3码:前五个数加0011利用开关控制器:0表示余3码到5421,1表示5421到余3码3、8421吗与2421码8421:0000、0001、0010、0011、0100、0101、0110、0111、1000、10012421:0000、0001、0010、0011、0100、1011、1100、1101、1110、1111方法:8421到2421:后五个数加01102421到8421:后五个数加1010利用开关控制器:1表示8421到2421,0表示2421到84214、5421码与2421码5421码:0000、0001、0010、0011、0100、1000、1001、1010、1011、11002421码:0000、0001、0010、0011、0100、1011、1100、1101、1110、1111方法:5421到2421:后五个数加00112421到5421:后五个数加1101利用开关控制器:1表示2421到5421,0表示5421到2421原理图、下载电路及管脚分配:1、8421码与5421码之间的转换管脚分配:2、余三与5421码之间的转换管脚分配:3、8421码与2421码管脚分配:4、5421码与2421码管脚分配:。
CM系列智能式计数器定时器使用说明书
*若以上提供给您的型号仍不能满足您的使用要求,请您与公司总部联系,我们会尽最大的努力满足您的订货。
特点:CM □- P S □ □ AA:进口拨码 B:国产拨码1:表示一段设定 2:表示二段设定显示位数:表示四、五、六位显示S:比率设定P:表示预置外型尺寸:48H*48W、72H*72W 8:48H*96W CM系列仪表型号CM7-PS 61A(CM7-PS 61B )CM7-PS 62A(CM7-PS 62B )CM 8-PS51A(CM7-PS51B )CM 8-PS52A(CM7-PS52B )尺寸(mm)L ED位数段设定继电器输出24V供电供电电源6位单段AL2可订做A C/DC 100~240V A C/DC 100~240V A C/DC 100~240V A C/DC 100~240V6位两段AL1;AL2可订做5位单段AL2可订做5位72H *72W CM 4-PS 41A(CM 4-PS 41B )4位单段AL2可订做A C/DC 100~240V 48H *48W 72H *72W 48H*96W 48H*96W两段AL1;AL2可订做整机功耗<5W供电电源CM4、CM7、CM8:AC/DC 100~240V ±15% 输出类型继电器触点及晶体管同时输出继电器触点容量AC 250V/3A或DC 30V/3A 晶体管输出容量DC 30V/50mA外供电源D C 24V±2V 50mA m ax 绝缘电阻≥100M Ω抗干扰电源:±2kV 输入:±2kV 抗振动10~55H z 0.75mm 参数保存10年环境温度0~50℃环境湿度35~85%R HCM系列智能式计数器/定时器使用说明书◎单排5位或6位LED数码管显示;◎多种封装尺寸可选:48H*48W、72H*72W、48H*96W;◎用拨码及按键设定参数值;◎可逆计数功能,4种输入方式:A、B、C、D;◎两个输出通道(继电器或晶体管):AL1、AL2;12种输出方式:F、N、 R、C、K1、K2、P、Q、A、D、H、L;◎停电记忆功能;◎按键及拨码保护功能;◎按键及外接端子复位功能;◎定时暂停功能;◎8种定时方式,可选十进制或六十进制;◎定时双延时功能,输出延时单位任意选择h(小时)、m(分)、s(秒);一、型号二、技术参数◆计数器参数◆定时器参数输入信号触发沿输入阻抗计数速度计数范围输出延时时间比率设置范围脉冲信号:方波、正弦波;5≤H≤30V 0≤L≤1V 上升沿≥10KΩ5/30/100/1000/3000CPS-1999~9999(4位,最多可保留3位小数显示)-19999~99999(5位,最多可保留4位小数显示)-199999~999999(6位,最多可保留6位小数显示)0.01s~99.99h(4位);0.01s~999.99h(5位);0.01s~9999.99h(6位)0.001~9999(4位);0.0001~999.99(5位);0.00001~9999.99(6位)91+0.54525-0←←←←←←303067.5+0.81467.5+0.8→→→→→→→→CM8CM7CM8注:若仪表有新的改动,恕不再另外通知,请您按实际仪表接线图接线。
旋转编码器工作原理 __编码器
旋转编码器工作原理 __编码器旋转编码器工作原理引言概述旋转编码器是一种用于测量旋转运动的装置,它能够将旋转运动转换成电信号输出。
在工业自动化领域,旋转编码器被广泛应用于机器人、数控机床、印刷设备等设备中。
本文将详细介绍旋转编码器的工作原理。
一、编码器的基本原理1.1 光电传感器旋转编码器中常用的光电传感器是一种能够将光信号转换成电信号的传感器。
在旋转编码器中,光电传感器通常由发光二极管和光敏电阻组成。
发光二极管发出光束,光束照射到旋转编码器的标尺上,光敏电阻接收到光束,根据光的强弱产生电信号。
1.2 标尺旋转编码器的标尺是一个具有等距离刻度的圆盘,圆盘上有黑白相间的条纹。
当旋转编码器旋转时,光电传感器会检测到黑白相间的条纹,根据条纹的变化来确定旋转的角度。
1.3 信号处理旋转编码器通过信号处理电路将光电传感器接收到的电信号进行处理,转换成数字信号输出。
信号处理电路通常包括滤波、放大、数字化等步骤,确保输出的信号稳定可靠。
二、编码器的工作原理2.1 绝对编码器绝对编码器能够直接输出旋转角度的绝对值,不需要进行初始化。
绝对编码器通常采用灰码或二进制编码方式,将每个角度对应一个唯一的编码,确保角度的准确性。
2.2 增量编码器增量编码器是通过检测旋转编码器旋转时的位置变化来输出脉冲信号。
增量编码器通常包括A相、B相和Z相信号,分别对应旋转角度的正向、反向和零点位置。
2.3 差分编码器差分编码器是一种能够输出角速度和角加速度信息的编码器。
差分编码器通过比较相邻位置的编码值来计算旋转角速度和角加速度,能够实时监测旋转运动的变化。
三、编码器的应用领域3.1 工业自动化在工业自动化领域,旋转编码器被广泛应用于机器人、数控机床、输送带等设备中。
旋转编码器能够实时监测设备的运动状态,确保设备的精准定位和控制。
3.2 医疗设备在医疗设备中,旋转编码器常用于X光机、CT机等设备中。
旋转编码器能够精确测量设备的旋转角度,确保医疗影像的准确性和清晰度。
数码管动态扫描显示(定时中断),显示数字0-7
code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//显示位码
static unsigned char n = 0;//显示位计数,0-7
TR1 = 0;
TH1 = 0xFC;//对应定时时间(每位显示持续时间):0xfc66,1ms; 0xdc00,10ms; 0x0000,71.1ms
includereg51h包含8051的sfr寄存器定义头文件includeabsacch扩展并行接口所需的绝对地址访问库函数defineleddigxbyte0x9000位数码管显示器的位选输出控制defineledsegxbyte0x8000位数码管显示器的段码字形码输出控制definekeyinxbyte0x8000codeunsignedchardispseg显示段码0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x770x7c0x390x5f0x790x710x400x000xff
/*
数码管动态扫描显示(定时中断),显示数字0-7
*/
#include <reg51.h>//包含8051的SFR寄存器定义头文件
#include <absacc.h>//扩展并行接口所需的绝对地址访问库函数
#define LED_digXBYTE[0x9000]//8位数码管显示器的位选输出控制
#define LED_seg XBYTE[0x8000]//8位数码管显示器的段码(字形码)输出控制
key_value = 1;
break;
case ~0x02:
key_value = 2;
break;
STM8S103F3P单片机正交编码器接口的使用方法
STM8S103F3P单片机正交编码器接口的使用方法时为【摘要】对正交编码信号的解码离不开单片机的硬件和程序.STM8S103F3P单片机除了具有对正交编码信号解码的功能外,还具有价格上的绝对优势,但在具体现场时会遇到一些问题.对此给出硬件实现电路、相关的正交信号解码程序和实际运行结果,实践证明,其性能可靠.【期刊名称】《扬州职业大学学报》【年(卷),期】2017(021)001【总页数】3页(P47-49)【关键词】QEI正交编码器接口;STM8S103F3P;TIM1;旋转编码器【作者】时为【作者单位】扬州职业大学,江苏扬州225009【正文语种】中文【中图分类】TP368.1目前,正交编码接口已经广泛应用于角度测量、距离测量、速度测量以及人机接口等领域。
通常使用单片机对正交编码信号进行解码,并编写相应的程序,从中提取需要的信息。
常用的正交解码的方法有中断分析法和QEI方法,中断分析法利用单片机的外部中断接口,捕捉一路正交信号,进入中断服务程序后,再判断另一路正交信号的逻辑,从而获取正交信号中所需要位置、方向和速度等信息,此时,单片机会工作在不停的中断状态中,导致整个程序无法正常运行。
QEI方法使用专用的QEI芯片或带有QEI的单片机,其QEI硬件模块独立工作,可以响应高速的正交信号输入,并且十分可靠。
但QEI方法成本高,还需要有与其对应的开发手段。
STM公司的STM8S103F3P单片机,价格十分低廉,将其中的高级控制定时器TIM1设置为所需要编码器模式,即可做出一个硬件QEI,实现对正交编码信号的解码功能。
本文就此单片机使用进行探讨,给出实现电路、程序说明和运行结果。
[1]根据STM8S103F3P单片机编程手册,将STM8S103f3P单片机的16位高级控制定时器TIM1设置为编码器接口模式,使用单片机的PC6和PC7引脚输入两路正交信号,此时TIM1会自动识别两路正交信号的方向,并根据识别结果,对其中的一或两路正交信号的边沿进行加法计数或减法计数,计数结果存放在一个16位寄存器TIM1-CNTR中。
通过编码开关(旋转编码器)控制数码管的加减一我爱单片机
通过编码开关(旋转编码器)控制数码管的加减一我爱单片机赞助商链接//直上调试好的程序看看能否换个M币哈哈!//通过编码开关(旋转编码器)控制数码管的加减一#include<AT89X52.H>#define uchar unsigned char#define uint unsigned int#define cycle 1 //定义动作周期,编码器旋转多少格有效#define NULL 0 //定义编码器不动作时的还回值#define E_RIGHT 0x0e //定义右旋转还回值#define E_LEFT 0x0f //定义左旋转还回值/*=====数码管位及按键定义=====*/sbit dula=P2^6; //数码管段选,锁存器控制信号sbit wela=P2^7; //数码管位选,锁存器控制信号sbit PINA = P1^0; //定义IOsbit PINB = P1^1;uchar WheelNow,WheelOld,RightCount,LeftCount;/*=====0-9=====A-G=====*/uchar a[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//数码管显示编码unsignedsled_bit_table[]={0x5f,0x6f,0x77,0x7b,0x7d,0x7e,0xff};/*定义点亮的数码管与数组的关系*//*=====四个数码管显示数据存放处=====*/uchar one,two,three,four;uint wc=0;/*=====函数定义=====*/ void delay(uint x);void display(void);//void key();void led_analyze(uint i);/*====延时函数=====*/ void delay(uint x){uint i;for(i=0;i<x;i++);}/*====显示函数=====*/ void display(void){//送段码dula=0;P0 =a[one];dula=1;dula=0;//数码管位选wela=0;P0=sled_bit_table[0]; //开显示wela=1;wela=0;delay(200); //调用键盘扫描wela=0;P0=sled_bit_table[6];wela=1;wela=0; //关显示dula=0;P0=a[two];dula=1;dula=0;//数码管位选wela=0;P0=sled_bit_table[1]; //开显示wela=1;wela=0;delay(200); //调用键盘扫描wela=0;P0=sled_bit_table[6];wela=1;wela=0; //关显示dula=0;P0=a[three];dula=1;dula=0;//数码管位选wela=0;P0=sled_bit_table[2]; //开显示wela=1;wela=0;delay(200); //调用键盘扫描wela=0;P0=sled_bit_table[6];wela=1;wela=0; //关显示dula=0;P0=a[four];dula=1;dula=0;//数码管位选wela=0;P0=sled_bit_table[3]; //开显示wela=1;wela=0;delay(200); //调用键盘扫描wela=0;P0=sled_bit_table[6];wela=1;wela=0; //关显示}/*====分解显示数据=====*/void led_analyze(uint i){i=i%10000;four=i/1000; // 千位three=(i/100)%10; // 百位two=(i%100)/10; // 十位one=(i%100)%10; // 个位}//===================================== ============uchar WheelRight(){LeftCount=0;RightCount++;if (RightCount>=cycle){RightCount=0;return(E_RIGHT);}elsereturn(NULL);}//===================================== ================uchar WheelLeft(){RightCount=0;LeftCount++;if (LeftCount>=cycle){LeftCount=0;return(E_LEFT);}elsereturn(NULL);}//===================================== ============================uchar EncoderProcess(){uchar keytmp;PINA = 1;PINB = 1;WheelNow=WheelNow<<1;if (PINA==1) WheelNow=WheelNow+1; // 读 PINAWheelNow=WheelNow<<1;if (PINB==1) WheelNow=WheelNow+1; // 读 PINBWheelNow=WheelNow & 0x03; // 将 WheelNow 的 2 - 7 位清零,保留 0 - 1 两个位的状态.if (WheelNow==0x00) return(NULL); //当 PINA 和 PINB 都为低电平时退出,低电平区不做处理keytmp=WheelNow;keytmp ^=WheelOld; // 判断新读的数据同旧数据if (keytmp==0) return(NULL); // 新读的数据同旧数据一样时退出.if (WheelOld==0x01 && WheelNow==0x02){ // 是左旋转否WheelOld=WheelNow;return(WheelLeft()); //左旋转}elseif (WheelOld==0x02 && WheelNow==0x01){ // 是右旋转否WheelOld=WheelNow;return(WheelRight()); //右旋转}WheelOld=WheelNow; // 保存当前值return(NULL); // 当 PINA 和 PINB 都为高电平时表示编码器没有动作,退出}//===================================== ===================================== void inc(){wc++;if(wc>9999) wc=0;//如果WG大于9999则将它清零led_analyze(wc);} // 在此处设置断点看 num 加的变化//===================================== ===============================void dec(){wc--;if(wc>9999) wc=9999;led_analyze(wc);} // 在此处设置断点看 num 减的变化//===================================== ====================================== void main(){while (1){switch(EncoderProcess()){case E_RIGHT: inc(); break;case E_LEFT: dec(); break;}display();}}。
如何设计简单的数字时钟电路
如何设计简单的数字时钟电路数字时钟电路是一种常见的电子电路,用于显示时间并具备时间计时功能。
设计一个简单的数字时钟电路可以通过以下步骤实现。
第一步:确定数字时钟的显示方式常见的数字时钟电路可以采用七段数码管进行显示,每个数码管由七个LED灯组成,用于显示数字0-9。
可以根据需要选择合适的数码管来完成数字时钟的显示。
第二步:确定时钟的计时器数字时钟电路需要一个计时器来跟踪时间。
常见的计时器可以使用555定时器或者基于微控制器的计时器模块。
选择适合自己的计时器并连接到电路中。
第三步:连接七段数码管将选定的七段数码管连接到电路中。
每个数码管的七个LED灯分别对应数码管的a、b、c、d、e、f、g引脚,根据数码管的型号和引脚布局进行正确连接。
例如,将数码管的a引脚连接到计时器的输出引脚,b引脚连接到计时器的另一个引脚,以此类推。
第四步:设计时钟功能根据需要设计时钟功能,包括显示当前时间、设置闹钟、调节亮度等。
可以通过增加按钮开关、旋转编码器或者完成基于微控制器的编程来实现这些功能。
第五步:连接电源和调试将数字时钟电路与合适的电源连接,并进行必要的调试。
确保电路中的元件连接正确并正常工作。
如果有需要,可以使用示波器或多用途测试仪来辅助调试。
总结:通过以上步骤,我们可以设计一个简单的数字时钟电路。
根据需求选择合适的数码管和计时器,连接七段数码管,设计时钟功能并连接电源进行调试。
这样就可以得到一个能够准确显示时间并具备计时功能的数字时钟电路。
需要注意的是,以上步骤只是设计一个简单的数字时钟电路的基本流程,具体的实现可能因项目需求和硬件平台的差异而有所不同。
在实际应用中,还需要考虑电路的稳定性、精度和可靠性等因素,并根据实际情况进行细节调整和优化。
电梯输入输出点详解
符号
PU(门驱双稳态开关) 1PG(永磁感应器) GU(上倒数第三个) GD(下倒数第三个) DYJ/SYJ MSJ HK SW(上倒数第二个) XW(下倒数第二个) RUN端 KMJ AK/KAB AG CH 1AS(TD) 2AS 3AS 4AS 1SA 2SA 3SA 2XA 3XA 4XA HK
数码管A端输入(显示屏) Y17
数码管B端输入(显示屏) Y20
数码管C端输入(显示屏) Y21
数码管D端输入(显示屏) Y22
梯内上方向运行指示
Y23
梯内下方向运行指示
Y24
超载/蜂鸣器
Y25
开门继电器
Y26
关门继电器
Y27
4楼内呼显示(背景灯) Y30
3外呼向上指示(背景灯) Y31
4外呼向下指示(背景灯) Y32
输
入
输
层信号输入
X1
一至四楼减速永磁感应 X2
上方向强迫减速永磁感应 X3
下方向强迫减速永磁感应 X4
DYJ常开触点(急停) X5
门锁信号输入
X6
检修开关
X7
上限位开关(永磁感应) X10
下限位开关(永磁感应) X11
运行变频器
X12
KMJ常开触点
X13
内开门信号/防夹伤开关 X14
符号名称输出口符号旋转编码器x0x0主接触器线圈y0250qc平层信号输入x1321变频器高速端y4j4一至四楼减速永磁感应x2323变频器低速端y5j5上方向强迫减速永磁感应x3324上升指令y6j6下方向强迫减速永磁感应x4325下降指令y7j7x5261dyjsyjy101rhl1门锁信号输入x6262msjy112rhl2检修开关x7263hky123rhl3上限位开关永磁感应x10264y131ghl1下限位开关永磁感应x11265y142ghl2运行变频器x12x12y152chl2x13267kmjy163chl3x14268akkaby17smhl内指令关门信号x15269agy20smhl超载行程开关x16266chy21smhlx201a1astdy22smhlx212a2as梯内上方向运行指示y23470hlx223a3as梯内下方向运行指示y24471hlx234a4asy25460fmchdx241s1sa开门继电器y26239kmjx252s2sa关门继电器y27244gmjx263s3say304rhl4x272x2xay313ghl3x303x3xay324chl4x314x4xax37hkhkpu门驱双稳态开关rh设5hz1pg永磁感应器rl设25hzgu上倒数第三个变频器stf端gd下倒数第三个变频器str端dyj常开触点急停1楼内呼显示背景灯2楼内呼显示背景灯3楼内呼显示背景灯sw上倒数第二个1外呼向上指示背景灯xw下倒数第二个2外呼向上指示背景灯run端2外呼向下指示背景灯kmj常开触点3外呼向下指示背景灯内开门信号防夹伤开关数码管a端输入显示屏数码管b端输入显示屏数码管c端输入显示屏1内指令检修快速向下数码管d端输入显示屏2内指令输入3内指令输入4内指令检修快速向上超载蜂鸣器4楼内呼显示背景灯2外呼下召输入3外呼向上指示背景灯3外呼下召输入4外呼向下指示背景灯4外呼下召输入开关量数字量
STM32学习总结4---编码器旋钮式增量编码器
STM32学习总结4---编码器旋钮式增量编码器 这个我实在⽹上找了好久找了⼀个可⽤的程序,⼤部分,你搜索编码器程序出来的都是电机的相关程序,⽽我要的是旋钮式的,PEC11-4020F-S0018型号的编码器。
这个代码写得挺完善的,就是没有写主函数,因此调⽤问题上,还是费了好些神才弄出来,关键它⾥⾯的⼀些定义,我很久没有些程序,都不清楚了,如:typedef struct tagspin{ RotateStatus rotatestatus; // 旋转状态 KeyStatus keystatus; // 按键状态}struspin; 我知道struct为结构体,但是typedef就真的忘了,百度⼀下,就清楚了。
在主函数⾥只需struspin left_spin;struspin right_spin;在调⽤函数void Init_Spin_Status(struspin *left_spin, struspin *right_spin)和void Read_Spin(struspin *left_spin, struspin *right_spin)时,就⼜忘了*left_spin这是指针的,因此:Init_Spin_Status( &left_spin , &right_spin ); 要添加&Read_Spin(&left_spin, &right_spin);修改相关配置,在主函数加⼏句调⽤,便可以运⾏了,不过⾄今还有⼏个问题:1、⽬前程序的执⾏是旋转编码器两次才有加1或减1;2、PEC11-4020F-S0018码编器,⼀圈有30个定位,实物⾃⼰转出来数的。
资料⾥0018 = 18 Pulses per 360 ° Rotation 我的理解是⼀圈18个脉冲,⼀圈有30个定位18个脉冲,那⼀个定位应该有⼏个脉冲呢?再研究下程序,怎么会转两个定位加1操作⼀次;3、我⽤的循环扫描的⽅式,编码器有按键功能,当只有扫描编码器不显⽰数码管时,按键的程序是要亮灯,可是实际就是闪⼀下没有,不过当我在主程序⾥加上数码管的显⽰,按键的灯就可以⼀直亮着了;4、在主函数的while⾥我⼜添加了另外四个独⽴按键的扫描,按键和编码器都可以正常运⾏,有个问题就是每次按键时,数码管的会闪⼀下,就好像按键时停⽌了⼀下数码管的显⽰,很明显,⾁眼能观察到。
数码管实现00到99循环工作原理
数码管实现00到99循环工作原理
数码管显示00到99的循环工作原理可以简述如下:
1. 数字生成:使用计数器或者其他逻辑电路,生成00-99的数字,输出给数码管控制电路。
2. 数码管控制电路:根据输入的数字,选择对应的数码管段进行驱动,使其显示出数字的相应部分。
3. 数码管段的驱动:数码管由七段或者十六段LED组成,分别对应数字的各个部分。
驱动电路会根据输入的数字,使不同的LED点亮或者熄灭,来显示出对应的数字。
4. 循环实现:当数码管驱动显示数字99时,计数器或者其他逻辑电路会自动将计数值归零,重新开始计数,从而实现00-99的循环工作。
需要注意的是,为了保证数码管的正常工作,需要适当控制每个LED的亮度和电流,以及使用适当的电容和电阻进行防抖降噪等措施。
同时,为了方便调试和使用,可以在控制电路中添加按钮或者旋转编码器等输入设备,以便手动调节显示数字。
3.3.2旋转编码器
图3-13所示为一卧式加工中心机床参考点相对机床工作台中心位置的示意图, 图3-14所示为回参考点的一种实现方式。
图3-14 回参考点方式 a)挡块位置 b)回参考点控制 1-左限位挡块及行程开关 2-工作台 3-减速挡块及 行程开关 4-右限位挡块及行程开关 5-编码器 6-伺服电动机
图3-13 卧式加工中心参考点
测量代码,因此这种测量方式即使断电也能读出被测轴的角度位置,即具有断电记忆功能。 (1)接触式码盘 图3-8a所示为接触式码盘示意图。
a)结构简图 b)4位二进制码盘 c)4位格雷码盘
图3-8b为4位二进制码盘。它在一个不导电基体上做成许多金属区使其导电,其中涂黑 部分为导电区,用“1”表示;其它部分为绝缘区,用“0”表示。这样,在每一个径向上, 都有由“1”、“0”组成的二进制代码。最里一圈是公用的,它和各码道所有导电部分连在 一起,经电刷和电阻接电源正极。除公用圈以外,4位二进制码盘的四圈码道上也都 装有电刷,电刷经电阻接地,电刷布置如图3-8a所示。由于码盘是与被测转轴连在 一起的,而电刷位置是固定的,当码盘随被测轴一起转动时,电刷和码盘的位置发生
式中ν是切削线速度;D为工件的切削直径,随刀具进给不断变化;n为主轴转速; D由坐标轴的位移检测装置,如光电编码器检测获得。上述数据经软件处理后 即得主轴转速n,转换成速度控制信号后至主轴驱动装置。 3)主轴定向准停控制 准停实现的三种方式将在第四章中详细介绍。其中可采用编码器,如图3-12所示。 通过安装在主轴上的编码器,主轴定向位置可在0°~359.9°内任意设定。
实际应用的光电编码器的光栏板上有两组条纹A、Ā和B、B, 每组条纹的间隙与
光电码盘相同,而A组与B组的条纹彼此错开1/4节距,
两组条纹相对应的光电元件所产生的信号彼此相差90°相位,用于辨向。 当光电码盘正转时,A信号超前B信号90°,当光电码盘反转时,B信号超前A信 号90°,数控系统正是利用这一相位关系来判断方向的。
轿厢位置信号的和显示
轿厢位置的确认与显示教学目的:掌握轿厢位置的确认与显示的工作原理、编程方法教学难点:掌握轿厢位置的确认与显示的编程方法教学重点:应知:轿厢位置的确认与显示的工作原理应会:轿厢位置的确认与显示的编程方法教学学时:工作原理讲解1学时,工位现场指导1学时、编程技能训练6学时、考核2学时教学条件:VVVF电梯四台(附图纸)教学过程:电梯轿厢位置数据是电梯运行的基准数据,电梯的定向、换速都是以轿厢位置为基础的,缺乏电梯轿厢位置或轿厢位置确定存在偏差,会造成电梯运行的不正常。
(一) 轿厢位置的确认(1)采用机械选层器确认轿厢位置采用机械选层器的电梯利用机械选层器的动、静触点的通断取得或消除轿厢位置信号。
现在采用机械式选层器的电梯已经停产,现存的电梯基本不采用。
(2)采用干簧管确认电梯轿厢位置部分电梯利用固定在轿厢上的遮磁板与装在井道上的干簧管配合来确认电梯轿厢位置。
当电梯轿厢经过每层时,固定在轿厢上的遮磁板使每层干簧管动作,使相应的层楼继电器吸合,发出电梯轿厢位置信号,控制电路如下图所示。
但是这种方法不能产生连续指层信号,必须附加继电器才能获得连续的指层信号。
(A)(B)LG 层楼感应器ZJ层楼继电器FJ层楼指示器采用干簧管确认电梯轿厢位置的电梯通常应用在低层站电梯中。
(3)利用旋转编码器确认电梯轿厢位置现在生产的电梯大都采用旋转编码器来确定轿厢位置。
在实际安装时,旋转编码器与电动机转子同轴安装,当电动机主轴旋转时,旋转编码器相应旋转,主轴转动一圈,旋转编码器产生若干个脉冲,这样电动机的旋转速度就可以利用旋转编码器输出的脉冲数的速度来计算了,也可以利用旋转编码器输出的脉冲数相应的计算出电梯曳引机上钢丝绳移动的距离,进而计算出电梯轿厢的位移。
旋转编码器是用来测量转速的装置。
它分为单路输出和双路输出两种。
技术参数主要有每转脉冲数(几十个到几千个都有),和供电电压等。
旋转编码器的的外形结构如下图所示:旋转编码器的内部结构如下图所示:光电码盘随被测轴一起转动,在光源的照射下,透过光电码盘和光栅板形成忽明忽暗的光信号,光敏元件把此光信号转换成两组电信号a、b,通过信号处理装置的整形、放大等处理后再对外输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*程序时间录:2015-11-16
/
/ */
#include <STC12C5A60S2.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit PINA = P3^2;
sbit PINB = P3^3;
sbit SMG=P4;
//sbit SMG2=P1^1;
uint num_count;
uchar dis_buf[4];
uchar code dis_wei[4]={0x01,0x02,0x04,0x08};
uchar code
LED_SMG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0x88,0x83,0xc 6,0xa1,0x86,0x8e} //阳码
void Delay5ms(void);
void Timer0Init(void); //1毫秒@11.0592MHz
void delay(uint time) //int型数据为16位,所以最大值为65535
{
uint i,j; //定义变量i,j,用于循环语句
for(i=0;i<time;i++) //for循环,循环50*time次
for(j=0;j<100;j++);
}
//编码器扫描
void scan_encoder()
{
static bit Curr_encoder_b; //定义一个变量来储存当前B信号
static bit Last_encoder_b; //定义一个变量来储存上次B脚信号
static bit updata=0;
if( PINA && PINB) //编码器无转动退出
{
updata = 0;
return;
}
Last_encoder_b = PINB; //记录B信号
while(!PINA) //等待A由低变高
{
Curr_encoder_b = PINB; //记录等待期间的B信号(指当前B信号)
updata = 1;
}
if(updata)
{
updata = 0 ;
if( (Last_encoder_b == 0)&&(Curr_encoder_b== 1) ) //B从0到1为正转 {
if(num_count == 99)
return;
num_count++; //正转计数加
Delay5ms();
}
else if( (Last_encoder_b == 1)&&(Curr_encoder_b == 0) ) //B从1到0为反转 {
if(num_count == 0)
return;
num_count--; //反转计数减
Delay5ms();
}
}
}
/******************************************************/
void Delay5ms() //@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
void main()
{
uchar t;
P4M1=0x00;
P4M0=0x0f;
P2M1=0x00;
P2M0=0xff;
P3M1|=0x0c;
P3M0|=0x00; //设置P32-33 IO口为高阻输入
SMG=0x00;
// SMG2=0;
// SMG3=0;
// SMG4=0;
Timer0Init();
ET0=1;
EA=1;
while(1)
{
scan_encoder();
}
}
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初值
TH0 = 0xD4; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void TIMER0_SER() interrupt 1
{
uchar num;
TR0=0;
TF0=0;
TL0 = 0xCD; //设置定时初值
TH0 = 0xD4; //设置定时初值
//num_count=9999;
dis_buf[3] = num_count/1000; //千位数据
dis_buf[2] = num_count/100%10; //百位数据
dis_buf[1] = num_count/10%10; //十位数据
dis_buf[0] = num_count%10; //个位数据
for(num=0;num<4;num++)
{
P2=LED_SMG[dis_buf[num]];
P4=dis_wei[num];
delay(20);
//P2|=0x0f;
}
TR0=1;
}。