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

矩陣鍵盤之門鎖小項目(stm32f103zet6)

這篇具有很好參考價值的文章主要介紹了矩陣鍵盤之門鎖小項目(stm32f103zet6)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

今天,給大家分享的是自己弄著玩的一個矩陣鍵盤控制控制舵機模擬一個智能門鎖的功能。

用到的硬件:
開發(fā)板我用的是原子哥的精英板(殺雞用宰牛刀了)。

矩陣鍵盤(寶上十幾塊買的):

矩陣鍵盤之門鎖小項目(stm32f103zet6)

外加一個舵機和一個0.96的oled顯示屏。

矩陣鍵盤:有VCC,GND,SCL,SDO四條線,這個矩陣鍵盤的驅(qū)動原理和i2c類似,

從SDO發(fā)送一個100微秒的高電平為讀取信號,讀取數(shù)據(jù)的流程為:

? ? 1.SDO設(shè)置為輸出模式

? ? 2.SDO拉高

? ? 3.延時100微秒

? ? 4.SDO拉低

? ? 5.SDO設(shè)置為輸入模式

接下來就會接收一個16位的數(shù)據(jù),上代碼:

u16 TOUCHKEY_READ(void)
{
	u8 i;
	u16 re_val=0;
	SDO_OUT();//設(shè)置sdo為輸出
	SD0_Set(1);//sdo拉高
	delay_us(100);
	SD0_Set(0);//sd0拉低
	SDO_IN();//設(shè)置sdo為輸入
	for(i=0;i<16;i++)
	{
		SCL_Set(1);//拉高scl
		delay_us(200);
		SCL_Set(0);//拉低scl
		if(Read_SDO)//讀SDO是否為高
		{
			re_val |=(1<<i);//為真就把1向左移i位與re_val做或運算
		}
	}
	delay_ms(2);
	return re_val;
}

這是我配置的.h文件配合上面一起看

#define SCL_Set(EN) (EN)? GPIO_SetBits(GPIOB,GPIO_Pin_6):GPIO_ResetBits(GPIOB,GPIO_Pin_6)//問號表達式 EN值位真就執(zhí)行前面 為假相反
#define SD0_Set(EN) (EN)? GPIO_SetBits(GPIOB,GPIO_Pin_7):GPIO_ResetBits(GPIOB,GPIO_Pin_7)
#define Read_SDO  GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7)//讀取輸入的數(shù)據(jù)

//IO 方向設(shè)置
#define SDO_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
#define SDO_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}

然后就是數(shù)據(jù)的處理,我自己寫的數(shù)據(jù)處理老是有點小毛病,是在網(wǎng)上找的:

u8 Get_KeyNum(void)
{
 u8 key_num;
 NowKeyNum=TOUCHKEY_READ();
 if((NowKeyNum & 0x0001)&& !(PreKeyNum & 0x0001)) 
 {
		 key_num='1';
		 }
		 if((NowKeyNum & 0x0002)&& !(PreKeyNum & 0x0002)) 
		 {
		 key_num='2';
		 }
		 if((NowKeyNum & 0x0004)&& !(PreKeyNum & 0x0004))
		 {
		 key_num='3';
		 }
		 if((NowKeyNum & 0x0008)&& !(PreKeyNum & 0x0008))
		 {
		 key_num='A'; 
		 }
		 if((NowKeyNum & 0x0010)&& !(PreKeyNum & 0x0010))
		 {
		 key_num='4'; 
		 }
		 if((NowKeyNum & 0x0020)&& !(PreKeyNum & 0x0020)) 
		 {
		 key_num='5';
		 }
		 if((NowKeyNum & 0x0040)&& !(PreKeyNum & 0x0040)) 
		 {
		 key_num='6';
		 }
		 if((NowKeyNum & 0x0080)&& !(PreKeyNum & 0x0080)) 
		 {
		 key_num='B';
		 }
		 if((NowKeyNum & 0x0100)&& !(PreKeyNum & 0x0100)) 
		 {
		 key_num='7';
		 }
		 if((NowKeyNum & 0x0200)&& !(PreKeyNum & 0x0200)) 
		 {
		 key_num='8';
		 }
		 if((NowKeyNum & 0x0400)&& !(PreKeyNum & 0x0400)) 
		 {
		 key_num='9';
		 }
		 if((NowKeyNum & 0x0800)&& !(PreKeyNum & 0x0800)) 
		 {
		 key_num='C';
		 }
		 if((NowKeyNum & 0x1000)&& !(PreKeyNum & 0x1000)) 
		 {
		 key_num='*';
		 }
		 if((NowKeyNum & 0x2000)&& !(PreKeyNum & 0x2000))
		 {
		 key_num='0';
		 }
		 if((NowKeyNum & 0x4000)&& !(PreKeyNum & 0x4000))
		 {
		 key_num='#';
		 }
		 if((NowKeyNum & 0x8000)&& !(PreKeyNum & 0x8000)) 
		 {
		 key_num='D';
		 }

		 PreKeyNum=NowKeyNum;
		 return key_num;
}

