📄 sydzc.asm
字号:
LCDE BIT P2.2 ;LCD控制口(1602A)
LCDRW BIT P2.1
LCDRS BIT P2.0
AD_EOC BIT P2.3 ;ADC控制口
AD_CLK BIT P2.4
AD_IN BIT P2.5
AD_OUT BIT P2.6
AD_CS BIT P2.7
KEY_PORT EQU P1 ;键盘接口
LCD_PORT EQU P0 ;LCD数据口
KEY_FLAG BIT 20H.0 ;按键标志
KEY_DATA DATA 21H ;键值存放
AD_DATA DATA 22H ;
AD_DATAL DATA 39H
AD_CON DATA 3BH
;=====================================
DANJIA_ZS DATA 23H ;单价整数
DANJIA_XS DATA 24H ;单价小数
DANJIA_S DATA 25H ;单价十
DANJIA_Y DATA 26H ;单价元
DANJIA_J DATA 27H ;单价角
DANJIA_F DATA 28H ;单价分
SPHAO DATA 29H ;商品号
DANJIA0_ZS DATA 2AH ;商品1单价整数位
DANJIA0_XS DATA 2BH ;商品1单价小数位
DANJIA1_ZS DATA 2CH ;商品2单价整数位
DANJIA1_XS DATA 2DH ;商品2单价小数位
DANJIA2_ZS DATA 2EH ;商品3单价整数位
DANJIA2_XS DATA 2FH ;商品3单价小数位
;=========================================
DANJIAO0_S DATA 31H
DANJIAO0_Y DATA 32H
DANJIAO0_J DATA 33H
DANJIAO0_F DATA 34H
DANJIAO1_S DATA 35H
DANJIAO1_Y DATA 36H
DANJIAO1_J DATA 37H
DANJIAO1_F DATA 38H
DANJIAO2_S DATA 39H
DANJIAO2_Y DATA 3AH
DANJIAO2_J DATA 3BH
DANJIAO2_F DATA 3CH
AD_DATA1 DATA 3DH ;KG
AD_DATA2 DATA 3EH
AD_DATA3 DATA 3FH
;=========================================
ZHJIA_ZS DATA 40H ;商品总价整数位
ZHJIA_XS DATA 41H ;商品总价小数位
ZHJIA_B DATA 42H ;商品总价'百'
ZHJIA_S DATA 43H ;商品总价'十'
ZHJIA_Y DATA 44H ;商品总价'元'
ZHJIA_J DATA 45H ;商品总价'角'
ZHJIA_F DATA 46H ;商品总价'分'
;==========================================
LJ_ZS DATA 47H ;商品总价累计整数位
LJ_XS DATA 48H ;商品总价累计小数位
LJ_B DATA 49H ;商品累计价'百'
LJ_S DATA 4AH ;商品累计价'十'
LJ_Y DATA 4BH ;商品累计价'元'
LJ_J DATA 4CH ;商品累计价'角'
LJ_F DATA 4DH ;商品累计价'分'
;==========================================
LSL DATA 55H ;秒个位
LSH DATA 54H ;秒十位
LML DATA 53H ;分个位
LMH DATA 52H ;分十位
LHL DATA 51H ;时个位
LHH DATA 50H ;时十位
WEEK DATA 56H
TIM0 DATA 57H ;辅助计数器0
TIM1 DATA 58H ;辅助计数器1
;==========================================
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIME0
ORG 0030H
MAIN: MOV SP,#70H
MOV TMOD,#02H ;定时器初始化
MOV TH0,#164
MOV TL0,#164
MOV TIM0, #100
MOV TIM1, #100
SETB ET0
SETB EA ;开中断
ACALL SYSTEMINIT ;系统初使化
SETB TR0 ;启动定时器
ACALL LCDINIT ;液晶初使化
MAIN_LOOP1:
ACALL LCDDISP1
ACALL KEYSCAN ;键盘扫描选择商品类型,从而决定单价
JNB KEY_FLAG,MAIN_LOOP1
MOV A,KEY_DATA
XRL A,#15
JZ MAIN_LOOP3
MOV A,KEY_DATA
XRL A,#13
JZ MAIN_LOOP4
MOV A,KEY_DATA
XRL A,#14
JZ MAIN_LOOP5
ACALL KEY_JUST1 ;决定商品类型,确定单价
ACALL AD_TLC2543
MAIN_LOOP2:
ACALL DATA_CHULI1
ACALL DATA_CHULI2
ACALL DATA_CHULI3
ACALL LCDDISP2
ACALL DELAY5S
MOV A,#01H
ACALL WriteCommandLCD ;显示清屏
;--------总价处理---------
MOV R1,ZHJIA_ZS
MOV R2,ZHJIA_XS
MOV R3,LJ_ZS
MOV R4,LJ_XS
ACALL BCDA
MOV LJ_ZS,R6
MOV LJ_XS,R7
ACALL HB2
MOV A,R3
ACALL HBCD
MOV LJ_B,R7
MOV A,R4
ACALL HBCD
MOV LJ_S,R6
MOV LJ_Y,R7
MOV A,R5
ACALL HBCD
MOV LJ_J,R6
MOV LJ_F,R7
AJMP MAIN_LOOP1
MAIN_LOOP3:
ACALL LCDDISP3
ACALL DELAY5S
;MOV A,#01H
;ACALL WriteCommandLCD ;显示清屏
MOV LJ_ZS , #00H
MOV LJ_XS , #00H ;累加金额
AJMP MAIN_LOOP1
MAIN_LOOP5:
MOV SPHAO,#3EH
ACALL KEYSCAN
ACALL LCDDISP4
JNB KEY_FLAG,MAIN_LOOP5
ACALL KEY_JUST2 ;决定商品类型,确定单价
ACALL DATA_CHULI1
MOV R0,#25H
MOV R7,#4
DJXG_1: ACALL LCDDISP4
ACALL KEYSCAN
JNB KEY_FLAG,DJXG_1
MOV A,KEY_DATA
CJNE A,#0AH,DJXG_3
DJXG_3: JNC DJXG_1
MOV @R0,KEY_DATA
INC R0 ;地址加一
DJNZ R7,DJXG_1
ACALL LCDDISP4
ACALL DATA_CHULI4
DJXG_2:
ACALL KEYSCAN
JNB KEY_FLAG,DJXG_2
MOV A,KEY_DATA
CJNE A,#15,MAIN_LOOP5
AJMP MAIN_LOOP1
MAIN_LOOP4:
CLR EA ;关中断
MOV R0,#50H ;时间显存首地址
SJXGHH_1:
ACALL LCDDISP1
ACALL KEYSCAN
JNB KEY_FLAG,SJXGHH_1
CJNE A,#0AH, SJXGHH_3
SJXGHH_3:
JNC SJXGHH_1
CJNE A,#3, SJXGHH_4
SJXGHH_4:
JNC SJXGHH_1
MOV @R0,KEY_DATA
INC R0 ;地址加一
;---------------------------
SJXGHL_1:
ACALL LCDDISP1
ACALL KEYSCAN
JNB KEY_FLAG,SJXGHL_1
CJNE A,#0AH, SJXGHL_3
SJXGHL_3:
JNC SJXGHL_1
MOV A,LHH
CJNE A,#2, SJXGHL_4
MOV A,KEY_DATA
CJNE A,#4,SJXGHL_5
SJXGHL_5:
JNC SJXGHL_1
SJXGHL_4:
MOV @R0,KEY_DATA
INC R0 ;地址加一
ACALL LCDDISP1
;--------------------------------------------
SJXGMH_1:
ACALL LCDDISP1
ACALL KEYSCAN
JNB KEY_FLAG,SJXGMH_1
CJNE A,#0AH, SJXGMH_3
SJXGMH_3:
JNC SJXGMH_1
CJNE A,#6, SJXGMH_4
SJXGMH_4:
JNC SJXGMH_1
MOV @R0,KEY_DATA
INC R0
;---------------------------------------------
SJXGML_1:
ACALL LCDDISP1
ACALL KEYSCAN
JNB KEY_FLAG,SJXGML_1
CJNE A,#0AH, SJXGML_3
SJXGML_3:
JNC SJXGML_1
MOV @R0,KEY_DATA ;地址加一
ACALL LCDDISP1
INC R0
INC R0
INC R0
WEEKCH_1:
ACALL LCDDISP1
ACALL KEYSCAN
JNB KEY_FLAG,WEEKCH_1
CJNE A,#07H,WEEKCH_2
WEEKCH_2:
JNC WEEKCH_1
MOV @R0,KEY_DATA
ACALL LCDDISP1
SJXG_2:
ACALL KEYSCAN
JNB KEY_FLAG,SJXG_2
MOV A,KEY_DATA
CJNE A,#15,MAIN_LOOP4
SETB EA
AJMP MAIN_LOOP1
;======================系统初使化=======================
SYSTEMINIT:
MOV DANJIA0_ZS,#00H
MOV DANJIA0_XS,#96H ;规定商品一价格1.5元
MOV DANJIA1_ZS,#02H
MOV DANJIA1_XS,#0EEH ;规定商品二价格7.5元
MOV DANJIA2_ZS,#0DH
MOV DANJIA2_XS,#0DEH ;规定商品三价格35.50元
CLR A
MOV AD_DATA,A
MOV AD_DATAL,A
CLR 20H.0 ;判断有无键按下标志位
MOV DANJIA_ZS,A
MOV DANJIA_XS,A ;单价初使化
MOV ZHJIA_ZS, A
MOV ZHJIA_XS, A ;总价初使化为0
MOV DANJIA_S, A
MOV DANJIA_Y, A
MOV DANJIA_J, A
MOV DANJIA_F, A
MOV LJ_ZS , A
MOV LJ_XS , A ;累加金额
MOV LJ_B, A
MOV LJ_S, A
MOV LJ_Y, A
MOV LJ_J, A
MOV LJ_F, A
MOV AD_DATA, A ;AD转换所得数据
MOV KEY_DATA, A ;键盘扫描值
MOV AD_CON , A
;================
MOV LSL,#00H ;置显示初始值
MOV LSH,#05H
MOV LML,#09H
MOV LMH,#05H
MOV LHL,#03H
MOV LHH,#02H ;初始值00-00-00
MOV WEEK,#00H
;=====
ACALL AD_TLC2543
ACALL AD_TLC2543
RET
;=====================LCDINIT=============================
LCDINIT:ACALL D5MS ;----------------LCD INI
MOV A,#38H
ACALL WriteCommandLCD
ACALL D5MS
MOV A,#08H
ACALL WriteCommandLCD ;关闭显示
MOV A,#01H
ACALL WriteCommandLCD ;显示清屏
MOV A,#06H
ACALL WriteCommandLCD ;显示光标移动设置
MOV A,#0CH
ACALL WriteCommandLCD ;显示开及光标设置
RET
WriteDataLCD: ;-------------写数据
ACALL ReadStatusLCD
MOV LCD_PORT,A
SETB LCDRS
CLR LCDRW
CLR LCDE
SETB LCDE
RET
WriteCommandLCD: ;------------------写指令
ACALL ReadStatusLCD
MOV LCD_PORT,A
CLR LCDRS
CLR LCDRW
CLR LCDE
SETB LCDE
RET
ReadStatusLCD: ;---------------忙检测
PUSH ACC
MOV A,#0FFH
MOV LCD_PORT,A
CLR LCDRS
SETB LCDRW
CLR LCDE
SETB LCDE
WAIT_LCD:
MOV A,P0
JB ACC.7,WAIT_LCD
POP ACC
RET
D5MS: PUSH ACC ;-----------500us延时
MOV A,#0
DJNZ ACC,$
POP ACC
RET
;==========================LCDDISP========================
LCDDISP1:
MOV A,#80H ;设定从第一行(80H)的第5个位置开始显示
ACALL WriteCommandLCD
MOV A,#'A'
ACALL WriteDataLCD
MOV A,#' '
ACALL WriteDataLCD
MOV A,#'B'
ACALL WriteDataLCD
MOV A,#'e'
ACALL WriteDataLCD
MOV A,#'a'
ACALL WriteDataLCD
MOV A,#'u'
ACALL WriteDataLCD
MOV A,#'t'
ACALL WriteDataLCD
MOV A,#'i'
ACALL WriteDataLCD
MOV A,#'f'
ACALL WriteDataLCD
MOV A,#'u'
ACALL WriteDataLCD
MOV A,#'l'
ACALL WriteDataLCD
MOV A,#' '
ACALL WriteDataLCD
MOV A,#'D'
ACALL WriteDataLCD
MOV A,#'a'
ACALL WriteDataLCD
MOV A,#'y'
ACALL WriteDataLCD
MOV A,#'!'
ACALL WriteDataLCD
MOV A,#0C0H ;设定从第一行(80H)的第5个位置开始显示
ACALL WriteCommandLCD
MOV A,#' '
ACALL WriteDataLCD
MOV A,#' '
ACALL WriteDataLCD
MOV A,LHH
ADD A,#30H
ACALL WriteDataLCD
MOV A,LHL
ADD A,#30H
ACALL WriteDataLCD
MOV A,#'-'
ACALL WriteDataLCD
MOV A,LMH
ADD A,#30H
ACALL WriteDataLCD
MOV A,LML
ADD A,#30H
ACALL WriteDataLCD
MOV A,#'-'
ACALL WriteDataLCD
MOV A,LSH
ADD A,#30H
ACALL WriteDataLCD
MOV A,LSL
ADD A,#30H
ACALL WriteDataLCD
MOV A,#' '
ACALL WriteDataLCD
MOV R6,WEEK
MOV A,R6
MOV DPTR,#TABL1
MOVC A,@A+DPTR
ACALL WriteDataLCD
MOV A,R6
MOV DPTR,#TABL2
MOVC A,@A+DPTR
ACALL WriteDataLCD
MOV A,R6
MOV DPTR,#TABL3
MOVC A,@A+DPTR
ACALL WriteDataLCD
RET
LCDDISP2: ;--------------LCD显示子程序
MOV A,#01H
ACALL WriteCommandLCD ;显示清屏
MOV A,#80H ;设定从第一行(80H)的第5个位置开始显示
ACALL WriteCommandLCD
MOV A,#'S'
ACALL WriteDataLCD
MOV A,#'P'
ACALL WriteDataLCD
MOV A,SPHAO
ADD A,#30H
ACALL WriteDataLCD
MOV A,#20H ;空格
ACALL WriteDataLCD
MOV A,#'D'
ACALL WriteDataLCD
MOV A,#'J'
ACALL WriteDataLCD
MOV A,#3AH ;":"号
ACALL WriteDataLCD
MOV A,DANJIA_S
ADD A,#30H
ACALL WriteDataLCD
MOV A,DANJIA_Y
ADD A,#30H
ACALL WriteDataLCD
MOV A,#2EH ;"."号
ACALL WriteDataLCD
MOV A,DANJIA_J
ADD A,#30H
ACALL WriteDataLCD
MOV A,DANJIA_F
ADD A,#30H
ACALL WriteDataLCD
MOV A,#5CH
ACALL WriteDataLCD
MOV A,#2FH ;"/"号
ACALL WriteDataLCD
MOV A,#'K'
ACALL WriteDataLCD
MOV A,#'G'
ACALL WriteDataLCD
MOV A,#0C0H ;设定从第二行(C0H)的第0个位置开始显示
ACALL WriteCommandLCD
MOV A,#'Z'
ACALL WriteDataLCD
MOV A,#'J'
ACALL WriteDataLCD
MOV A,#3AH ;":"号
ACALL WriteDataLCD
MOV A,ZHJIA_B
ADD A,#30H
ACALL WriteDataLCD
MOV A,ZHJIA_S
ADD A,#30H
ACALL WriteDataLCD
MOV A,ZHJIA_Y
ADD A,#30H
ACALL WriteDataLCD
MOV A,#2EH ;.
ACALL WriteDataLCD
MOV A,ZHJIA_J
ADD A,#30H
ACALL WriteDataLCD
MOV A,ZHJIA_F
ADD A,#30H
ACALL WriteDataLCD
MOV A,#' ' ;空格
ACALL WriteDataLCD
MOV A,#'G'
ACALL WriteDataLCD
MOV A,#'='
ACALL WriteDataLCD
MOV A,AD_DATA1
ADD A,#30H
ACALL WriteDataLCD
MOV A,#2EH
ACALL WriteDataLCD
MOV A,AD_DATA2
ADD A,#30H
ACALL WriteDataLCD
MOV A,AD_DATA3
ADD A,#30H
ACALL WriteDataLCD
RET
LCDDISP3:
MOV A,#01H
ACALL WriteCommandLCD ;显示清屏
MOV A,#80H ;设定从第一行(80H)的第5个位置开始显示
ACALL WriteCommandLCD
MOV A,#'L'
ACALL WriteDataLCD
MOV A,#'J'
ACALL WriteDataLCD
MOV A,#':'
ACALL WriteDataLCD
MOV A,#0F6H
ACALL WriteDataLCD
MOV A,#'='
ACALL WriteDataLCD
MOV A,LJ_B
ADD A,#30H
ACALL WriteDataLCD
MOV A,LJ_S
ADD A,#30H
ACALL WriteDataLCD
MOV A,LJ_Y
ADD A,#30H
ACALL WriteDataLCD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -