最近的一個作業 電子鎖的設計-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提供下載:
1205.zip
(6.69 KB, 下載次數: 14)
2017-12-5 14:38 上傳
點擊文件名下載附件
代碼 下載積分: 黑幣 -5
|