|
電子密碼鎖
1. 采用 LCD12864 顯示;
2. 矩陣式按鍵輸入密碼,密碼長(zhǎng)度 6 位;
3. 具有密碼修改功能,可存儲(chǔ) 3 組密碼;
4. 密碼輸入正確則屏幕顯示正確的提示,屏幕顯示提示:密碼正確!
5密碼輸入錯(cuò)誤,屏幕顯示提示:密碼錯(cuò)誤!請(qǐng)重新輸入。連續(xù)錯(cuò)誤次數(shù)達(dá)到 3 次,并有紅色 LED 燈亮。
求大神幫 ,有源碼,能在開發(fā)板上使用
單片機(jī)源程序如下:
- #include "lcd12864.h"
- //寫數(shù)據(jù)
- void WriteDataLCD(unsigned char WDLCD)
- {
- ReadStatusLCD(); //檢測(cè)忙
- LCD_RS = 1;
- LCD_RW = 0;
- LCD_Data = WDLCD;
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 0;
- }
- //寫指令
- void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC為0時(shí)忽略忙檢測(cè)
- {
- if (BuysC) ReadStatusLCD(); //根據(jù)需要檢測(cè)忙
- LCD_RS = 0;
- LCD_RW = 0;
- LCD_Data = WCLCD;
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 0;
- }
- //讀數(shù)據(jù)
- unsigned char ReadDataLCD(void)
- {
- LCD_RS = 1;
- LCD_RW = 1;
- LCD_E = 0;
- LCD_E = 0;
- LCD_E = 1;
- return(LCD_Data);
- }
- //讀狀態(tài)
- unsigned char ReadStatusLCD(void)
- {
- LCD_Data = 0xFF;
- LCD_RS = 0;
- LCD_RW = 1;
- LCD_E = 1;
- while (LCD_Data & Busy); //檢測(cè)忙信號(hào)
- LCD_E = 0;
- return(LCD_Data);
- }
- void LCDInit(void) //LCM初始化
- {
- WriteCommandLCD(0x30,1); //顯示模式設(shè)置,開始要求每次檢測(cè)忙信號(hào)
- WriteCommandLCD(0x01,1); //顯示清屏
- WriteCommandLCD(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
- WriteCommandLCD(0x0C,1); // 顯示開及光標(biāo)設(shè)置
- }
- void LCDClear(void) //清屏
- {
- WriteCommandLCD(0x01,1); //顯示清屏
- WriteCommandLCD(0x34,1); // 顯示光標(biāo)移動(dòng)設(shè)置
- WriteCommandLCD(0x30,1); // 顯示開及光標(biāo)設(shè)置
- }
- void LCDFlash(void) //閃爍效果
- {
- WriteCommandLCD(0x08,1); //顯示清屏
- Delay400Ms();
- WriteCommandLCD(0x0c,1); // 顯示開及光標(biāo)設(shè)置
- Delay400Ms();
- WriteCommandLCD(0x08,1); //顯示清屏
- Delay400Ms();
- WriteCommandLCD(0x0c,1); // 顯示開及光標(biāo)設(shè)置
- Delay400Ms();
- WriteCommandLCD(0x08,1); //顯示清屏
- Delay400Ms();
- }
- //按指定位置顯示一個(gè)字符
- void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
- {
- if(Y<1)
- Y=1;
- if(Y>4)
- Y=4;
- X &= 0x0F; //限制X不能大于16,Y不能大于1
- switch(Y){
- case 1:X|=0X80;break;
- case 2:X|=0X90;break;
- case 3:X|=0X88;break;
- case 4:X|=0X98;break;
- }
- WriteCommandLCD(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
- WriteDataLCD(DData);
- }
- //按指定位置顯示一串字符
- void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)
- {
- unsigned char ListLength,X2;
- ListLength = 0;
- X2=X;
- if(Y<1)
- Y=1;
- if(Y>4)
- Y=4;
- X &= 0x0F; //限制X不能大于16,Y在1-4之內(nèi)
- switch(Y){
- case 1:X2|=0X80;break; //根據(jù)行數(shù)來選擇相應(yīng)地址
- case 2:X2|=0X90;break;
- case 3:X2|=0X88;break;
- case 4:X2|=0X98;break;
- }
- WriteCommandLCD(X2, 1); //發(fā)送地址碼
- while (DData[ListLength]>=0x20) //若到達(dá)字串尾則退出
- {
- if (X <= 0x0F) //X坐標(biāo)應(yīng)小于0xF
- {
- WriteDataLCD(DData[ListLength]); //
- ListLength++;
- X++;
- Delay5Ms();
- }
- }
- }
- //5ms延時(shí)
- void Delay5Ms(void)
- {
- unsigned int TempCyc = 5552;
- while(TempCyc--);
- }
- //400ms延時(shí)
- void Delay400Ms(void)
- {
- unsigned char TempCycA = 5;
- unsigned int TempCycB;
- while(TempCycA--)
- {
- TempCycB=7269;
- while(TempCycB--);
- };
- }
復(fù)制代碼
所有資料51hei提供下載:
新建文件夾 (2).zip
(1.96 KB, 下載次數(shù): 35)
2020-1-12 13:31 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|