標(biāo)題:
單片機(jī)12864電子鎖程序
[打印本頁]
作者:
guigug
時(shí)間:
2020-1-12 13:34
標(biāo)題:
單片機(jī)12864電子鎖程序
電子密碼鎖
1. 采用 LCD12864 顯示;
2. 矩陣式按鍵輸入密碼,密碼長度 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
作者:
linnyshow
時(shí)間:
2020-3-6 16:12
挺好用的。
作者:
murenxin0911
時(shí)間:
2020-3-7 13:39
看上去不錯(cuò),一樣能用吧!
作者:
271671439
時(shí)間:
2020-3-8 03:14
寫的很詳細(xì),目測(cè)應(yīng)該能用
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1