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

📄 01lcdclk.ms

📁 用SAM72N9写的电子秤文档
💻 MS
📖 第 1 页 / 共 5 页
字号:
.stabn 1537, LineInfo
	RST	F,0b0011
;	LD	A,0	
;	LD	xp,a		; reset XP
;	LD	YP,A

.stabn 1542, LineInfo
	LD	A,0x0f		; define SP
.stabn 1543, LineInfo
	LD	B,0x04
.stabn 1544, LineInfo
	LD	SPL,A
.stabn 1545, LineInfo
	LD	SPH,B
;
.stabn 1547, LineInfo
	NOP5
.stabn 1548, LineInfo
	NOP5
	
;	ld	a,02h
;	ld	xp,a
;	ld	yp,a
;
; Cold start from here
;
.stabn 1556, LineInfo
	call	LCDClr
;	LD	x,90h
;LCDClr0:
;	ldpx	mx,0
;	cp	xh,0bh		; LCD ram from 90 to AFH
;	jp	nz, LCDClr0

;		
; Check the warm start words if necessary
; 
; 
; clr RAM for Cold start here
.stabn 1568, LineInfo
	ld	x,0
RAMClr:
.stabn 1570, LineInfo
	ldpx	mx,0
.stabn 1571, LineInfo
	cp	xh,5
.stabn 1572, LineInfo
	jp	nz,RAMClr  
;
; set time to 12:00 after cold start
;
.stabn 1576, LineInfo
	ld	x,(0x14)
;	ldpx	mx,2		; hour=12, min/sec cleared by RAMCLr
;	ldpx	mx,1		; default 12:00 p.m.

.stabn 1580, LineInfo
	ldpx	mx,0
.stabn 1581, LineInfo
	ldpx	mx,0		; default 12:00 a.m.
;
; define I/O port
.stabn 1584, LineInfo
	LD	Y,(0x0FC)
.stabn 1585, LineInfo
	LD	MY,0b0000	; P-port  as input
;
.stabn 1587, LineInfo
	LD	Y,(0x0F3)
	; 03-11-22 14:04 HCY
;	LD	MY,0010b	; Power down, CLK_IN default high
.stabn 1590, LineInfo
	LD	MY,0b0000	; POWER DOWN ,CLK_IN LOW
 	
	
;
;
;
; enable interrupts if any
;
.stabn 1598, LineInfo
	LD	Y,(0x0E8)
.stabn 1599, LineInfo
	LD	MY,0b0000	; No key interrupt allowed, 
;
.stabn 1601, LineInfo
 	LD	Y,(0x0EB)
.stabn 1602, LineInfo
 	LD	MY,0b0000	; No timer interrupt allowed
;
.stabn 1604, LineInfo
	LD	Y,(0x0F9)	; reset timer
.stabn 1605, LineInfo
	LD	MY,0b0100
;
.stabn 1607, LineInfo
	ld	y,(0x1c)
.stabn 1608, LineInfo
	ld	my,0
.stabn 1609, LineInfo
	ld	y,(0x17)
.stabn 1610, LineInfo
	ld	my,0x04
;
.stabn 1612, LineInfo
	ld	y,(0x31)
;	ld	my,WEIGHTMODE		
.stabn 1614, LineInfo
	ld	my,(0)
	
.stabn 1616, LineInfo
	ld	x,(0x30)
.stabn 1617, LineInfo
	ld	mx,0x0d			; total receive 13 nibble data
	
.stabn 1619, LineInfo
	LD	a,0
.stabn 1620, LineInfo
	ld	(M0),a		; 

.stabn 1622, LineInfo
	jp	ProgStart
	
	
