欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
關于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.raoushi.com/bbs/)
Powered by Discuz! X3.1