单片机实例-------新手入门1---密码锁的设计
- 单片机最小系统
- 掉电保护
-
输入电路
1.并转串输入
2.4*4矩阵输入 -
显示电路
- 串转并输出
- 数码管动态显示
3.输入电路
(1)并转串输入
并转串输入就是将并行数据转化为串行数据输入,以达到节省IO口的目的。我们这里使用74HC165芯片,使用三个IO口和8个按键。我们先来看看74HC165的使用。
#include"reg51.h"
#include"intrins.h"
sbit IN_PL=P1^6; //移位、置位端
sbit IN_Data=P1^7; //数据输出
sbit SCK=P3^6; //时钟输入
typedef unsigned int u16;
typedef unsigned char u8;
u8 Read74HC165(){
u8 indata;
u8 i;
IN_PL=0; //将数据置入
_nop_();
IN_PL=1;//开始移位
_nop_();
indata=0;
//依次将D0~7的数值存入indata中
for(i=0;i<8;i++){
indata=indata<<1;
SCK=0;
_nop_();
indata|=IN_Data;
SCK=1;
}
return indata;
}
void main(){
u8 indata;
while(1){
indata=Read74HC165();
if(indata!=0xff){
P0=indata;
}
}
}
4.显示电路
(1)串转并输出
串转并输出就是将串行数据转化为并行数据输出,以达到节省IO口的目的。我们这里使用74HC595芯片,使用三个IO口控制数码管8个管脚。我们先来看看74HC595的使用。
注意: MR主复位(低电平),OE输出有效(低电平) ,所以我们将他们分别接电源和接地
#include"reg51.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK=P3^6;//上升沿输出数据
sbit RCLK=P3^5; //上升沿进行移位
sbit SER=P3^4; //输入串行数据
void hc595(u8 indata){
u8 i;
for(i=0;i<8;i++){
SER=indata>>7;//将最高位赋值给SER
indata<<=1;//将次高位变成最高位
//上升沿进行移位
SRCLK=0;
_nop_();
SRCLK=1;
_nop_();
}
//上升沿输出数据
RCLK=0;
_nop_();
RCLK=1;
}