;	; for test
;	ld	x,RxIcon0
;	ld	a,0fh
;	ld	mx,a
;	inc	x
;	ld	mx,a
;	inc	x
;	ld	mx,a
;	inc	x
;	ld	mx,a
;	call	DspIcons
;	
;	EI
;
; end of initialization
; c =1 if not press'on and off' or 'on and kg'
; c =0 if enter calibrate mode
;ChkCalibrateMode:
;	ld	x,KPort
 ;       fan	mx,IO_Key_On
  ;      jp	z,Calib0		; jmp if key_on is not pressed
;	
;	ld	B,Key_OnOff
;	fan	mx,IO_Key_Off
;	jp	nz,CalKey0		; br if Key_off is preseed
;;	
;	ld	b,Key_OnKg
;	ld	x,PPort
;	fan	mx,IO_Key_Kg
;	jp	z,Calib0		; br if Key_Kg is not preseed
;CalKey0:
;	call	LCDClr
;	call	TurnOnLCD
;	call	Dly125ms
;	ld	x,KPort
 ;       fan	mx,IO_Key_On
  ;      jp	nz,CalKey0		; jmp if key_on is hold
;	
;	LD	Y,RPort
;	; 03-11-22 14:04 HCY
;	LD	MY,0011b	; Power on, CLK_IN default high
;	call	Dly125ms
;	call	Dly125ms
;	
;	ld	x,ModeOpt
;	ld	mx,CALIBRATEMODE
;
;WaitSend0:	
;	ld	x,KPort
;	fan	mx,0100b		
;	jp	nz,WaitSend0	; BR IF D_CLK is high
;	
;	LD	KeyCode,B
;	call	SendCalKey
;	
;	; remark by hcy 03-11-26 10:22
;	; turn on all segment
;TurnOnLCD:	
;	LD	x,40h
;LCDClrf:
;	ldpx	mx,0fh
;	cp	xh,07h		; LCD ram from 90 to AFH
;	jp	nz, LCDClrf	
;	call	Dly250
;	call	LCDClr
;	rcf
;	ret
;Calib0:
;	scf
;	ret

;	
; 
; Interrupt handling routines
;------------------------------------------------------
; RTC interrupt routine, 0.5 seconds/intr
IntRTC:
;	Push	A
;	push	F
;	
;	pop	F
;	POP	A
;	EI			; because I is reset when jumping into ISR
.stabn 1708, LineInfo
	RET
;------------------------------------------------------	
; Key port interrupt routine
IntKPort:
;	PUSH	F
;	PUSH	A
;	PUSH	YL
;	PUSH    YH
;IntKPort0:	
;	ld	Y,KIntFactor
;	ld	a,my		; read and clear the IRQ
	
;	LD	Y,RPort
;	and	my,1101b	; Pull down CLK_IN to ready receive data
;	rcf
;	ld	Y,PPort
;	fan	my,1000b	; only remain P0.3
;	jp	z,IntK0			
;	scf
;IntK0:
;	ld	y,CommBufferL
;	rrc	my
;	ld	y,CommCount
;	rcf
;	sbc	my,1
;	jp	nz,IntK1
	
	
;	ld	y,AppFlags
;	or	my,Rx4BitFlag	; set the 'rx4bitflag'
;	
;	calz	ToDoubleBuffer
;	calz	ReloadCommVar

;IntK1:	
;	LD	Y,RPort
;	or	my,0010b	; Pull up CLK_IN to ready receive data
;	POP	YH
;	POP	YL
;	POP	A
;	POP	F
;	EI			; because I is reset when jumping into ISR
.stabn 1750, LineInfo
	RET
	
GetIcons:	
.stabn 1753, LineInfo
	rrc	a
.stabn 1754, LineInfo
	ld	(M7),a
.stabn 1755, LineInfo
	ld	a,0
.stabn 1756, LineInfo
	rlc	a
.stabn 1757, LineInfo
	ld	(M6),a	
.stabn 1758, LineInfo
	ret
	