舵機的驅(qū)動我之前也有介紹過這里就不介紹了,需要的可以看一下。http://t.csdn.cn/NQsqk

這是判斷密碼是否正確函數(shù)以及oled顯示內(nèi)容函數(shù):

char configpw[10]="1010#";//密碼
void Judgement(void)
{
	int n=0;
	for(;1;n++)
	{
		if(password[n]==configpw[n])
		{
			if(password[n]=='#'&&configpw[n]=='#')
			{
				
				Open_Lock();
				break;//密碼輸入成功 
			}
		}
		else
		{
		  Password_Mistake();
			break;//密碼輸入錯誤
		}
	}
	i=0;//i清除標志位
}
void Open_Lock(void)//密碼正確執(zhí)行效果
{
	OLED_Clear(0); //顯示屏顯示
	OLED_ShowCHinese(26,4,4);//密
	OLED_ShowCHinese(46,4,5);//碼
	OLED_ShowCHinese(66,4,6);//正
	OLED_ShowCHinese(86,4,7);//確
	SG90_set();//舵機驅(qū)動函數(shù)
}
void Password_Mistake()//密碼錯誤執(zhí)行效果
{
//顯示屏顯示函數(shù)
	OLED_Clear(0);
	OLED_ShowCHinese(26,4,4);//密
	OLED_ShowCHinese(46,4,5);//碼
	OLED_ShowCHinese(66,4,8);//錯
	OLED_ShowCHinese(86,4,9);//誤
}

