亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? key.asm

?? 凌陽61單片機實現的多功能電子琴源程序代碼
?? ASM
字號:
//======================================================
//  The information contained herein is the exclusive property of
//  Sunnnorth Technology Co. And shall not be distributed, reproduced,
//  or disclosed in whole in part without prior written permission.
//             (C) COPYRIGHT 2003  SUNNORTH TECHNOLOGY CO.
//                          ALL RIGHTS RESERVED
//  The entire notice above must be reproduced on all authorized copies.
//========================================================

//============================================================
// 文件名稱:Key.asm
// 實現功能:4*4按鍵掃描程序,使用IRQ6_TMB2中斷(128Hz)
// 日期:    2005/6/18
//============================================================

//================================================
//	按鍵去抖動時間設定,單位為1/128秒
//================================================
.DEFINE Key_Debounce	4			//(4/128)秒=31ms
//================================================
//	持續按鍵時間間隔設定,單位1/128秒
//================================================
.DEFINE Key_TimeOut		64			//(64/128)秒=0.5s

//================================================
//	按鍵使用端口設定
//================================================
.DEFINE Key_IO_Port			0		// 若按鍵使用IOA口則采用該行定義
//.DEFINE Key_IO_Port			1		// 若按鍵使用IOB口則采用該行定義

.DEFINE Key_IO_HighByte		0		// 若按鍵使用IO口低8位則采用該行定義
//.DEFINE Key_IO_HighByte		1		// 若按鍵使用IO口高8位則采用該行定義

/////-----       不必修改下面的定義	    -----/////
.IF Key_IO_HighByte==0
	.DEFINE Key_ALL			0x00ff		
	.define Key_NibbleL		0x000f
	.define Key_NibbleH		0x00f0
.ELSE
	.DEFINE Key_ALL			0xff00
	.define Key_NibbleL		0x0f00
	.define Key_NibbleH		0xf000
.ENDIF
/////-----       不必修改下面的定義	    -----/////
.IF Key_IO_Port==0
	.DEFINE P_Key_Data		0x7000
	.DEFINE P_Key_Buf		0x7001
	.DEFINE P_Key_Dir		0x7002
	.DEFINE P_Key_Attrib	0x7003
.ELSE
	.DEFINE P_Key_Data		0x7005
	.DEFINE P_Key_Buf		0x7006
	.DEFINE P_Key_Dir		0x7007
	.DEFINE P_Key_Attrib	0x7008
.ENDIF


.DEFINE P_INT_Mask			0x702d
.DEFINE P_TimeBase_Setup	0x700e
.DEFINE C_IRQ6_TMB2			0x0001
.DEFINE C_TMB2_128Hz		0x0000

.PUBLIC F_Key_Init
.PUBLIC _Key_Init
.PUBLIC F_Key_Scan
.PUBLIC _Key_Scan
.PUBLIC F_Key_Get
.PUBLIC _Key_Get

.RAM
.VAR KeyCode						// 存儲獲得的鍵值
.VAR ScanCnt						// 該變量用來表示按鍵持續時間
.VAR KeyUp							// 按鍵是否處于抬起狀態

.CODE
//======================================================
// 函數名稱:	Key_Init
// C調用:		void Key_Init(void)
// 匯編調用:	F_Key_Init
// 實現功能:   初始化按鍵掃描程序,該函數將開啟IRQ6_TMB2中斷
// 入口參數:	無
// 出口參數:	無
// 破壞寄存器:	無
//======================================================
F_Key_Init:
_Key_Init:
	push r1 to [sp]
	INT Off
	r1 = [P_Key_Dir]				// 初始化IO, 低4位下拉輸入,高4位輸出高
	r1 |= Key_NibbleH
	r1 &= ~Key_NibbleL
	[P_Key_Dir] = r1
	r1 = [P_Key_Attrib]
	r1 |= Key_NibbleH
	r1 &= ~Key_NibbleL
	[P_Key_Attrib] = r1
	r1 = [P_Key_Buf]
	r1 |= Key_NibbleH
	r1 &= ~Key_NibbleL
	[P_Key_Data] = r1
	
	r1 = 0
	[ScanCnt] = r1					// 初始化變量
	[KeyCode] = r1
	[KeyUp] = r1
	r1 = C_TMB2_128Hz				// 開啟IRQ6_TMB2(128Hz)中斷
	[P_TimeBase_Setup] = r1
	r1 = [P_INT_Mask]
	r1 |= C_IRQ6_TMB2
	[P_INT_Mask] = r1
	INT FIQ,IRQ
	pop r1 from [sp]
retf

//======================================================
// 函數名稱:	Key_Scan
// C調用:		void Key_Scan(void)
// 匯編調用:	F_Key_Scan
// 實現功能:   按鍵掃描,該函數被IRQ6_TMB2中斷服務程序調用
// 入口參數:	無
// 出口參數:	無
// 破壞寄存器:	無
//======================================================
F_Key_Scan:
_Key_Scan:
	push r1,r4 to [sp]
	r2 = [P_Key_Data]				// 獲取IO端口狀態
	r2 &= Key_NibbleL
	jnz ?L_ScanKey_Down				// 判斷當前是否有鍵按下
?L_ScanKey_Up:
	r1 = 1							// 如果按鍵處于抬起狀態則KeyUp置1
	[KeyUp] = r1
	goto ?L_ScanKey_Exit
?L_ScanKey_Down:
	r1 = 0							// KeyUp置0
	[KeyUp] = r1
	r4 = [P_Key_Buf]

	r3 = Key_NibbleH & 0x1010
	r1 = r4 & ~Key_NibbleH			// 掃描第1列(將第1列IO輸出置高,檢測輸入口狀態是否變化)
	r1 |= r3
	[P_Key_Data] = r1
	r1 = [P_Key_Data]
	r1 &= Key_NibbleL
	jnz ?L_GetCode
	
	r3 = Key_NibbleH & 0x2020		// 掃描第2列
	r1 = r4 & ~Key_NibbleH
	r1 |= r3
	[P_Key_Data] = r1
	r1 = [P_Key_Data]
	r1 &= Key_NibbleL
	jnz ?L_GetCode

	r3 = Key_NibbleH & 0x4040		// 掃描第3列
	r1 = r4 & ~Key_NibbleH
	r1 |= r3
	[P_Key_Data] = r1
	r1 = [P_Key_Data]
	r1 &= Key_NibbleL
	jnz ?L_GetCode

	r3 = Key_NibbleH & 0x8080		// 掃描第4列
	r1 = r4 & ~Key_NibbleH
	r1 |= r3
	[P_Key_Data] = r1
	r1 = [P_Key_Data]
	r1 &= Key_NibbleL
	jnz ?L_GetCode
	jmp ?L_ScanKey_Up				// 如果未掃描到按鍵
?L_GetCode:
	r1 = [P_Key_Buf]				// 重新初始化IO
	r1 |= Key_NibbleH
	[P_Key_Data] = r1
	
	r2 |= r3
.if Key_IO_HighByte
	r2 = r2 lsr 4
	r2 = r2 lsr 4
.endif
	cmp r2,[KeyCode]				// 本次得到的鍵值與上次得到的鍵值比較
	je	?L_ScanKey_Cont
?L_ScanKey_New:						// 如果與上次鍵值不同則重置鍵值
	[KeyCode] = r2
	r1 = 1							// 重新記錄鍵持續按下的時間
	[ScanCnt] = r1
	jmp ?L_ScanKey_Exit
?L_ScanKey_Cont:					// 如果此次鍵值與上次鍵值相同
	r1 = [ScanCnt]					// 更新按鍵持續時間(ScanCnt加1)
	r1 += 1
	[ScanCnt] = r1
?L_ScanKey_Exit:
	pop r1,r4 from [sp]
retf