;-------------------------------------
; Cate   : Communication
; By     : Kwan
; Func   : SendKey
; Desc   : Send the key code to Samsung
; I/P    : 
; O/P    :
; Destroy:
; Note   : 1. Wait for the D_Clk=low to place the 
;             data bit to D_Out
;	   2. Wait for the D_Clk = hi again
;	   3. Wait the D_Clk=low to place the data
;		to D_Out until all 4 bit send
;	   4. the sync nibble (0AH) will be sent
;		first and followed by the keycode
;	   5. syn-nibble (=A) will be sent first and 
;		followed by a 4 bit data --> total 8 bits
SendKey:
;	call	SendSynBit
.stabn 1779, LineInfo
	LD	A,0x0a
.stabn 1780, LineInfo
	CALL	Send4Bit
; Check the time out if neccessary

;	ld	x,RegKeyCode
;	ld	a,mx
.stabn 1785, LineInfo
	ld	a,(M3)
.stabn 1786, LineInfo
	CALL	Send4Bit
;
.stabn 1788, LineInfo
	ld	y,(0x0F3)		; set D_Out Hi after sending
;	or	my,0010b
.stabn 1790, LineInfo
	or	my,0b0011
; Check the time out if neccessary
.stabn 1792, LineInfo
	RET	
;-------------------------------------------------------	
; Key port and RTC interrupt happened at the same time
;
;=========================================================	
	

	.org	0x0200
ProgStart:
.stabn 1801, LineInfo
	ld	y,(0x31)
.stabn 1802, LineInfo
	fan	my,0b1111
.stabn 1803, LineInfo
	jp	nz,ProgStartLp	; jmp if not clock mode
.stabn 1804, LineInfo
	ld	y,(0x14)
.stabn 1805, LineInfo
	calz	DspHour
.stabn 1806, LineInfo
	ld	y,(0x12)
.stabn 1807, LineInfo
	calz	DspMinute
ProgStartLp:	
.stabn 1809, LineInfo
	ld	x,(0x0EF)
.stabn 1810, LineInfo
	ld	a,mx		; read and clear any interrupt request flags
.stabn 1811, LineInfo
	fan	a,0b0010		; chk 1/8 sec
.stabn 1812, LineInfo
	jp	z,ProgStartLp0
.stabn 1813, LineInfo
	ld	b,(M3)
.stabn 1814, LineInfo
	cp	b,(0b1101)
.stabn 1815, LineInfo
	jp	nz,ProgStartLp0
.stabn 1816, LineInfo
	inc	(M0)	; inc the keyhold time
	
ProgStartLp0:	
.stabn 1819, LineInfo
	fan 	a,0b0100			; chk 1/2 sec
.stabn 1820, LineInfo
	jp	nz,UpdateSecond

ProgStartComm:
.stabn 1823, LineInfo
	ld	x,(0x31)
.stabn 1824, LineInfo
	cp	mx,(0)
.stabn 1825, LineInfo
	jp	z,xProgStartComm	; no comm in clock mode


.stabn 1828, LineInfo
	LD	X,(0x16)
.stabn 1829, LineInfo
	FAN	MX,(4)
.stabn 1830, LineInfo
	JP	z,Comm_Rx
	
	; add these by hcy 03-11-22 10:32
;	ld	a,CommFlag
;	fan	a,1111b	
;	jp	nz,Comm_Rx		; jmp if receiving 
	; add these by hcy 03-11-19 10:50
.stabn 1837, LineInfo
	call	SendKeyData
	; remark 03-11-22 11:55
;	jp	ProgStartComm
	
;
; Send the data after receiving a command
; remark it by hcy 03-11-13 16:30 for test communication
; 	ld	x,KPort
 ;	fan	mx,0100b	; chk CLK pin
 ;	jp	nz,Comm_Rx	; clk hi-> data send from Samsung
 	
; 	LD	X,RPort
;	LD	MX,0001b	; D_out low

;	CALL	SendKey
 ;	LD	X,AppFlags
 ;	AND	MX,0fh-ReqToSendFlag	; clear the flag after sending

Comm_Rx:
; remark it by hcy 03-11-13 16:32 for test communication
; remark for new keyboard
;	ld	x,KPort
;	fan	mx,0100b	
	
.stabn 1861, LineInfo
	ld	x,(0x0F6)
.stabn 1862, LineInfo
	fan	mx,0b0001		
.stabn 1863, LineInfo
	jp	z,xProgStartComm	; BR IF low EDGE

;	ld	Y,KIntFactor
;	ld	a,my		; read nad clear the IRQ
;	fan	a,0100b		; chk K02 
;	jp	z,NewProg0
	
	; find a rising edge
	
;	ld	a,1
;	ld	CommFlag,a	; 1--> commflag when receiving 
	
.stabn 1875, LineInfo
	LD	Y,(0x0F3)
.stabn 1876, LineInfo
	and	my,0b0001	; Pull down CLK_IN to ready receive data
; remark by hcy for new keyboard

;	ld	Y,PPort
;	ld	a,my
;	rlc	a

; add hcy for new keyboard
.stabn 1884, LineInfo
	ld	Y,(0x0F6)
.stabn 1885, LineInfo
	ld	a,my
.stabn 1886, LineInfo
	rrc	a
.stabn 1887, LineInfo
	rrc	a		; p0.1 --> c

.stabn 1889, LineInfo
	ld	y,(0x1c)
.stabn 1890, LineInfo
	rrc	my		; load data in buffer

.stabn 1892, LineInfo
	LD	Y,(0x0F3)
;	or	my,0010b	; Pull up CLK_IN to ready receive data
.stabn 1894, LineInfo
	or	my,0b0011	; if '0010b' 0--> r00, 

.stabn 1896, LineInfo
	ld	y,(0x17)	; dec count
.stabn 1897, LineInfo
	ADD	my,0x0F		;
.stabn 1898, LineInfo
	jp	nz,ProgStartLp	; don't chk key until end of a nibble
	
.stabn 1900, LineInfo
	CALl	ToRecBuffer
.stabn 1901, LineInfo
	call	ReloadCommVar
.stabn 1902, LineInfo
	ld	x,(0x1d)
.stabn 1903, LineInfo
	add	mx,1		

.stabn 1905, LineInfo
	ld	x,(0x1d)
.stabn 1906, LineInfo
	cp	mx,1		
.stabn 1907, LineInfo
	jp	nz,Prog3	; jmp if not finish receiving start code
.stabn 1908, LineInfo
	call	IsEquStartCode
.stabn 1909, LineInfo
	jp	nc,xProgStartComm ; jmp if equ start code
	
	; add by hcy 03-11-25 17:36
.stabn 1912, LineInfo
	cp	my,0x0D
.stabn 1913, LineInfo
	jp	z,TurnOffPwr
	
	; error case 
.stabn 1916, LineInfo
	jp	CommE		; give up this communication
Prog3:
; remark by hcy 03-11-20 10:34
;	cp	mx,2
;	jp	nz,Prog4	; jmp if not or already finish receiving command
;	calz	IsRightCmd
;	jp	nc,xProgStartComm
	
	; error case
;	jp	CommE		; give up this communication
Prog4:		
;	jp	c,xProgStartComm	; jmp if not finish receiving command
.stabn 1928, LineInfo
	ld	x,(0x30)
.stabn 1929, LineInfo
	add	mx,0x0f		; -1
.stabn 1930, LineInfo
	jp	nz,xProgStartComm	; jmp if not receive all data
; completely received a command
.stabn 1932, LineInfo
	ld	x,(0x30)
.stabn 1933, LineInfo
	ld	mx,0x0d			; total receive 13 nibble data

.stabn 1935, LineInfo
	LD	X,(0x16)
.stabn 1936, LineInfo
	FAN	MX,(4)
.stabn 1937, LineInfo
	JP	z,Prog5		; br if no send request

