本帖最后由 YMC 于 2014-7-2 20:50 编辑 最近刚学51单片机 写了一个密码锁程序其中遇到了一个问题希望大家能抽点时间帮我看看 。出现的问题是: 第二次输入密码与第一次输入
2013-08-16 09:29
各位51达人,菜鸟请求各位高手帮忙给下面的红外解码的程序加一个解码键值的数码管显示的程序程序经过测试,蜂鸣器提示已经解码成功,但不知道键值,因为用的版没有液晶模块,只能在数码管上显示,所用的51板有4个共阴极数码管,P0口接段选,P2^4-P2^7是位选,求教高人解码出来的键值要怎么显示在数码管上,程序要怎么加?小弟有写过数码管动态显示的程序,但这里不清楚该怎么让解码的键值显示在数码管 还望高手指点{:23:}{:23:}{:23:}#include //包含单片机寄存器的头文件#include//包含_nop_()函数定义的头文件***it IR=P3^2;//将IR位定义为P3.2引脚***it BEEP = P1^2; //蜂鸣器控制端口P12 unsigned char flag;unsigned char a[4]; //储存用户码、用户反码与键数据码、键数据反码unsigned int LowTime,HighTime; //储存高、低电平的宽度 /*****************************************************函数功能:延时1ms***************************************************/void delay1ms(){unsigned char i,j; for(i=0;i
2014-03-15 19:23
控制:STC89c54RD+驱动器:TB6560AHQ 步进电机:三洋2相6线 42步,接驱动器4线用网上找到的程序:/************************************************************************************************************** 测试说明*1、MCU:STC89C52RC*2、测试频率:12Mhz*2、编程语言:C51*2、编译环境:Keil C*2、功能:全速正转、全速反转、停止、调速运行*************************************************************************************************************/ #include//TB6560输入控制端定义***it CLK = P1^0;***it ENA = P1^1;***it DIR = P1^2; ***it CW = P3^0; //正转运行按键***it STOP = P3^1; //停止运行按键***it CCW = P3^2; //反转运行按键***it ADJ1 = P3^3; //调速运行按键***it ADJ2 = P3^4; //调速运行按键bit Run_Status; //运行状态位标志,//=0表示电机在停止状态,可以按键正转、反转均可//=1表示电机在运行状态,不支持正反转按键,只有先停止。防止强行换向带来的电流过大。 unsigned char Run_Dir; //电机运行方向 #define F_DIR 0 //正转#define B_DIR 1 //反转 unsigned int CYCLE; //周期变量 /************************************************************************************************** 函数名称: void Delay(unsigned int cnt)** 功能描述: 简单的延时函数** 输 入: cnt:0-65535之间的任意整数** 输 出: 无*************************************************************************************************/void Delay(unsigned int cnt){while(--cnt);}/************************************************************************************************** 函数名称: void main(void)** 功能描述: 主函数** 输 入: 无** 输 出: 无*************************************************************************************************/void main(void){Run_Status=0; //=0表示电机在停止状态,可以按键正转、反转均可CLK = 0;ENA = 0;while(1){if(!STOP) //任何时候按停止键,电机停止运行{Delay(1000); //延时去抖动if(!STOP){Run_Status=0; //电机正在停止的状态标志CLK = 0;ENA = 0;TR0=0;}}if(!CW&&!Run_Status) //按正转键同时电机不是正在运行时,电机正转运行{Delay(1000); //按下延时去抖动if(!CW&&!Run_Status){Run_Status=1; //电机正在运行的状态标志DIR = 0; //正转ENA = 1;CYCLE=2500; //脉冲频率 定时器设置 10ms in 12M crystal 即100HzTMOD |=0x01;TH0=(65536-CYCLE)/256;TL0=(65536-CYCLE)%256;IE= 0x82; //打开中断TR0=1;Run_Dir=F_DIR; //电机运行方向正转}}if(!CCW&&!Run_Status) //按反转键同时电机不是正在运行时,电机反转运行{Delay(1000); //延时去抖动if(!CCW&&!Run_Status){Run_Status=1; //电机正在运行的状态标志DIR = 1; //反转ENA = 1;CYCLE=2500; //脉冲频率 定时器设置 10ms in 12M crystal 即100HzTMOD |=0x01;TH0=(65536-CYCLE)/256;TL0=(65536-CYCLE)%256;IE= 0x82; //打开中断TR0=1;Run_Dir=B_DIR; //电机运行方向反转}}if(!ADJ1){Delay(5000); //延时去抖动if(!ADJ1){if(CYCLE2000) CYCLE-=2000;// Run_Status=1;// TR0=1;// }// }}}/************************************************************************************************** 函数名称: Timer0_ISR** 功能描述: 定时器0中断处理函数** 输 入: 无** 输 出: 无*************************************************************************************************/void Timer0_ISR(void) interrupt 1 using 1{TH0=(65536-CYCLE)/256;TL0=(65536-CYCLE)%256;CLK = ~CLK;}用网上找的程序,怎么改定时器初值,改细分,都会抖动的很厉害,如果用高低电平延时模拟脉冲,就没有抖动,不知道为啥{:4_111:}自己写的延时程序:#include ***it ENA=P1^1;***it CLK=P1^0;***it DIR=P1^2;***it ENA1=P1^6;***it DIR1=P1^4;***it CLK1=P1^5;***it ENA2=P0^0;***it CLK2=P0^1;***it DIR2=P0^2;***it ZHENG=P3^0;***it FAN=P3^1;***it STOP=P3^2;bit DATE1;unsigned int quan;//圈数unsigned int abc;/*void delay(unsigned int x){ unsigned int y; for(;x>0;x--) {for(y=0;y0;i--)for(j=98;j>0;j--);}/*void Delay(unsigned time) { unsigned char a,b,c; //for(a=0;a
2014-03-15 20:06