最后就是主函數(shù)? (我這里的#include "include.h" 是定義了一個include.h里面包含了其他所有的.h文件)

#include "include.h"
char password[10];
int i=0,I;
int main(void)
{
	char mun='D';
	char MUN;
	Init();
		OLED_Clear(0);
		OLED_ShowCHinese(26,0,0);//王
		OLED_ShowCHinese(46,0,1);//某
		OLED_ShowCHinese(66,0,2);//科
		OLED_ShowCHinese(86,0,3);//技
	while(1)
	{
		delay_ms(50);
		MUN=Get_KeyNum();//獲取矩陣鍵盤的數(shù)據(jù)
		if(mun!=MUN)//密碼的不重復(fù) 其作用是不讓一直進入執(zhí)行
		{
			mun=Get_KeyNum();//獲取矩陣鍵盤的數(shù)據(jù)
			password[i++]=mun;
			BEEP_OPEN;//輸入成功 蜂鳴器驅(qū)動
			delay_ms(100);
			BEEP_CLOSE;
			if(password[i-1]=='#')//'#'為結(jié)束
			{
			    Judgement();//判斷密碼是否正確
				  
			}//'#'為結(jié)束,在這里進入函數(shù)判斷密碼是否正確
			else
			{
				OLED_ShowChar(i*20,6,password[i-1],16);//oled顯示輸入數(shù)字 ’#‘(結(jié)束符)不顯示
			}
		}
	}
}

至于為什么num初始化為’D‘呢 ?

我測試多次發(fā)現(xiàn)一上電過后不經(jīng)過任何操作讀取到的初始值就是’D‘至于是什么原因沒找到,所以就將就它初始化一個D,就不會一上電就執(zhí)行if里面的代碼。

VID_20220826_222036

能力有限 不喜勿噴 ——來自喜歡分享的小王

鏈接:https://pan.baidu.com/s/15GbKBrs46HZy5kSqT55iQQ?pwd=6hzi?
提取碼:6hzi文章來源地址http://www.zghlxwxcb.cn/news/detail-498093.html

到了這里,關(guān)于矩陣鍵盤之門鎖小項目(stm32f103zet6)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • STM32F103ZET6【標準庫函數(shù)開發(fā)】------04五個串口的詳細配置

    STM32F103ZET6【標準庫函數(shù)開發(fā)】------04五個串口的詳細配置

    正點原子戰(zhàn)艦開發(fā)板 STM32F103ZET6有5個串口,查看引腳圖可以找到對應(yīng)的IO口分別如下 串口 USART1 USART2 USART3 UART4 UART5 輸入/輸出方式 USARTx_TX PA9 PA2 PB10 PC10 PC12 復(fù)用推挽輸出 USARTx_RX PA10 PA3 PB11 PC11 PD2 浮空輸入 USART1掛在APB2下 USART2,USART3,USART4,USART5掛在APB1下 串口調(diào)試助手設(shè)置波特率

    2024年02月03日
    瀏覽(24)
  • STM32F103ZET6 封裝 LQFP-144 ST意法 單片機芯片

    STM32F103ZET6 封裝 LQFP-144 ST意法 單片機芯片

    STM32F103ZET6 是意法半導(dǎo)體(STMicroelectronics)生產(chǎn)的一款基于 ARM Cortex-M3 內(nèi)核的 32 位微控制器。它具有高性能、低功耗的特點,廣泛應(yīng)用于各種嵌入式系統(tǒng)和工業(yè)應(yīng)用中。STM32F103ZET6 的主要特點如下: 內(nèi)核:ARM Cortex-M3,工作頻率最高可達 72MHz。 存儲器:64KB SRAM,512KB FLASH。 外

    2024年04月22日
    瀏覽(28)
  • STM32---stm32f103c8t6與stm32f103zet6之間的代碼移植轉(zhuǎn)換

    STM32---stm32f103c8t6與stm32f103zet6之間的代碼移植轉(zhuǎn)換

    目錄 一、將c8t6轉(zhuǎn)換為zet6 1、修改啟動文件 2、修改芯片 3、將MD修改為HD ?4、下載器的修改 5、修改完成,編譯成功 ?二、將zet6轉(zhuǎn)換為c8t6 最終結(jié)果如下:? ?將STM32F103C8改為STM32F103ZE ? 基本相同,反向即可。 ? ?

    2024年02月06日
    瀏覽(46)
  • MDK Keil5 創(chuàng)建Stm32工程-理論篇(這里以Stm32F103Zet6為例)

    MDK Keil5 創(chuàng)建Stm32工程-理論篇(這里以Stm32F103Zet6為例)

    整個工程可以粗略的劃分為幾個文件夾: BSP 底層驅(qū)動比如GPIOTimer等驅(qū)動文件 CMSIS 內(nèi)核相關(guān)的文件 Firmware 生成的固件下載文件 Mycode 用戶編寫的相關(guān)文件,主要編寫的文件都在這個文件夾里 Project 工程文件 startup 芯片啟動文件 STM32F10x_FWLib 標準庫文件 USER 主函數(shù)等文件 readm

    2023年04月24日
    瀏覽(95)
  • 【LVGL】STM32F103ZET6——LVGL_GUI_GUIDER移植過程成功

    【LVGL】STM32F103ZET6——LVGL_GUI_GUIDER移植過程成功

    STM32F103ZET6——LVGL_GUI_GUIDER移植過程 STM32F103ZET6——LVGL_GUI_GUIDER移植過程 使用工具: 1.LVGL庫8.02 2.GUI_GUIDER 3.keil5 設(shè)計出來的總體是這樣 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 這部分有很多大佬已經(jīng)寫的很成熟了,我就不贅述了 安裝包在這里硬件資源 右上角可將

    2024年02月12日
    瀏覽(58)
  • 正點原子stmf103zet6代碼移植為stm32f103c8t6(庫函數(shù)版)

    目錄 1、打開正點原子的工程模板template, 點擊魔術(shù)棒 ?2、 修改芯片型號 為stm32f103c8

    2024年02月01日
    瀏覽(29)
  • 基于STM32F103ZET6使用STM32CubeMX配置FSMC模塊驅(qū)動LCD屏(基于正點原子歷程)

    基于STM32F103ZET6使用STM32CubeMX配置FSMC模塊驅(qū)動LCD屏(基于正點原子歷程)

    在學習STM32的過程中,剛好學到了LCD屏,我使用的是STM32F103ZET6,屏幕是正點原子的。但是在我自己新建工程點亮顯示LCD屏時遇到了很多問題。解決之后分享在此,希望能幫助到遇到此困惑的朋友。 想要快速驅(qū)動LCD屏請直接跳轉(zhuǎn)到CubeMX配置 FSMC全名叫可變靜態(tài)存儲控制器(Fle

    2024年02月15日
    瀏覽(50)
  • STM32F103ZET6 GPIO工作模式介紹+使用寄存器點亮第一個LED燈

    STM32F103ZET6 GPIO工作模式介紹+使用寄存器點亮第一個LED燈

    目錄 ?GPIO的工作模式介紹 1.輸入模式(模擬、上拉、下拉、浮空) 2.輸出模式(推挽/開漏) 3.復(fù)用功能(推挽/開漏) 4.模擬輸入輸出(上下拉無影響) 如何使用寄存器點亮第一個LED燈 ? ? ? ? 在輸入模式時,施密特觸發(fā)器打開,輸出被禁止??赏ㄟ^輸入數(shù)據(jù)寄存器 GPIOx_

    2024年02月06日
    瀏覽(91)
  • 基于STM32F103ZET6單片機驅(qū)動SM16306SJ控制8個LED燈的系統(tǒng)設(shè)計

    基于STM32F103ZET6單片機驅(qū)動SM16306SJ控制8個LED燈的系統(tǒng)設(shè)計

    1.設(shè)計要求:使用stm32f103zet6精英開發(fā)板? 采用SM16306SJ驅(qū)動8個LED燈。 2.原理圖 3.代碼 4.實物效果圖 備注:1 硬件上有一個LED燈壞了,所以才亮了7個LED燈 ???????????2 一個SM16306SJ最多可以驅(qū)動16個LED燈 ???????????3 SM16306SJ跟MBI5020程序通用

    2024年04月17日
    瀏覽(132)
  • 基于STM32F103ZET6的(單/三)路HC-SR04超聲波測距+TFTLCD實時顯示+距離報警

    基于STM32F103ZET6的(單/三)路HC-SR04超聲波測距+TFTLCD實時顯示+距離報警

    一、成果圖 說明:本程序的源碼地址: https://github.com/Lfy-YF/Campus-Project ?????????? CSDN下載連接:https://download.csdn.net/download/weixin_58849239/87829470 源碼包含四個版本,涉及單路測距、三路測距、增加外部中斷(用來版本記錄的~) 運行效果: 本程序?qū)崿F(xiàn)脫機測距,共左中右

    2024年02月11日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包