⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4.asm

📁 windows32 汇编 8255数码管实验
💻 ASM
字号:
.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include 4.inc

.code

start:

	invoke GetModuleHandle,NULL
	mov		hInstance,eax

    invoke InitCommonControls
	invoke DialogBoxParam,hInstance,IDD_DIALOG,NULL,addr DlgProc,NULL
	invoke ExitProcess,0

;########################################################################

GetBcdNum proc
	mov ecx, 4
	.while ecx
		dec ecx
		mov al, szBuffer[ecx]
		and al, 0fh
		lea ebx, ledTable
		xlat
		mov displayTable[ecx], al
	.endw
	ret
GetBcdNum endp

ledDisplay proc
	mov al, 80h
	mov dx, BasePort
	add dx, PortCN
	out dx, al
	mov displayNum, 1
	.while displayNum
		mov index, 0
		mov saveAl, 0f7h		
		.while index < 4
			mov al, index
			lea ebx, displayTable
			xlat
			mov dx, BasePort
			add dx, PortA
			out dx, al
			mov al, saveAl
			ror saveAl, 1
			mov dx, BasePort
			add dx, PortB
			out dx, al
			invoke Sleep, 1
			inc index
		.endw
		dec displayNum
	.endw
	mov al, 0ffh
	mov dx, BasePort
	add dx, PortB
	out dx, al
	ret
ledDisplay endp

displayThread proc
	.while Thread_Exe
		xor eax, eax
		mov ax, displayData
		invoke wsprintf, addr szBuffer, addr szFormat, eax
		invoke SetDlgItemText, hDlg, IDC_EDT, addr szBuffer 
		invoke GetBcdNum
		invoke ledDisplay
		inc displayData
		.if displayData == 10000
			mov displayData, 0
		.endif
	.endw
	ret
displayThread endp

DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

	mov		eax,uMsg
	.if eax == WM_INITDIALOG
		invoke GetDlgItem, hWin, IDC_START
		invoke EnableWindow, eax, TRUE
		invoke GetDlgItem, hWin, IDC_STOP
		invoke EnableWindow, eax, FALSE
		mov eax, hWin
		mov hDlg, eax
	.elseif eax == WM_COMMAND
		mov eax, wParam
		.if ax == IDC_START
			invoke GetDlgItem, hWin, IDC_START
			invoke EnableWindow, eax, FALSE
			invoke GetDlgItem, hWin, IDC_STOP
			invoke EnableWindow, eax, TRUE
			mov displayData, 0
			mov Thread_Exe, 01h			
			invoke CreateThread, NULL, 0, addr displayThread, NULL, NULL, addr ThreadID
			.if eax
				mov hThread, eax
				invoke CloseHandle, eax
			.endif
		.elseif ax == IDC_STOP
			invoke GetDlgItem, hWin, IDC_START
			invoke EnableWindow, eax, TRUE
			invoke GetDlgItem, hWin, IDC_STOP
			invoke EnableWindow, eax, FALSE
			mov Thread_Exe, 00h
			invoke SetDlgItemText, hWin, IDC_EDT, NULL 
		.endif
	.elseif eax==WM_CLOSE
		invoke EndDialog,hWin,0
	.else
		mov		eax,FALSE
		ret
	.endif
	mov		eax,TRUE
	ret

DlgProc endp

end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -