色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

按鍵控制不同窗口顯示實現方法

CHANBAEK ? 來源:頭條號電子秘探 ? 作者:頭條號電子秘探 ? 2023-03-23 15:58 ? 次閱讀

綜合小實驗,完整的代碼,對前一段學習的總結。

模塊化編程去拼接實現自己想要的功能,一鍵多義用switch語句實現

延時函數

DelayXms.h

#ifndef __DELAYXMS_H__
#define __DELAYXMS_H__

#define u16 unsigned int  //宏定義
#define u8  unsigned char//數據范圍0--255
	
void DelayXms(u16 xms);

#endif

DelayXms.c

/*****************************
功能:延時x毫秒
*****************************/
#include "DelayXms.h"

void DelayXms(u16 xms)
{
	u16 i,j; //unsigned int 類型的數據范圍0-65535
	for(i=xms;i>0;i--){		
		for(j=124;j>0;j--);
	}	
}

共陰極數碼管底層顯示驅動

display.h

#ifndef __DISPLAY_H__
#define __DISPLAY_H__

#include 
#include "DelayXms.h"

#define GPIO_SEG P1  //段碼 IO
#define GPIO_BIT P3  //位選 IO
#define N  4         //數碼管的個數

extern u8 LEDBuf[];//外部引用申明(DisplayService.c會用到這個變量)
void Display();

#endif

display.c

#include "display.h"
u8 code leddata[]={ //共陰極數碼管的段碼表
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, //0-9【下標0-9】
0x77,0x7C,0x39,0x5E,0x79,0x71,      //  A-F【下標10-15】
0x76,0x38,0x37,0x3e,0x73,0x5c,0x40,//h,l,n,u,p,o,-【下標16-22】
0xff
};

u8 LEDBuf[]={23,23,23,23};//數據顯示緩沖區,
u8 code BitCode[]={0xfe,0xfd,0xfb,0xf7};//位選控制信號 

void Display()
{
	/*靜態局部變量生命周期:程序結束為止
	可以保持變量內容的持久性,函數調用結束時
	變量的值仍在*/
	
	static u8 i =  0;
	//1.送段碼
	GPIO_SEG =  leddata[LEDBuf[i]];
	//2.送位選
	GPIO_BIT =  BitCode[i];
	//3.1ms<延時<10ms
	DelayXms(9);
	//4.消影
	GPIO_SEG = 0x00;//不消影顯示會出問題
	
	i++;
	if(N == i)//條件控制
		i=0;
}

底層按鍵驅動

Key.h

#ifndef __KEY_H__
#define __KEY_H__

#include 
#include "DelayXms.h"

sbit key1 = P2^0;
sbit key2 = P2^1;
sbit key3 = P2^2;
sbit key4 = P2^3;

u8 Key_Scan();//按鍵掃描

#endif

Key.c

#include "Key.h"

u8 Key_Scan()
{
	u8 KeyNum = 0;
    key1 =1;key2=1;key3=1;key4=1;
	if(!key1 || !key2 || !key3 ||!key4)//1.判斷是否有按鍵按下
	{
		DelayXms(10);//2.延時消抖 10ms
		if(!key1 || !key2 || !key3 ||!key4)//3.再次判斷按鍵是否按下
		{
			if(!key1)
				KeyNum = 1; //4.給按鍵開關賦一個鍵值
			if(!key2)
				KeyNum = 2;
			if(!key3)
				KeyNum = 3;
			if(!key4)
				KeyNum = 4;
			while(!key1 || !key2 || !key3 ||!key4);//5.松手等待
		}
			
	}
	
	return KeyNum;
}

應用層---顯示服務函數

DisplayService.h

#ifndef __DISPLAYSERVICE_H__
#define __DISPLAYSERVICE_H__

#include "Display.h"

extern u8 parm1 ; //外部引用聲明
extern u8 parm2 ;//KeyService.c會用到
extern u8 parm3 ;
extern u8 parm4 ;
extern u8 windowNum;//KeyService.c會用到
void DisplayService();

#endif

DisplayService.c

#include "DisplayService.h"

u8 parm1 = 11; //初始顯示的數據
u8 parm2 = 22;
u8 parm3 = 33;
u8 parm4 = 44;
u8 windowNum = 0;//窗口變量
void DisplayService()
	{
		 
		switch(windowNum)
		{
			case 0:
				LEDBuf[0] = 20;//底層顯示驅動中段碼表中的下標20 顯示字母P
				LEDBuf[1] = 1;//顯示數字1
				LEDBuf[2] = parm1/10;//顯示十位上的數據
				LEDBuf[3] = parm1%10;//顯示個位上的數據
			
				break;
			case 1:
				LEDBuf[0] = 20;
				LEDBuf[1] = 2;
				LEDBuf[2] = parm2/10;
				LEDBuf[3] = parm2%10;
			
				break;
			case 2:
				LEDBuf[0] = 20;
				LEDBuf[1] = 3;
				LEDBuf[2] = parm3/10;
				LEDBuf[3] = parm3%10;
			
				break;
			case 3:
				LEDBuf[0] = 20;
				LEDBuf[1] = 4;
				LEDBuf[2] = parm4/10;
				LEDBuf[3] = parm4%10;
			
				break;
			default: 
				break;
		}
			
		
	}

