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

📄 lcd_clock.asm

📁 这是用东芝单片机作为时钟控制器的程序,分为时钟和显示两部分
💻 ASM
📖 第 1 页 / 共 2 页
字号:
			J					EQ,KEY_DOWN
KOP_EXIT:
			LD				(KEY_NAME),0
			RET
;---------------------------------------SET按键
KEY_SET:
			LD				A,(MENU);菜单数据到A
			J					NZ,KSET_N1;非0则进入下一个菜单
			SET				(MENU).H_SET;=0则进入小时设置
			J					KOP_EXIT
KSET_N1:
			SHLC			A
			LD				(MENU),A
			LD				CF,(MENU).3;菜单是否结束?
			J					CC,KOP_EXIT;没结束退出
			LD				(MENU),0
			J					KOP_EXIT
;---------------------------------------UP按键
KEY_ADD:
			CMP				(MENU),1
			J					EQ,KU_HSET
			CMP				(MENU),2
			J					EQ,KU_MSET
			CMP				(MENU),4
			J					EQ,KU_SSET
			J					KOP_EXIT
;-------------------------------小时设置状态下按UP键
KU_HSET:
			INC				(HOUR)
			CMP				(HOUR),24
			J					CS,KOP_EXIT
			LD				(HOUR),0
			J					KOP_EXIT
;-------------------------------分钟设置状态下按UP键
KU_MSET:
			INC				(MIN)
			CMP				(MIN),60
			J					CS,KOP_EXIT
			LD				(MIN),0
			J					KOP_EXIT
;-------------------------------秒钟设置状态下按UP键
KU_SSET:
			INC				(SEC)
			CMP				(SEC),60
			J					CS,KOP_EXIT
			LD				(SEC),0
			J					KOP_EXIT
;---------------------------------------DOWN按键
KEY_DOWN:
			CMP				(MENU),1
			J					EQ,KD_HSET
			CMP				(MENU),2
			J					EQ,KD_MSET
			CMP				(MENU),4
			J					EQ,KD_SSET
			J					KOP_EXIT
;-------------------------------小时设置状态下按DOWN键
KD_HSET:
			DEC				(HOUR)
			CMP				(HOUR),255
			J					NE,KOP_EXIT
			LD				(HOUR),23
			J					KOP_EXIT
;-------------------------------分钟设置状态下按DOWN键
KD_MSET:
			DEC				(MIN)
			CMP				(MIN),255
			J					NE,KOP_EXIT
			LD				(MIN),59
			J					KOP_EXIT
;-------------------------------秒钟设置状态下按DOWN键
KD_SSET:
			DEC				(SEC)
			CMP				(SEC),255
			J					NE,KOP_EXIT
			LD				(SEC),59
			J					KOP_EXIT
;===========================================================
			
			
			
				
;===========================================================
;名    称:LCD驱动程序(基于HT1621)
;说    明:控制HT1621驱动LCD段码液晶
;入口参数:HOUR、MIN、SEC
;出口参数:-
;程序入口:LCD_DISP
;占用资源:
;涉及模块:
;===========================================================					
LCD_DISP:
			LD				HL,LCD_DAT0102
LCD_DCLR:
			LD				(HL),0X00
			INC				HL
			CMP				HL,0X4D
			J					NE,LCD_DCLR;LCD数据清零
;-------------------------------------小时显示,LDAT2021/1819
			LD				CF,(MENU).H_SET;在设置状态闪烁
			J					CC,HOUR_DIS
			LD				CF,(DIS_FLAG).FLASH
			J					CC,MIN_DTEST
HOUR_DIS:
			LD				A,(HOUR)
			LD				(LBIT),A;24小时制
			CALL			HEX2BCD
			LD				C,(HBIT)
			LD				HL,DIS_TABLCD
			LD				A,(HL+C);查表得出显示码
			LD				(LCD_DAT2021),A
			LD				C,(LBIT)
			LD				HL,DIS_TABLCD
			LD				A,(HL+C)
			LD				(LCD_DAT1819),A
;---------------------------------------分显示
MIN_DTEST:
			LD				CF,(MENU).M_SET;在设置状态闪烁
			J					CC,MIN_DIS
			LD				CF,(DIS_FLAG).FLASH
			J					CC,SEC_DTEST
MIN_DIS:
			LD				A,(MIN)
			LD				(LBIT),A
			CALL			HEX2BCD
			LD				C,(HBIT)
			LD				HL,DIS_TABLCD
			LD				A,(HL+C);查表得出显示码
			LD				(LCD_DAT1415),A
			LD				C,(LBIT)
			LD				HL,DIS_TABLCD1
			LD				A,(HL+C)
			LD				(LCD_DAT0506),A
;----------------------------------------秒显示
SEC_DTEST:
			LD				CF,(MENU).S_SET;在设置状态闪烁
			J					CC,SEC_DIS
			LD				CF,(DIS_FLAG).FLASH
			J					CC,F_DISP
SEC_DIS:
			LD				A,(SEC)
			LD				(LBIT),A
			CALL			HEX2BCD
			LD				C,(HBIT)
			LD				HL,DIS_TABLCD1
			LD				A,(HL+C);查表得出显示码
			LD				(LCD_DAT0910),A
			LD				C,(LBIT)
			LD				HL,DIS_TABLCD1
			LD				A,(HL+C)
			LD				(LCD_DAT1112),A
;----------------------------------------闪烁显示
F_DISP:
			LD				CF,(DIS_FLAG).FLASH
			J					CC,DIS_IN
			LD				(LCD_DAT1617),0X04
			LD				(LCD_DAT0708),0X40
;---------------------------------------写入命令码
DIS_IN:
			CALL			DIS_START
			LD				B,0XA0;B作为显示缓存器
			LD				(LCD_BCNT),0X09
			CLR				(P1).LCD_CS
			CLR				CF
			CALL			DIS_NOW
;****************************************字段显示
;-----------------------------------------COM
;----------------------------------------pin12
;			LD				B,(LCD_DAT0102);装入显示数据
;			LD				(LCD_BCNT),0X08;显示位数
;			CALL			DIS_NOW
;----------------------------------------pin34
;			LD				B,(LCD_DAT0304);装入显示数据
;			LD				(LCD_BCNT),0X08;显示位数
;			CALL			DIS_NOW
;----------------------------------------pin56
			LD				B,(LCD_DAT0506);装入显示数据
			LD				(LCD_BCNT),0X08;显示位数
			CALL			DIS_NOW
;----------------------------------------pin78
			LD				B,(LCD_DAT0708);装入显示数据
			LD				(LCD_BCNT),0X08;显示位数
			CALL			DIS_NOW
;----------------------------------------pin0910
			LD				B,(LCD_DAT0910);装入显示数据
			LD				(LCD_BCNT),0X08;显示位数
			CALL			DIS_NOW
;----------------------------------------pin1112
			LD				B,(LCD_DAT1112);装入显示数据
			LD				(LCD_BCNT),0X08;显示位数
			CALL			DIS_NOW
;----------------------------------------pin13
			LD				B,(LCD_DAT13);装入显示数据
			LD				(LCD_BCNT),0X04;显示位数
			CALL			DIS_NOW
;----------------------------------------pin1415
			LD				B,(LCD_DAT1415);装入显示数据
			LD				(LCD_BCNT),0X08;显示位数
			CALL			DIS_NOW
;----------------------------------------pin1617
			LD				B,(LCD_DAT1617);装入显示数据
			LD				(LCD_BCNT),0X08;显示位数
			CALL			DIS_NOW
;----------------------------------------pin1819
			LD				B,(LCD_DAT1819);装入显示数据
			LD				(LCD_BCNT),0X08;显示位数
			CALL			DIS_NOW
;----------------------------------------pin2021
			LD				B,(LCD_DAT2021);装入显示数据
			LD				(LCD_BCNT),0X08;显示位数
			CALL			DIS_NOW
;----------------------------------------pin2223
			LD				B,(LCD_DAT2223);装入显示数据
			LD				(LCD_BCNT),0X08;显示位数
			CALL			DIS_NOW
;----------------------------------------pin24
			LD				B,(LCD_DAT24);装入显示数据
			LD				(LCD_BCNT),0X08;显示位数
			CALL			DIS_NOW
;-----------------------------------------------
			CALL			DIS_KEEP
			;CALL			DIS_OFF
			RET
;==========================================================


;===============================================显示硬件驱动
DIS_NOW:
			CLR				(P1).LCD_CLK
			ROLC			B
			J					CC,DAT_0
			SET				(P3).LCD_DAT
			J					WRITE_NOW
DAT_0:
			CLR				(P3).LCD_DAT
WRITE_NOW:
			NOP
			NOP
			SET				(P1).LCD_CLK
			DEC				(LCD_BCNT)
			J					NZ,DIS_NOW
			RET
;=================================================显示初始化
DIS_START:
			SET				(P1).LCD_CS
			LD				B,0X80;开始设置模式
			NOP
			CLR				(P1).LCD_CS
			LD				(LCD_BCNT),0X03
			CALL			DIS_NOW
			LD				B,0X01;SYS ON
			LD				(LCD_BCNT),0X09
			CALL			DIS_NOW
			LD				B,0X18;系统时钟源,片内RC振荡器
			LD				(LCD_BCNT),0X09
			CALL			DIS_NOW
			LD				B,0X29;BASE1/3 4COM
			LD				(LCD_BCNT),0X09
			CALL			DIS_NOW
			LD				B,0X03;打开LCD偏压发生器LCD ON
			LD				(LCD_BCNT),0X09
			CALL			DIS_NOW
			SET				(P1).LCD_CS
			RET
;===================================================关闭显示
DIS_OFF:
			SET				(P1).LCD_CS
			LD				B,0X80;开始设置模式
			NOP
			CLR				(P1).LCD_CS
			LD				(LCD_BCNT),0X03
			CALL			DIS_NOW
			LD				B,0X02
			LD				(LCD_BCNT),0X09
			CALL			DIS_NOW
			SET				(P1).LCD_CS
			RET
;===========================================================


;===========================================================
HEX2BCD:
			LD				(HBIT),0X00
			LD				A,(LBIT)
BIN1:
			CMP				A,0X0A
			J					CS,OVER
			SUB				A,0X0A
;			J					CS,OVER
			INC				(HBIT)
			J					BIN1
OVER:
;			ADD				A,0X0A
			LD				(LBIT),A
			RET
;===========================================================
DIS_KEEP:
			LD				IX,0X4E20;20000
DEC_IX:
			DEC				IX
			J					NZ,DEC_IX
			RET
;===========================================================
DIS_TABLCD:
			DB				0y11111010;0
			DB				0y01100000;1
			DB				0y10111100;2			
			DB				0y11110100;3
			DB				0y01100110;4
			DB				0y11010110;5
			DB				0y11011110;6
			DB				0y01110000;7
			DB				0y11111110;8
			DB				0y11110110;9
DIS_TABLCD1:
			DB				0XAF;0
			DB				0X06;1
			DB				0XCB;2			
			DB				0X4F;3
			DB				0X66;4
			DB				0X6D;5
			DB				0XED;6
			DB				0X07;7
			DB				0XEF;8
			DB				0X6F;9
			end
			end

⌨️ 快捷键说明

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