51单片机只是对于当前的某些场合需要,学习也很简单,感兴趣的可以多多进行了解,此次的单片机密码锁,也只是一个小小的课设,将它发出来和大家共享。
一、运行过程图
二、使用的板块
- 28BYJ-48
步进电机实物图
关于步进电机的代码部分:
void step_28BYJ48_pulse(u8 step,u8 dir,u8 speed,u16 angle,u8 sta)
{
char i=0;
u16 j=0;
if(sta==1)
{
if(dir==0) //如果为逆时针旋转
{
for(j=0;j<64*angle/45;j++)
{
for(i=0;i<8;i+=(8/step))
{
switch(i)//8个节拍控制:A->AB->B->BC->C->CD->D->DA
{
case 0: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=0;break;
case 1: IN1_A=1;IN2_B=1;IN3_C=0;IN4_D=0;break;
case 2: IN1_A=0;IN2_B=1;IN3_C=0;IN4_D=0;break;
case 3: IN1_A=0;IN2_B=1;IN3_C=1;IN4_D=0;break;
case 4: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=0;break;
case 5: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=1;break;
case 6: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=1;break;
case 7: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=1;break;
}
delay_ms(speed);
}
}
}
else //如果为顺时针旋转
{
for(j=0;j<64*angle/45;j++)
{
for(i=7;i>=0;i-=(8/step))
{
switch(i)//8个节拍控制:A->AB->B->BC->C->CD->D->DA
{
case 0: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=0;break;
case 1: IN1_A=1;IN2_B=1;IN3_C=0;IN4_D=0;break;
case 2: IN1_A=0;IN2_B=1;IN3_C=0;IN4_D=0;break;
case 3: IN1_A=0;IN2_B=1;IN3_C=1;IN4_D=0;break;
case 4: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=0;break;
case 5: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=1;break;
case 6: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=1;break;
case 7: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=1;break;
}
delay_ms(speed);
}
}
}
}
else
{
IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=0;
}
}
2.矩阵键盘
矩阵代码部分:
/*******************************************************************************
* 函 数 名 : key_scan
* 函数功能 : 检测独立按键是否按