//======================================================
// 函數名稱:	Key_Get
// C調用:		unsigned Key_Get(void)
// 匯編調用:	F_Key_Get
// 實現功能:   獲取鍵值
// 入口參數:	無
// 出口參數:	r1 - 獲得的鍵值
// 破壞寄存器:	r1
//======================================================
F_Key_Get:
_Key_Get:
	INT OFF
	push r2 to [sp]

	r2 = [ScanCnt]
	cmp r2,Key_Debounce				// 如果按鍵持續時間小于Key_Debounce
	jb	?L_GetKey_NoKey				// 則認為當前沒有鍵按下
	cmp r2,Key_TimeOut				// 如果按鍵持續時間大于Key_TimeOut
	jnb ?L_GetKey					// 則認為發生了一次按鍵
	r2 = [KeyUp]					// 如果按鍵持續時間在Key_Debounce與Key_TimeOut之間
	jnz ?L_GetKey					// 如果按鍵處于抬起狀態則認為發生了一次按鍵
?L_GetKey_NoKey:
	r1 = 0							// 沒有按鍵則返回0
	jmp ?L_GetKey_Exit
?L_GetKey:
	r1 = [KeyCode]					// 有按鍵則返回鍵值
	r2 = 0
	[KeyCode] = r2					// 重新初始化變量
	[ScanCnt] = r2
	[KeyUp] = r2
?L_GetKey_Exit:
	INT FIQ,IRQ
	pop r2 from [sp]