應用層--按鍵服務函數

KeyService.h

#ifndef __KEYSERVICE_H__
#define __KEYSERVICE_H__

#include "Key.h"
#include "Display.h"
#include "DisplayService.h"

void Key_Service();

#endif

KeyService.c

#include "KeyService.h"

void Key_Service()
{
	switch(Key_Scan())
	{
		case 1:   //按鍵key1選擇窗口,共4個窗口
			windowNum++;//每按一下按鍵,窗口變量加1
			if(windowNum>3)   //條件控制
				windowNum = 0;//最后一個窗口銜接到第一個窗口
			break;
		case 2: //按鍵key2對窗口中的數據執行加1操作
			switch(windowNum)//用switch語句判斷對第幾個窗口進行操作
			{
				case 0:  //第一個窗口中的數據
					parm1++;
					if(parm1 > 99)//只能顯示2位數,超過99,需要置0
						parm1 =0;
					break;
				case 1://第二個窗口中的數據
					parm1++;
					if(parm2 > 99)
						parm2 =0;
					break;
				case 2: //第三個窗口中的數據
					parm3++;
					if(parm3 > 99)
						parm3 =0;
					break;
				case 3://第四個窗口中的數據
					parm4++;
					if(parm4 > 99)
						parm4 =0;
					break;
				default: break;
			}
			break;
		case 3: //按鍵key3對窗口中的數據執行減1操作
			switch(windowNum)//用switch語句判斷對第幾個窗口進行操作
			{
				case 0:
					parm1--;
					if(parm1 > 99)//變量parm范圍0-255,自減小于0會變成255
						parm1 =99; 
					break;
				case 1:
					parm1--;
					if(parm2 > 99)
						parm2 =99;
					break;
				case 2:
					parm3--;
					if(parm3 > 99)
						parm3 =99;
					break;
				case 3:
					parm4--;
					if(parm4 > 99)
						parm4 =99;
					break;
				default: break;
			}
			break;
		case 4: //按鍵key4對窗口中的數據置0
			switch(windowNum)//用switch語句判斷對第幾個窗口進行操作
			{
				case 0: 
					parm1=0;
					break;
				case 1:
					parm2=0;
					break;
				case 2:
					parm3=0;

					break;
				case 3:
					parm4=0;
				
					break;
				default: break;
			}
			break;
		default: break;
	}
}

main函數

main.c

#include "KeyService.h"

void main()
{
	u16 temp;
	for(temp=0;temp<100;temp++)
	{
		Display();//上電顯示一段時間畫面
	}
	
	while(1)
	{
		DisplayService();
		Key_Service();
		Display();
		
	}
	
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Switch
    +關注

    關注

    1

    文章

    533

    瀏覽量

    58222
  • 函數
    +關注

    關注

    3

    文章

    4327

    瀏覽量

    62573
  • 代碼
    +關注

    關注

    30

    文章

    4780

    瀏覽量

    68527
  • 按鍵控制
    +關注

    關注

    1

    文章

    44

    瀏覽量

    8773
收藏 人收藏

    評論

    相關推薦

    emwin窗口之間的消息傳遞方法

    轉一個經驗主要有三種方法:函數WM_SendMessageNoPara此函數用于將不帶參數的消息發送到指定窗口,通過此函數可以實現同窗口之間的消息傳遞。函數WM_SendMessag
    發表于 04-22 11:30

    你都知道STM32按鍵控制led的方法有哪些嗎

    按鍵控制led(有鎖存)第4種方式實現按鍵控制led(有鎖存,在2個LED上顯示二進制加法)楊桃32學習筆記,本文圖片文字皆為轉述回顧按鍵
    發表于 08-24 06:47

    按鍵控制外部中斷實現LED亮滅的方法

    一,按鍵控制外部中斷實現LED亮滅開機使得P1.0管腳的LED亮按下按鍵使得LED呈現“常亮”,“滅”,“閃爍”的三個狀態循環顯示。設計思路:在程序初始化時直接將P1.0置位為高電平,
    發表于 12-06 08:19

    按鍵控制花樣燈【匯編版】

    按鍵控制花樣燈【匯編版】按鍵控制花樣燈【匯編版】按鍵控制花樣燈【匯編版】按鍵控制花樣燈【匯編版】
    發表于 12-29 11:04 ?0次下載

    按鍵控制源程序

    一個按鍵控制3種功能按鍵控制按鍵控制按鍵控制按鍵控制
    發表于 02-23 14:06 ?0次下載

    STM32按鍵控制小車代碼

    好用的stm32小車代碼,STM32按鍵控制小車代碼,STM32按鍵控制小車代碼,STM32按鍵控制小車代碼,STM32按鍵控制小車代碼
    發表于 06-08 16:28 ?49次下載

    按鍵控制單個數碼管顯示

    19-按鍵控制單個數碼管顯示----------51單片機源程序 用keil直接打開
    發表于 06-16 15:36 ?34次下載

    1602按鍵控制數字變化

    通過按鍵控制1602數字顯示,暫停,加減
    發表于 12-09 16:38 ?30次下載

    fpga按鍵控制數碼管顯示

    本文主要介紹了fpga按鍵控制數碼管顯示程序設計。數碼管是由多個發光二極管封裝在一起組成“8”字型的器件,引線已在內部連接完成,只需引出它們的各個筆劃,公共電極。下面我們來了解一下按鍵控制數碼管
    發表于 01-16 16:19 ?1.7w次閱讀
    fpga<b class='flag-5'>按鍵控制</b>數碼管<b class='flag-5'>顯示</b>

    利用FPGA DIY開發板實現按鍵控制LED的顯示

    asean的 FPGA DIY 按鍵控制LED顯示的視頻
    的頭像 發表于 06-20 14:06 ?7130次閱讀
    利用FPGA DIY開發板<b class='flag-5'>實現</b><b class='flag-5'>按鍵控制</b>LED的<b class='flag-5'>顯示</b>

    FPGA DIY 按鍵控制數碼管顯示

    asean的 FPGA DIY 按鍵控制數碼管顯示的視頻
    的頭像 發表于 06-20 00:37 ?7819次閱讀

    FPGA入門系列實驗教程之按鍵控制LED亮滅的詳細資料說明

    實現按鍵控制LED亮滅。通過這個實驗,掌握采用Verilog HDL語言編程實現按鍵控制LED亮滅方法。
    發表于 06-11 16:50 ?31次下載
    FPGA入門系列實驗教程之<b class='flag-5'>按鍵控制</b>LED亮滅的詳細資料說明

    使用Arduino實現按鍵控制LED實驗的例程免費下載

    本文檔的主要內容詳細介紹的是使用Arduino實現按鍵控制LED實驗的例程免費下載。
    發表于 12-01 17:47 ?19次下載

    HT32F5232學習之四種方法實現按鍵控制LED燈

    HT32F5232學習之四種方法實現按鍵控制LED燈
    發表于 11-29 16:51 ?11次下載
    HT32F5232學習之四種<b class='flag-5'>方法</b><b class='flag-5'>實現</b><b class='flag-5'>按鍵控制</b>LED燈

    STM32實現按鍵控制繼電器

    學習目標: 通過上次學習的按鍵控制的知識,實現按鍵控制繼電器。 學習內容: 一、看接入的繼電器電路圖右上圖可知:接入的引腳為PB1/PB3 由繼電器特性可以知道,未有信號時,即PB1為低電平時,3
    發表于 04-26 09:35 ?10次下載
    STM32<b class='flag-5'>實現</b><b class='flag-5'>按鍵控制</b>繼電器
    主站蜘蛛池模板: 国产精品免费观看视频| 蜜桃99影院| 日日摸夜添夜夜夜添高潮| 曰本aaaaa毛片午夜网站| 国产福利高清在线视频| 蜜臀AV999无码精品国产| 亚洲精品色情婷婷在线播放| 爱人 qvod| 久久视热频国产这里只有精品23| 台湾果冻传媒在线观看| gogogo在线观看| 久久精品一卡二卡三卡四卡视频版| 午夜理论片日本中文在线| x8国产精品视频| 美女网站免费看| 亚洲人成电影网站色2017| 国产精品JIZZ在线观看A片| 老师给美女同学开嫩苞| 性色无码AV久久蜜臀| 成人区精品一区二区不卡AV免费| 免费亚洲视频| 在线欧美 精品 第1页| 果冻传媒在线播放| 无罩看奶禁18| 富婆大保健嗷嗷叫普通话对白| 欧美午夜不卡在线观看| 6080yy奇领电影在线看| 久久精品国产首叶| 亚洲日韩精品AV中文字幕| 国产美女久久久久久久久久久| 色欲国产麻豆一精品一AV一免费| my pico未删减在线观看| 免费中文字幕视频| 37大但人文艺术A级都市天气 | 国产精品人妻99一区二| 青青久久网| FREE另类老女人| 欧美午夜精品一区二区蜜桃| 97国产精品视频在线观看| 久久无码av三级| 伊人网综合网|