标题:
关于AT89S52单片机芯片的电子锁设计
[打印本页]
作者:
1409516337
时间:
2017-12-5 14:39
标题:
关于AT89S52单片机芯片的电子锁设计
最近的一个作业 电子锁的设计-20171202
张刘清
学号16131422
图一:At89S52芯片的 简介说明
图二:lcd160显示显示屏的 简介说明
图三:晶振电路图 + 复位电路图 简介说明
图四: at24c02存储模块 简介说明 电路图
图五:器件简要清单
图六:作品的最后展示
最后是代码的设计
单片机源程序如下:
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit scl=P3^6; //24C02时钟线的接口
sbit sda=P3^7; //24C02数据线的接口
sbit fmp=P1^7;
sbit RS=P1^0; //pin4
sbit E=P1^1; // pin6
#define Data P0 //数据端口
sbit Key_Data=P3^3; //d定义keyboard引脚
sbit Key_CLK=P3^2; //使用中断
bit BF;
bit Shift; //定义上档键标志
bit Key_up; //定义通码断码标志
unsigned char Keyv;
unsigned char IntNum;
unsigned char DisNum;
char code cs[]="new mima";
char code sr[]="enter mima";
char code f[]="Data Error";
static uchar data csmm[20];
static uchar data srmm[20];
static int t1=1,t2=1,t3=1,t4=1,t5=1,t6=1,num=0;
//微秒延时函数
void DelayUs(unsigned char us)
{
unsigned char uscnt;
uscnt=us>>1; /12mhz频率
while(--uscnt);
}
//毫秒函数的声明
void DelayMs(unsigned char ms)
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
void delay()
{
;;
}
////////存储芯片
//开始信号
void start()
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
//停止
void stop()
{
sda=0;
delay();
scl=1;
delay();
sda=0;
delay();
}
//应答信号
void respons()
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<50)) i++;
scl=0;
delay();
}
//初始化
void init()
{
sda=1;
delay();
scl=1;
delay();
}
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay(0);
sda=1;
delay();
}
uchar read_byte()
{
uchar i, k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1) | sda;
scl=0;
delay();
}
return k;
}
void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
void read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
////////液晶
//写命令函数
void WriteCommand(unsigned char c)
{
DelayMs(5);//保证信号稳定
E=0;
RS=0;
_nop_();
E=1;
Data=c;
E=0;
}
//写数据函数
void WriteData(unsigned char c)
{
DelayMs(5);//保证信号稳定
E=0;
RS=1;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
//写入字节函数
void ShowChar(unsigned char pos, unsigned char c)
{
unsigned char p;
if(pos>=0x10)
p=pos+0xb0; //是第二行则命令代码高四位为0xc
else
p=pos+0x80; //是第二行则命令代码高四位为0x8
WriteCommand(p); //写命令
WriteData(); //写数据
}
//写入字符串函数
void ShowString(unsigned char line,char *ptr )
{
unsigned char l,i;
l=line<<4;
for(i=0;i<16;i++)
{
Show (l++,*(ptr+i)); //循环显示16个字符
}
}
//初始化函数
void InitLcd()
{
DelayMs(15);
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x06); //显示光标移动的位置
WriteCommand(0x0f); //显示开及光标设置
WriteCommand(0x01); //清屏
}
///////////键盘
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit scl=P3^6; //24C02时钟线的接口
sbit sda=P3^7; //24C02数据线的接口
sbit fmp=P1^7;
sbit RS=P1^0; //pin4
sbit E=P1^1; // pin6
#define Data P0 //数据端口
sbit Key_Data=P3^3; //d定义keyboard引脚
sbit Key_CLK=P3^2; //使用中断
bit BF;
bit Shift; //定义上档键标志
bit Key_up; //定义通码断码标志
unsigned char Keyv;
unsigned char IntNum;
unsigned char DisNum;
char code cs[]="new mima";
char code sr[]="enter mima";
char code f[]="Data Error";
static uchar data csmm[20];
static uchar data srmm[20];
static int t1=1,t2=1,t3=1,t4=1,t5=1,t6=1,num=0;
//微秒延时函数
void DelayUs(unsigned char us)
{
unsigned char uscnt;
uscnt=us>>1; /12mhz频率
while(--uscnt);
}
//毫秒函数的声明
void DelayMs(unsigned char ms)
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
void delay()
{
;;
}
////////存储芯片
//开始信号
void start()
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
//停止
void stop()
{
sda=0;
delay();
scl=1;
delay();
sda=0;
delay();
}
//应答信号
void respons()
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<50)) i++;
scl=0;
delay();
}
//初始化
void init()
{
sda=1;
delay();
scl=1;
delay();
}
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay(0);
sda=1;
delay();
}
uchar read_byte()
{
uchar i, k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1) | sda;
scl=0;
delay();
}
return k;
}
void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
void read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
////////液晶
//写命令函数
void WriteCommand(unsigned char c)
{
DelayMs(5);//保证信号稳定
E=0;
RS=0;
_nop_();
E=1;
Data=c;
E=0;
}
//写数据函数
void WriteData(unsigned char c)
{
DelayMs(5);//保证信号稳定
E=0;
RS=1;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
//写入字节函数
void ShowChar(unsigned char pos, unsigned char c)
{
unsigned char p;
if(pos>=0x10)
p=pos+0xb0; //是第二行则命令代码高四位为0xc
else
p=pos+0x80; //是第二行则命令代码高四位为0x8
WriteCommand(p); //写命令
WriteData(); //写数据
}
//写入字符串函数
void ShowString(unsigned char line,char *ptr )
{
unsigned char l,i;
l=line<<4;
for(i=0;i<16;i++)
{
Show (l++,*(ptr+i)); //循环显示16个字符
}
}
//初始化函数
void InitLcd()
{
DelayMs(15);
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x06); //显示光标移动的位置
WriteCommand(0x0f); //显示开及光标设置
WriteCommand(0x01); //清屏
}
///////////键盘
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit scl=P3^6; //24C02时钟线的接口
sbit sda=P3^7; //24C02数据线的接口
sbit fmp=P1^7;
sbit RS=P1^0; //pin4
sbit E=P1^1; // pin6
#define Data P0 //数据端口
sbit Key_Data=P3^3; //d定义keyboard引脚
sbit Key_CLK=P3^2; //使用中断
bit BF;
bit Shift; //定义上档键标志
bit Key_up; //定义通码断码标志
unsigned char Keyv;
unsigned char IntNum;
unsigned char DisNum;
char code cs[]="new mima";
char code sr[]="enter mima";
char code f[]="Data Error";
static uchar data csmm[20];
static uchar data srmm[20];
static int t1=1,t2=1,t3=1,t4=1,t5=1,t6=1,num=0;
//微秒延时函数
void DelayUs(unsigned char us)
{
unsigned char uscnt;
uscnt=us>>1; /12mhz频率
while(--uscnt);
}
//毫秒函数的声明
void DelayMs(unsigned char ms)
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
void delay()
{
;;
}
////////存储芯片
//开始信号
void start()
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
//停止
void stop()
{
sda=0;
delay();
scl=1;
delay();
sda=0;
delay();
}
//应答信号
void respons()
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<50)) i++;
scl=0;
delay();
}
//初始化
void init()
{
sda=1;
delay();
scl=1;
delay();
}
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay(0);
sda=1;
delay();
}
uchar read_byte()
{
uchar i, k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1) | sda;
scl=0;
delay();
}
return k;
}
void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
void read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
////////液晶
//写命令函数
void WriteCommand(unsigned char c)
{
DelayMs(5);//保证信号稳定
E=0;
RS=0;
_nop_();
E=1;
Data=c;
E=0;
}
//写数据函数
void WriteData(unsigned char c)
{
DelayMs(5);//保证信号稳定
E=0;
RS=1;
_nop_();
E=1;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
(3.76 KB, 下载次数: 30)
下载附件
2017-12-5 20:09 上传
所有资料51hei提供下载:
电子锁的制作20171202.docx
(3.52 MB, 下载次数: 16)
2017-12-5 14:34 上传
点击文件名下载附件
制作步骤
下载积分: 黑币 -5
1205.zip
(6.69 KB, 下载次数: 14)
2017-12-5 14:38 上传
点击文件名下载附件
代码
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1