retf

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久在线观看免费| 日本免费在线视频不卡一不卡二| 亚洲国产一区二区视频| 九九久久精品视频| 精品视频在线视频| 亚洲人吸女人奶水| 国产成人在线电影| 日韩午夜激情视频| 视频一区免费在线观看| 日本精品一区二区三区高清| 国产精品免费看片| 国产精品自在欧美一区| 色偷偷88欧美精品久久久| 在线播放亚洲一区| 亚洲综合成人网| 一道本成人在线| 亚洲视频电影在线| 成人app网站| 中文字幕不卡三区| 国产成+人+日韩+欧美+亚洲| 日韩欧美国产一区二区在线播放| 亚洲一区二区在线视频| 一本一道久久a久久精品综合蜜臀| 国产色91在线| 国产成人综合网| 久久影院午夜片一区| 精品一区二区精品| www国产成人免费观看视频 深夜成人网 | 免费av网站大全久久| 欧美日韩精品一区二区三区蜜桃| 亚洲日本青草视频在线怡红院| 成人激情视频网站| 国产精品福利一区二区| 不卡一卡二卡三乱码免费网站| 国产欧美一区二区精品仙草咪| 1区2区3区精品视频| 激情丁香综合五月| 国产丝袜欧美中文另类| 成人三级伦理片| 国产精品久久久久永久免费观看 | 日韩视频一区在线观看| 日韩黄色在线观看| 日韩精品在线一区二区| 国产精品538一区二区在线| 国产性做久久久久久| 成人午夜视频免费看| 亚洲欧美韩国综合色| 欧美日韩一区二区三区免费看| 亚洲国产成人av| 精品国产三级a在线观看| 狠狠色丁香九九婷婷综合五月| 国产日韩影视精品| 91看片淫黄大片一级在线观看| 亚洲成人午夜影院| 精品国产一区二区在线观看| 国产精品一区二区视频| 椎名由奈av一区二区三区| 欧美日韩电影一区| 国产一区二区中文字幕| 中文字幕一区二区日韩精品绯色| 在线免费观看日本一区| 日本不卡视频在线| 国产精品久久久久影院老司| 欧美在线999| 国内外精品视频| 亚洲已满18点击进入久久| 精品日韩99亚洲| 色综合久久久久综合体| 精品无码三级在线观看视频| 一色桃子久久精品亚洲| 欧美丰满一区二区免费视频| 国产精品资源在线看| 夜色激情一区二区| 国产日韩影视精品| 91精品一区二区三区在线观看| 国产一区高清在线| 亚洲国产精品尤物yw在线观看| 亚洲精品一区二区精华| 欧美亚洲一区二区在线观看| 国产福利一区在线| 日韩精品五月天| 亚洲日本免费电影| 国产欧美视频一区二区三区| 欧美日韩精品免费观看视频| 国产·精品毛片| 麻豆91在线播放| 亚洲成人在线网站| 成人免费在线视频| 国产欧美一区二区精品仙草咪| 欧美二区三区91| 在线精品视频一区二区| 成人黄动漫网站免费app| 麻豆专区一区二区三区四区五区| 国产精品一二三区| 亚洲日穴在线视频| 日韩精品在线看片z| 91国产视频在线观看| 丁香婷婷综合网| 久久99国产精品麻豆| 午夜精品在线看| 日韩理论片在线| 国产精品久久久久久一区二区三区| 欧美成人三级在线| 91精品国产综合久久精品性色| 在线一区二区三区四区| 91香蕉视频在线| 成人午夜免费视频| 成人手机电影网| 国产成人精品亚洲日本在线桃色| 久久精品国产精品亚洲精品| 男人的天堂久久精品| 人人精品人人爱| 三级在线观看一区二区| 日本特黄久久久高潮| 日韩成人免费看| 免费的国产精品| 久草中文综合在线| 国产一区二区不卡在线| 国产精品99久久久久| 国产a区久久久| 99re这里只有精品视频首页| 91免费观看视频在线| 91久久一区二区| 欧美精品色综合| 欧美大片一区二区三区| 久久久五月婷婷| 国产精品麻豆视频| 综合激情成人伊人| 亚洲超碰97人人做人人爱| 免费成人美女在线观看| 国产剧情av麻豆香蕉精品| 丰满少妇久久久久久久| 99国产精品99久久久久久| 色婷婷久久久综合中文字幕| 在线亚洲+欧美+日本专区| 欧美日韩dvd在线观看| 欧美精品一区二区三区蜜桃| 国产日产亚洲精品系列| 亚洲免费色视频| 免费成人结看片| 成人看片黄a免费看在线| 色综合久久久久久久久| 欧美久久久久中文字幕| 久久综合久久综合久久综合| 国产拍揄自揄精品视频麻豆 | 在线观看不卡一区| 日韩一区二区三区高清免费看看| 国产色一区二区| 午夜精品久久久久久久蜜桃app| 美女在线视频一区| 97超碰欧美中文字幕| 欧美一卡二卡三卡四卡| 中文字幕免费一区| 日韩**一区毛片| 91社区在线播放| 欧美zozozo| 亚洲福中文字幕伊人影院| 国产高清不卡二三区| 69久久99精品久久久久婷婷| 国产色综合久久| 奇米影视一区二区三区小说| 91在线国产福利| 久久在线观看免费| 天天亚洲美女在线视频| 97久久精品人人做人人爽50路| 日韩免费视频线观看| 伊人夜夜躁av伊人久久| 国产高清在线精品| 日韩一区二区免费在线电影| 亚洲精品久久久久久国产精华液| 国产一区二区视频在线播放| 欧美美女bb生活片| 亚洲欧美一区二区视频| 国产精品一区二区三区网站| 欧美一区三区四区| 亚洲美女在线国产| 成人高清视频免费观看| 久久日韩粉嫩一区二区三区| 午夜精品在线看| 日本韩国精品在线| 国产精品福利影院| 国产精品一区二区在线播放| 欧美成人性战久久| 青草av.久久免费一区| 欧美日韩国产精品自在自线| 一区二区三区不卡视频| av亚洲精华国产精华精华| 国产清纯美女被跳蛋高潮一区二区久久w| 蜜桃视频在线一区| 欧美精品久久一区二区三区| 尤物视频一区二区| 色综合久久99| 亚洲精品久久久久久国产精华液| av不卡在线播放| 综合av第一页| 在线观看日韩高清av| 一区二区三区四区在线播放 | 日韩女同互慰一区二区| 人人狠狠综合久久亚洲| 欧美精品一级二级三级|