指纹锁 |
您所在的位置:网站首页 › 32单片机as608指纹解锁 › 指纹锁 |
目录 一、工程内容 二、AS608指纹模块使用 1.AS608 与 USB转TTL模块 的接线 2.上位机配置 3.AS608与STC12C60A通讯 三、驱动MG995(180度舵机) 1.MG995舵机数据手册 2.舵机驱动: 3.定时器定时100us 4.中断函数 一、工程内容实现功能:用户通过指纹识别打开宿舍门锁 电子元件: 主控芯片stc12c60A供电方式 USB供电指纹模块AS608电流、电压5V、2A舵机MG995—180度其它元件1个蜂鸣器、2个LED、1个自锁开关晶振11.0529M其它元件轻触开关 二、AS608指纹模块使用 1.AS608 与 USB转TTL模块 的接线 (AS608要用3.3V供电不能用5V供电)只需要接四根线(Vi TX RX GND) 2.1 首先安装USB转TTL的驱动,然后打开串口 将AS608与USB转TTL模块正确接线后 连接电脑。打开设备管理器找到串口号COMX (为了避免差错,来回拔插一次,观察设备管理器中串口号的变化) 找到串口号后在AS608的上位机选择正确的串口号。 2.2 配置波特率 注意:AS608的波特率要与程序设计的波特率相同才能进行通讯 2.3添加指纹 在我的电脑操作时 ,AS608模块需要先预热 通电一会后才能录入指纹。 3.AS608与STC12C60A通讯单片机波特率设置: void Uart_Init(void) { SCON=0x50; //UART方式1:8位UART; REN=1:允许接收 PCON=0x80; //SMOD=0:波特率不加倍 TMOD=0x21; //T1方式2,用于UART波特率 TH1=0xFf; //UART波特率设置 TL1=0xFf; TR1=1; //允许T1计数 EA=1; } 波特率计算——THx与TLx 定时器工作模式是8位自动重装载,TH1和TL1赋的初值一样 SMOD:波特率选择位。当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波特率加倍;SMOD=0,则各工作方式的波特率不加倍。复位时SMOD=0。 一般选择不加倍,所以SMOD为0,SYSclk是单片机时钟,也就是晶振的频率,11.0592MHz,运算时要转化为基本单位Hz,即11059200Hz 设置57600(波特率要加倍 SMOD=1): I2T模式定时器1溢出率: 11059200Hz/12/(256-TH1) = 11059200Hz/12*(256-TH1) = 921600/(256-TH1) 57600 = 2^SMOD/32*(921600/(256-TH1)) = 2/32 * (921600/(256-TH1)) = 57600/(256-TH1) 256-TH1 = 57600/57600 = 1,TH1 = 256-1 = 255,255转为十六进制就是FF 所以TH1 = TL1 = FF 三、驱动MG995(180度舵机) 1.MG995舵机数据手册 注意:MG995的舵机一定要用大于1a的电流驱动才能正常转动!!!(正常转动包括按照所写的代码转动90度而不是单纯的能转动) 舵机的输入线共有三条,红色中间,是电源正线,一根棕色(有些是黑色)是电源地线,这两根线给舵机提供最基本的能源保证,主要是电机的转动消耗。另外一根线是控制信号线,一般为桔黄色。 舵机的信号线是做为输入线就是接收PWM信号(定时器产生)。一般PWM的周期是20ms,那么对应的频率是50hz。那么改变不同的占空比就可以控制转动的角度。其中占空比从0.5-2.5ms,相对应的舵盘位置为0-180度,呈线性变化。 上图对应MG995的脉冲宽度与输出轴转角。 周期20ms 脉冲0.5ms 表示在20ms里有0.5ms是高电平,19.5ms是低电平。 用定时器计数100us,5us高电平 95us低电平就可以是舵机反方向转90度。 3.定时器定时100us定时器有两种工作模式,分别为计数模式和定时模式。 定时器代码初始化 1.确定定时器的计数模式。 2.确定TLx与THx之间的搭配关系。 3.确定计数起点值。即TLx与THx的初值。 4.是否开始计数。TRx TLx与THx之间256进制。即当TLx计到256个脉冲时,TLx归0同时THx进1。这也称为方式1。在方式1时,最多计65536个脉冲产生溢出。在主频为11.0592M时,每计一个脉冲为1.085us,所以溢出一次的时间为1.085usx65536=71.1ms 1和2可以由工作方式寄存器TMOD来设定,TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下: 定时器工作方式选择 定时器初始从0开始计数到65536然后溢出。要计数100us,所以初始计数要从(65536-100)计数到65536 然后溢出。 定时器初始化 TMOD=0X01; // 16位计数器 TH0=(65536-100)/256; // 高四位 100US定时 TL0=(65536-100)%256; //低四位 TR0= 1; ET0= 1; EA = 1; 4.中断函数void timer0( ) interrupt 1 \\ 5个中断源的排序:0代表外部中断0中断 ,1代表定时器/计数器0 中断 , 2代表外部中断1中断, 3代表定时器/计数器1,4代表串行中断的中断 中断 interrupt 1 数字一定一定要写对,对应设置的定时器/计数器 中断函数响应条件 1.中断源有中断请求; 2. 此中断源的中断允许位为1; 3.CPU开中断(即EA=1)。 驱动代码: #include sbit Sevro_moto_pwm=P1^2; // 舵机信号线(橙色) sbit Key=P2^1; //按键 sbit buzz = P1^4; //蜂鸣器 unsigned char pwm_val = 0;//变量定义 unsigned char push_val = 14;//舵机归中,产生约,1.5MS 信号 void delay1ms(unsigned int k) //延时1ms函数,k等于多少就延时多少ms { unsigned int a,b,c,d; for(d=0;d0;c--) for(b=50;b>0;b--) for(a=2;a>0;a--); } /********************************************************************************************** ** TIMER1中断服务子函数产生PWM信号 **********************************************************************************************/ void time1()interrupt 1 using 2 { TH0=(65536-100)/256; //100US定时 TL0=(65536-100)%256; pwm_val++; if(pwm_val=100) pwm_val=0; } /********************************************************************************************** ** 主函数 **********************************************************************************************/ void main(void) { TMOD=0X21; // TH0=(65536-100)/256; //100US定时 TL0=(65536-100)%256; TR0= 1; ET0= 1; EA = 1; push_val=13; //舵机归中 delay1ms(1000); //延时1S让舵机转到其位置,停留一下 while(1) { if(Key==0) { buzz=1; push_val=4; //舵机向正转约90度 delay1ms(4000); //延时500MS让舵机转到其位置 buzz=0; push_val=13; delay1ms(500); push_val=4; //舵机向反转约90 delay1ms(500);; //延时500MS让舵机转到其位置 } else { push_val=13; buzz=0; } } }
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |