国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖

這篇具有很好參考價(jià)值的文章主要介紹了使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

文章目錄

前言

一、工具準(zhǔn)備

工具一:51單片機(jī)

工具二:LCD1602液晶顯示屏

工具三:Keil軟件

二、開始操作

1.LCD1602的程序調(diào)試

2.矩陣鍵盤的程序調(diào)試

3.密碼鎖程序設(shè)計(jì)

總結(jié)


前言

51單片機(jī)是一種8位的可編程控制元件,廣泛應(yīng)用于各種工業(yè)生產(chǎn)、家電中。51單片機(jī)的廠家有很多,如Inter(英特爾)、Atmel(艾特梅爾)等公司,本次實(shí)驗(yàn)所使用的是宏晶公司的STC89C52RC型號的單片機(jī),此公司的其它型號單片機(jī)還有STC90C51、STC11系列、STC15系列、STC8系列等。??

LCD1602液晶顯示器是廣泛使用的一種字符型液晶顯示模塊。它是由字符型液晶顯示屏(LCD)、控制驅(qū)動主電路HD44780及其擴(kuò)展驅(qū)動電路HD44100,以及少量電阻、電容元件和結(jié)構(gòu)件等裝配在PCB板上而組成。更多詳細(xì)介紹在此不多言,請移步百度百科:LCD1602詳情

一、工具準(zhǔn)備

工具一:51單片機(jī)

我使用的是 STC89C52型號的,其它類型的單片機(jī)都行,但是要注意其引腳的分布、I/O口類型,還有在燒錄程序時(shí)注意更改單片機(jī)的型號。

使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖

工具二:LCD1602液晶顯示屏

使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖

?購買單片機(jī)時(shí),這個(gè)模塊應(yīng)該是贈送的,也可以單買。這里提一下LCD1602的控制指令,后面顯示屏的初始化、寫/讀操作等需要用到。

LCD1602控制指令?

使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖

?常用的指令碼有:

?? 0x38:設(shè)置16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口

?? 0x0C:設(shè)置開顯示,不顯示光標(biāo)

?? 0x06:寫一個(gè)字符后地址指針加1

?? 0x01:顯示清0,數(shù)據(jù)指針清0

?? 0x80:LCD第一行的起始地址

?? 0x80+0x40:LCD第二行的起始地址

工具三:Keil軟件

使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖

?Keil是一款專業(yè)實(shí)用的c語言軟件開發(fā)系統(tǒng),提供編譯器、編譯器、安裝包和調(diào)試跟蹤等功能。我使用的是Keil5,文末有網(wǎng)盤鏈接,也可以去官網(wǎng)下載:Keil5軟件

使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖

二、開始操作

1.LCD1602的程序調(diào)試

?調(diào)試前先找到單片機(jī)開發(fā)板的原理圖,查看顯示屏的引腳。
使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖
使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖

由于調(diào)試的代碼過長,所以放入網(wǎng)盤里了,有需要的可參考。這里面的幾個(gè)調(diào)試函數(shù)說明一下:

函數(shù)介紹

ShowChar();

顯示一個(gè)字符

ShowString( );

顯示字符串

ShowNum( );

顯示十進(jìn)制數(shù)字

ShowSignedNum( );

顯示有符號十進(jìn)制數(shù)字

ShowHexNum( );

顯示十六進(jìn)制數(shù)字

ShowBinNum( );

顯示二進(jìn)制數(shù)字

調(diào)試完后可以驗(yàn)證一下程序,調(diào)試中LED和數(shù)碼管可能會亂閃,這是由于引腳沖突造成的。

使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖

2.矩陣鍵盤的程序調(diào)試

我們先來了解一下矩陣鍵盤的接線原理。

為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如51單片機(jī)的4X4的矩陣鍵盤,用8個(gè)引腳控制16個(gè)開關(guān)按鍵。這樣連接后可采用逐行或逐列的“掃描”方式,就可以讀出任何位置按鍵的狀態(tài)。?

例如,如果我們將引腳P1.3置為0(低電位),其他引腳置為1(高電位),當(dāng)按下按鍵S1時(shí),引腳P1.7就會變?yōu)?(低電位);反之亦然,如果P1.6引腳變?yōu)榱?,那么我們就知道按鍵S5被按下了。又由于51的I/O口屬于“弱提強(qiáng)拉”型,故這樣的電位設(shè)置是可靠的。

使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖

?了解矩陣鍵盤的工作原理后,使用編程來實(shí)現(xiàn),代碼如下:

#include <reg51.h>
#include "Delay.h"
/*引腳配置*/
sbit FirLine = P1^3;
sbit ScoLine = P1^2;
sbit ThrLine = P1^1;
sbit ForLine = P1^0;
sbit FirRow = P1^7;
sbit ScoRow = P1^6;
sbit ThrRow = P1^5;
sbit ForRow = P1^4;

/**
  * @brief  矩陣鍵盤按鍵碼讀取
  * @param  無
  * @retval KeyNum 按下按鍵的鍵碼值
	如果按下不松手,不會跳出此函數(shù)
  */
unsigned char MatrixKey()
{
	unsigned char KeyNum = 0;
	/*按列掃描矩陣鍵盤*/
	P1 = 0xFF;
	FirLine = 0;
	if(FirRow == 0){Delay(20); while(FirRow == 0); Delay(20); KeyNum = 1;}
	if(ScoRow == 0){Delay(20); while(ScoRow == 0); Delay(20); KeyNum = 5;}
	if(ThrRow == 0){Delay(20); while(ThrRow == 0); Delay(20); KeyNum = 9;}
	if(ForRow == 0){Delay(20); while(ForRow == 0); Delay(20); KeyNum = 13;}
	
	P1 = 0xFF;
	ScoLine = 0;
	if(FirRow == 0){Delay(20); while(FirRow == 0); Delay(20); KeyNum = 2;}
	if(ScoRow == 0){Delay(20); while(ScoRow == 0); Delay(20); KeyNum = 6;}
	if(ThrRow == 0){Delay(20); while(ThrRow == 0); Delay(20); KeyNum = 10;}
	if(ForRow == 0){Delay(20); while(ForRow == 0); Delay(20); KeyNum = 14;}
	
	P1 = 0xFF;
	ThrLine = 0;
	if(FirRow == 0){Delay(20); while(FirRow == 0); Delay(20); KeyNum = 3;}
	if(ScoRow == 0){Delay(20); while(ScoRow == 0); Delay(20); KeyNum = 7;}
	if(ThrRow == 0){Delay(20); while(ThrRow == 0); Delay(20); KeyNum = 11;}
	if(ForRow == 0){Delay(20); while(ForRow == 0); Delay(20); KeyNum = 15;}
	
	P1 = 0xFF;
	ForLine = 0;
	if(FirRow == 0){Delay(20); while(FirRow == 0); Delay(20); KeyNum = 4;}
	if(ScoRow == 0){Delay(20); while(ScoRow == 0); Delay(20); KeyNum = 8;}
	if(ThrRow == 0){Delay(20); while(ThrRow == 0); Delay(20); KeyNum = 12;}
	if(ForRow == 0){Delay(20); while(ForRow == 0); Delay(20); KeyNum = 16;}
	
	return KeyNum;
}

?其中的延時(shí)函數(shù)Delay()為:

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

3.密碼鎖程序設(shè)計(jì)

完成LCD1602液晶顯示屏和矩陣鍵盤的調(diào)試之后,就可以將這兩個(gè)模塊合在一起開發(fā)新的內(nèi)容了,密碼鎖只是其中的一個(gè)小應(yīng)用而已,你還可以使用這兩個(gè)工具做更多好玩的內(nèi)容,做一個(gè)簡易的計(jì)算器?做一個(gè)實(shí)時(shí)日歷放在實(shí)驗(yàn)室?還可以用來顯示其他模塊的數(shù)據(jù),比如測距儀、測溫儀等。

話不多說,言歸正傳,進(jìn)入咱們的主題。

按鍵功能描述:?

有效按鍵范圍:S1~S12

S10~S9:對應(yīng)數(shù)字1~9

S11:刪除當(dāng)前輸入的數(shù)字,并向前移一位

S12:確認(rèn)鍵

#include <string.h>
#include <regx51.h>
#include "LCD1602.h"
#include "MatrixKey.h"
#include "Delay.h"

unsigned char KeyNum = 0;
unsigned char password[] = {5,2,0,1,3,1,4}; //正確密碼
void main()
{

	unsigned int i = 1, j = 0, sigl = 0;
  unsigned int In_password[6] = {0};
Outset:
	init_lcd();                   //LCD初始化
	ShowString(1,1,"PassWord");
	
	while(1)
	{
		KeyNum = MatrixKey();
		
		while(KeyNum && i <= 6)
		{
			if(KeyNum > 10) goto Other_Operation;
			else
			{
				In_password[i-1] = KeyNum % 10;
				ShowNum(2,i,In_password[i-1],1);
			}
			i++;
			KeyNum = 0;
		}
Other_Operation:
		/*每按下一次11鍵,刪除最后一個(gè)數(shù)字*/
		if(KeyNum == 11)
		{
			ShowNum(2,i-1,0);
			In_password[i-2] = 0;
			i--;
		}
								
		/*按下確認(rèn)鍵12,并且輸入滿6個(gè)數(shù)字,判斷輸入密碼正確性*/
	  else if(KeyNum == 12)
			{
				for(j = 0; j < 6; j++)
				{
					if(In_password[i] == password[i]) sigl = 0;
					else 
					{
						sigl = 1; break;
					}
				}
				if(sigl == 1) 
				{
					ShowString(2,1,"error!");
					i = 1;goto Outset;
				}
				else ShowString(2,1,"congratualtion");
			}
	}
}

?密碼正確效果圖:

使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖


總結(jié)

單片機(jī)的學(xué)習(xí)是枯燥的,也是深動有趣的,愿每一位未來的嵌入工程師們都能步步攀登,學(xué)有所成!

更新網(wǎng)盤鏈接:鏈接:https://pan.baidu.com/s/1z1799sJuVa56NPQCYWHjAA?
提取碼:kq3o文章來源地址http://www.zghlxwxcb.cn/news/detail-408542.html

到了這里,關(guān)于使用51單片機(jī)的矩陣鍵盤和LCD1602做一個(gè)密碼鎖的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 51單片機(jī)入門——LCD1602

    51單片機(jī)入門——LCD1602

    LCD ( Liquid Crystal Display 的簡稱) 液晶顯示器 。 LCD 的構(gòu)造是在兩片平行的玻璃基板當(dāng)中放置液晶盒,下基板玻璃上設(shè)置TFT(薄膜晶體管),上基板玻璃上設(shè)置彩色濾光片,通過TFT上的信號與電壓改變來控制液晶分子的轉(zhuǎn)動方向,從而達(dá)到控制每個(gè)像素點(diǎn)偏振光出射與否而達(dá)

    2024年02月09日
    瀏覽(22)
  • 【【51單片機(jī)LCD1602模塊介紹】】

    【【51單片機(jī)LCD1602模塊介紹】】

    顯示容量16x2 每個(gè)字符是5x7的點(diǎn)陣 VDD 是電源正極 4.5-5.5v VO 是對比度調(diào)節(jié)電壓 RS 數(shù)據(jù)/指令 選擇 1為數(shù)據(jù)0為指令 RW 讀寫選擇1是讀 0為寫 E 使能 1為數(shù)據(jù)有效 下降沿執(zhí)行命令 D0-D7 數(shù)據(jù)輸入輸出 A 背光電源正極 K 背光電源負(fù)極 LCD1602的操作流程 1.初始化: 發(fā)送0x38//八位數(shù)據(jù)接口,

    2024年02月15日
    瀏覽(32)
  • 51單片機(jī)LCD1602調(diào)試工具

    51單片機(jī)LCD1602調(diào)試工具

    參考視頻:江協(xié)科技51單片機(jī) LCD1602頭文件代碼 LCD1602 C語言文件 LCD1602主函數(shù)文件

    2024年01月24日
    瀏覽(24)
  • 51單片機(jī)(五)LCD1602調(diào)試工具

    51單片機(jī)(五)LCD1602調(diào)試工具

    ?? 專欄簡介:本專欄記錄了從零學(xué)習(xí)單片機(jī)的過程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時(shí)才能融會貫通。 ?? 專欄適用人群 :適用于想要從零基礎(chǔ)開始學(xué)習(xí)入門單片機(jī),且有一定C語言基礎(chǔ)的的童鞋

    2023年04月27日
    瀏覽(22)
  • MCU-51:單片機(jī)LCD1602詳解

    MCU-51:單片機(jī)LCD1602詳解

    LCD1602(Liquid Crystal Display)液晶顯示屏是一種字符型液晶顯示模塊,可以顯示ASCII碼的標(biāo)準(zhǔn)字符和其它的一些內(nèi)置特殊字符,還可以有8個(gè)自定義字符 顯示容量:16×2個(gè)字符,每個(gè)字符為5*7點(diǎn)陣 點(diǎn)陣圖形式液晶由M×N個(gè)顯示單元組成,假設(shè)LCD顯示屏有64行,每行有128列,每8列對應(yīng)

    2023年04月09日
    瀏覽(27)
  • 51單片機(jī) | LCD1602 液晶顯示實(shí)驗(yàn)

    51單片機(jī) | LCD1602 液晶顯示實(shí)驗(yàn)

    ??在前面章節(jié),我們已經(jīng)學(xué)習(xí)過幾種顯示裝置,例如靜態(tài)數(shù)碼管、動態(tài)數(shù)碼管、 8*8LED 點(diǎn)陣、串口通信。使用它們可以直觀顯示一些字符數(shù)據(jù),但是它們也有各種局限性,比如顯示字符數(shù)據(jù)太少,硬件設(shè)計(jì)復(fù)雜、代碼編寫難度大等。這一章就來介紹一種非常簡單且常用的顯

    2023年04月11日
    瀏覽(29)
  • 51單片機(jī)外設(shè)系列:LCD1602 的詳細(xì)編程

    51單片機(jī)外設(shè)系列:LCD1602 的詳細(xì)編程

    前言,LCD1602是一個(gè)比較常用的單片機(jī)顯示外設(shè),下面我們從它的顯示原理,來分析用51單片機(jī)編程的思路。另外結(jié)尾還提供了完成的程序代碼參考。 一、LCD1602的外觀、結(jié)構(gòu)和基本參數(shù) 引腳功能解析: 第1引腳:GND為電源地腳。 第2引腳:VCC接5V電源正極。 第3引腳:VL為液晶顯

    2024年02月05日
    瀏覽(65)
  • 51單片機(jī)LCD1602液晶屏顯示方法

    51單片機(jī)LCD1602液晶屏顯示方法

    以顯示hello,world!? ? 2022.10.17? 為例。 首先把LCD1602的模塊化程序添加到項(xiàng)目目錄中,模塊化方法在51單片機(jī)之程序模塊化_學(xué)習(xí)筆記吧的博客-CSDN博客這里可以學(xué)習(xí)。 實(shí)驗(yàn)程序: LCD1602.c文件代碼: LCD1602.h文件代碼: 把這兩個(gè)代碼,分別添加到LCD1602.c 和 LCD1602.h 文件,然后添加

    2023年04月08日
    瀏覽(23)
  • 51單片機(jī)學(xué)習(xí)筆記-12LCD1602液晶屏

    51單片機(jī)學(xué)習(xí)筆記-12LCD1602液晶屏

    [toc] 注:筆記主要參考B站江科大自化協(xié)教學(xué)視頻“51單片機(jī)入門教程-2020版 程序全程純手打 從零開始入門”。 注:工程及代碼文件放在了本人的Github倉庫。 LCD1602(Liquid Crystal Display)液晶顯示屏是一種字符型液晶顯示模塊,可以顯示ASCII碼的標(biāo)準(zhǔn)字符和其它的一些內(nèi)置特殊字

    2024年02月11日
    瀏覽(32)
  • 基于51單片機(jī)驅(qū)動MPU6050模塊(LCD1602顯示)

    基于51單片機(jī)驅(qū)動MPU6050模塊(LCD1602顯示)

    @TOC MPU-6050集成了3軸MEMS陀螺儀,3軸MEMS加速度計(jì),以及一個(gè)可擴(kuò)展的數(shù)字運(yùn)動處理器DMP,可用IIC接口連接一個(gè)第三方的數(shù)字傳感器。MPU-6050對陀螺儀和加速度計(jì)分別用了三個(gè)16位的ADC,將其測量的模擬量轉(zhuǎn)化為可輸出的數(shù)字量。為了精確跟蹤快速和慢速的運(yùn)動,傳感器的測量范

    2024年02月11日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包