Comm_Tx:
.stabn 1940, LineInfo
	call	SendKeyData
;       
Prog5:	
.stabn 1943, LineInfo
	calz	DspWeight
.stabn 1944, LineInfo
	call	DspIcons
.stabn 1945, LineInfo
	calz	DspFraction

CommE:
.stabn 1948, LineInfo
	ld	x,(0x1d)
.stabn 1949, LineInfo
	ld	mx,0
;	JP	xProgStartComm
;----------------------------------------
xProgStartComm:
;
; here for checking the keyboard
;
	; add by hcy disable enter calbrate mode from weighting mdoe
	
.stabn 1958, LineInfo
	ld	x,(0x31)
.stabn 1959, LineInfo
	cp	mx,(0)
.stabn 1960, LineInfo
	jp	nz,NewCalM0	; jmp if not clock mode
	; add by hcy 03-12-4 11:02 for calibrate mode
.stabn 1962, LineInfo
	call	ChkCalibrateMode
.stabn 1963, LineInfo
	jp	nc,ProgStart	; jmp if enter calibrate mode
	
NewCalM0:	
.stabn 1966, LineInfo
	CALl	KeyScan
.stabn 1967, LineInfo
	LD	X,(1)
.stabn 1968, LineInfo
	FAN	MX,(2)
.stabn 1969, LineInfo
	jp	z,ProgStartLp		; br if no key pressed before
;
.stabn 1971, LineInfo
	JP	Main_KeyHandle		; br if key press-hold and release
;
; Flash the colon per 0.5 second
;
UpdateSecond:
	; add by hcy 03-12-4 14:19
.stabn 1977, LineInfo
	ld	a,(M9)
.stabn 1978, LineInfo
	fan	a,0b1111
.stabn 1979, LineInfo
	jp	z,UpdateS0
.stabn 1980, LineInfo
	dec	(M9)
UpdateS0:
.stabn 1982, LineInfo
	call	ToggleHalfSecFlag

.stabn 1984, LineInfo
	calz	FlashColon
	
.stabn 1986, LineInfo
	ld	x,(0x16)
.stabn 1987, LineInfo
	fan	mx,(2)
.stabn 1988, LineInfo
	jp	z,ProgStartComm		; br if just 0.5 sec
;	
.stabn 1990, LineInfo
	and	mx,0x0f-(2)	; clear the bit
; update the clock per 1 min
;	
.stabn 1993, LineInfo
	calz	IncSecond
.stabn 1994, LineInfo
	jp	nc,ProgStartComm		; No display update if change in second only
.stabn 1995, LineInfo
	calz	IncMinute
;	jp	nc,xUpdateClk
.stabn 1997, LineInfo
	jp	nc,ProgStart
.stabn 1998, LineInfo
	calz	IncHour
xUpdateClk:
;
; depends on which mode to show the time
;
	; remark by hcy 03-11-20 19:41
.stabn 2004, LineInfo
	jp	ProgStart
	; add by hcy 03-11-20 19:41
;	jp	ProgStartLp

;-------------------------------------
; Cate   : Delay
; By     : Hcy
; Func   : delay 20 ms
; Desc   : Dly20ms
; I/P    : 32*17*0.03125 = 17ms
; O/P    : --
; Destroy: y
; Note   :
;Dly17ms:
;	ld	y,0
;Dlym1:
;	inc	y
;	cp	yh,02h
;	jp	nz,Dlym1
;	ret

;SetTmr1s:
;	ld	x,RegKeyFlags
;	or	mx,DisFlashFlag		; disable flash 
;	ld	a,2
;	ld	Tmr1s,a
;	ret

ClrKeyVar:
.stabn 2033, LineInfo
	LD	a,0
.stabn 2034, LineInfo
	ld	(M3),a		; clr the key code
	
ClrKeyHoldTm:

⌨️ 快捷键说明

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