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

矩陣鍵盤控制LCD1602顯示屏顯示數(shù)字

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

?主函數(shù)部分,其中的LCD1602.h的頭文件是在嗶哩嗶哩江科大自化協(xié)的博主的視頻資料

#include <REGX51.H>
#include"LCD1602.h"

void Delay(int time)
unsigned char test(void);
unsigned char keynumber;
//int keynumber;

void main(void)
{
	keynumber = 0;
	LCD_Init();
	LCD_ShowString(1,1,"Hello,World!");
	while(1)
	{
		keynumber = test();//獲取按下的按鍵數(shù)字
		if(keynumber)
		{
			LCD_ShowNum(2,1,keynumber,2);
		}
	}
}
void Delay(int time)		//延時函數(shù)(單位 毫秒)1 秒 = 1 毫秒
{
	unsigned char i, j;

	time = 2;//偷懶,就不需要一個一個的將20改為2了
	i = 2;
	j = 199;
	while(time--)
	{
	do
	{
		while (--j);
	} while (--i);
  }
	
}

unsigned char test(void)
{
	//while(1)
	{
	unsigned char Keynumber;
	Keynumber = 0;
	P0 = 0xFF;
	P0_4 = 0;//第一列置0
	//檢測行
	if(P0_0 == 0)
	{
		Delay(1);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(1);//再次消抖
		Keynumber = 1;
	}
		//return Keynumber;
		if(P0_1 == 0)
	{
		Delay(1);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(1);//再次消抖
		Keynumber = 5;
	}
	if(P0_2 == 0)
	{
		Delay(1);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(1);//再次消抖
		Keynumber = 9;
	}
	if(P0_3 == 0)
	{
		Delay(1);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(1);//再次消抖
		Keynumber = 13;
	}
	//第一列檢測完成
	
	//檢測第二列
	P0 = 0xFF;
	P0_5 = 0;//第二列置0
	//檢測行
	if(P0_0 == 0)
	{
		Delay(1);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(1);//再次消抖
		Keynumber = 2;
	}
	if(P0_1 == 0)
	{
		Delay(20);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(20);//再次消抖
		Keynumber = 6;
	}
	if(P0_2 == 0)
	{
		Delay(20);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(20);//再次消抖
		Keynumber = 10;
	}
	if(P0_3 == 0)
	{
		Delay(20);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(20);//再次消抖
		Keynumber = 14;
	}
	//第二列檢測完成
	//檢測第三列
	P0 = 0xFF;
	P0_6 = 0;//第三列置0
	//檢測行
	if(P0_0 == 0)
	{
		Delay(20);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(20);//再次消抖
		Keynumber = 3;
	}
	if(P0_1 == 0)
	{
		Delay(20);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(20);//再次消抖
		Keynumber = 7;
	}
	if(P0_2 == 0)
	{
		Delay(20);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(20);//再次消抖
		Keynumber = 11;
	}
	if(P0_3 == 0)
	{
		Delay(20);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(20);//再次消抖
		Keynumber = 15;
	}
	//第三列檢測完成
	//檢測第四列
	P0 = 0xFF;
	P0_7 = 0;//第四列置0
	//檢測行
	if(P0_0 == 0)
	{
		Delay(20);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(20);//再次消抖
		Keynumber = 4;
	}
	if(P0_1 == 0)
	{
		Delay(20);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(20);//再次消抖
		Keynumber = 8;
	}
	if(P0_2 == 0)
	{
		Delay(20);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(20);//再次消抖
		Keynumber = 12;
	}
	if(P0_3 == 0)
	{
		Delay(20);//消抖
		while(P0_0 == 0)//檢測按鍵是否還是按下狀態(tài)
		{
			
		}//松手后跳出
		Delay(20);//再次消抖
		Keynumber = 16;
	}
		return Keynumber;
  }
}

總結(jié):

? ? 首先是我學(xué)習(xí)時遇到的問題:

