最近的一个作业 电子锁的设计-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黑下载附件…………
复制代码
所有资料51hei提供下载:
|