在我一開始運行的時候出現(xiàn)的問題就是,一開始在給主函數(shù)的keynumber賦值的時候,等號的左值是叫做Matrixkey的函數(shù),當(dāng)我按下1按鍵時顯示屏顯示01,但是當(dāng)我按下其他按鍵時,顯示屏沒有任何反應(yīng),一開始我也不明白是哪里錯了,然后我重新創(chuàng)建了一個新的函數(shù)test,目的是將Matrixkey函數(shù)分成小部分,即按照一個按鍵的一個按鍵的逐一搬運到test函數(shù),搬運第一個按鍵的時候就直接燒錄,然后測試是哪一部分出的問題,我先搬運的是1和2,都沒問題,于是我直接搬運了一整行,發(fā)現(xiàn)仍然沒問題,直到我開始搬運第二行,有問題了,就是按下第一個,然后很快的就按下第二行的某個按鍵的時候,第二個數(shù)字沒有馬上顯示,而是間隔了一段相對長的時間,當(dāng)時想的是沒出錯就行,于是就繼續(xù)做cv的工作,全部搬運完開始運行時,出現(xiàn)第二個問題,亂碼,我當(dāng)時想到的是延時的問題,于是就把延時的次數(shù)改成了time = 2,因此我的主函數(shù)雖然還是20,但是因為我偷懶,還是直接在Delay的內(nèi)部給time賦值為2,然后問題就解決了,所以大概率是因為,按下第一個按鍵,再按下第二個按鍵后,第一個按鍵顯示還沒結(jié)束,就顯示了第二個

? ? 其次是我后面通過矩陣掃面明白的一個問題:

就是為什么這里在掃描時是將全部io口置1,然后在將要掃描的行置0,而不是前者置0后者置1,當(dāng)然兩種方法在做簡單的程序的時候都是可行的,但是第一種更準(zhǔn)確,51單片機(jī)的io口是雙向輸出輸入的模式,采用的是若上拉輸出(當(dāng)輸出的是高電平時,能夠輸出的電流很小,很容易被別的強(qiáng)下拉拉低),假設(shè)下列情況:

矩陣鍵盤控制LCD1602顯示屏顯示數(shù)字

?

情況一:

將所有io口置0,然后將要檢測行置1,若按下按鍵1,有可能被置1的行會被拉低為0,所有的io口又變?yōu)榱?,那就檢測不到了,這是我個人的看法

情況二:

將所有io口置1,然后將要檢測行置0,若按下按鍵1,也不易改變輸出電平,檢測更為準(zhǔn)確文章來源地址http://www.zghlxwxcb.cn/news/detail-513820.html

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

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

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

相關(guān)文章

  • STM32-基本知識梳理10-FSMC控制ST7789V-LCD液晶顯示屏

    STM32-基本知識梳理10-FSMC控制ST7789V-LCD液晶顯示屏

    一、ST7789V-LCD液晶顯示 1,一種計算機(jī)的I/O設(shè)備,即輸入輸出設(shè)備; 2,數(shù)據(jù)傳遞結(jié)構(gòu),光線的傳遞通過偏光片進(jìn)行調(diào)整,最終傳遞到濾光片上,進(jìn)而不同RGB數(shù)據(jù)點,即像素點; 3, LCD顯示器的關(guān)鍵參數(shù) ①像素:顯示器的像素指它成像最小的點 ②分辨率:像素點的個數(shù)的乘積

    2024年02月12日
    瀏覽(21)
  • 51單片機(jī)矩陣鍵盤——LCD1602顯示

    51單片機(jī)矩陣鍵盤——LCD1602顯示

    本次的實驗需要用到LCD1602液晶屏,需要用到LCD1602.c 與LCD1602.h文件鏈接: https://download.csdn.net/download/YLG_lin/86404949 使用矩陣鍵盤隨意按下按鍵,LCD1602第二行前兩位就會顯示對應(yīng)按鍵按下的數(shù)字。 在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式 采用

    2023年04月09日
    瀏覽(34)
  • FPGA實現(xiàn)LCD顯示屏顯示彩條

    FPGA實現(xiàn)LCD顯示屏顯示彩條

    目錄 總體設(shè)計 ?讀顯示屏ID ?讀顯示屏ID代碼 時鐘分頻 ?時鐘分頻代碼 ?LCD顯示 lcd顯示模塊 LCD驅(qū)動模塊 lcd驅(qū)動代碼 頂層模塊 頂層模塊代碼 系統(tǒng)總體分為五個模塊,分別是:rd_id(讀顯示屏ID模塊),clk_div(時鐘分頻模塊),lcd_display(lcd屏顯示模塊),lcd_driver(lcd屏驅(qū)動模塊),和頂

    2024年02月16日
    瀏覽(25)
  • LCD拼接屏、LED顯示屏和OLED顯示屏的主要區(qū)別

    LCD拼接屏、LED顯示屏和OLED顯示屏的主要區(qū)別

    我們在生活或工作中經(jīng)??吹酱蟠笮⌒〉娘@示屏,但很多人卻分不清楚這些屏到底屬于哪一類,今天sostron與大家一起來分享下關(guān)于:LCD拼接屏、LED顯示屏、OLED透明屏三者的區(qū)別。 LCD拼接屏、LED顯示屏和OLED顯示屏是不同類型的顯示技術(shù),它們在構(gòu)成、工作原理和特點上存在明

    2024年02月17日
    瀏覽(23)
  • STM32—LCD液晶顯示屏

    STM32—LCD液晶顯示屏

    目錄 LCD液晶顯示屏介紹 液晶的組成 ?物理特性 液晶顯示屏內(nèi)部構(gòu)造 ?顏色深度 點亮LCD顯示屏 查看原理圖 圖片顯示 保存到工程用戶代碼的Inc目錄下 參數(shù)為數(shù)組名 字符顯示? 漢字顯示 某些物質(zhì)在熔融狀態(tài)或被溶劑溶解之后,盡管失去固態(tài)物質(zhì)的剛性,卻獲得了液體的易流動

    2024年02月04日
    瀏覽(23)
  • LCD12864顯示屏原理及使用教程

    LCD12864顯示屏原理及使用教程

    ????????LCD12864液晶顯示模塊是 128×64點陣的漢字圖形型液晶顯示模塊,可顯示漢字及圖形,內(nèi)置 8192個中文漢字(16X16 點陣)(需帶有字庫的型號才能顯示中文)、128 個字符(8X16 點陣)及 64X256 點陣顯示 RAM(GDRAM)??膳c CPU 直接接口,提供兩種界面來連接微處理機(jī):8

    2024年01月19日
    瀏覽(24)
  • 【STM32篇】驅(qū)動LCD顯示屏

    【STM32篇】驅(qū)動LCD顯示屏

    本次使用的硬件設(shè)備為野火的霸道V2開發(fā)板,顯示器控制芯片型號為ILI9341,實際型號為ST7789V。在編寫代碼時參考的是ILI9341數(shù)據(jù)手冊,二者差別不大,都是240*320分辨率。 ????????ILI9341是一個用于TFT液晶顯示的單芯片控制驅(qū)動器,具有262144色的240RGB x 320像素顯示解決方案。

    2024年02月12日
    瀏覽(24)
  • STM32F103系列 Proteus仿真 4*4矩陣鍵盤 串口+LCD1602顯示

    STM32F103系列 Proteus仿真 4*4矩陣鍵盤 串口+LCD1602顯示

    ????????最近一直在肝STM32系列芯片,這里我想要檢驗一下自己的初步學(xué)習(xí)成果,簡單的運用一下IO口的配置,代碼使用正點的庫函數(shù)模板寫的,仿真軟件是Proteus 8.13,代碼編寫編譯軟件是Keil MDK5,仿真芯片是STM32F103R6小容量芯片。 目錄 一、硬件設(shè)計 ?二、軟件設(shè)計 1、L

    2024年02月03日
    瀏覽(18)
  • FPGA學(xué)習(xí)筆記03——RGB LCD顯示屏

    FPGA學(xué)習(xí)筆記03——RGB LCD顯示屏

    LCD屏與FPGA芯片接口如下,其中LCD_R0—R7,G0—G7,B0—B7為RGB888信號, LCD_BL:背光板使能,為高時背光板才亮 LCD_DE:RGB數(shù)據(jù)使能,為高時RGB數(shù)據(jù)有效 LCD_VSYNC:豎直(列)掃描有效 LCD_HSYNC:水平(行)掃描有效 LCD_CLK:顯示器時鐘 //在控制RGB LCD屏?xí)r,即可使用DE使能,也能用VSY

    2024年02月03日
    瀏覽(18)
  • STM32 使用LCD12864顯示屏(串行方式)

    STM32 使用LCD12864顯示屏(串行方式)

    12864LCD液晶顯示模塊是一款4位/8位并行、2線或3線接口方式,內(nèi)部含有國際一級、二級簡體中文字庫的圖形點陣液晶模塊。顯示分辨率為128 64,內(nèi)置8198個16 16點漢字,和128個16*8點ASCII字符集。 CS片選信號 (如果只有一款屏,可以將CS直接接到VCC上,實現(xiàn)兩線通訊。) SID數(shù)據(jù)傳

    2024年02月05日
    瀏覽(30)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包