基于单片机的电子秤程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

A_8255 EQU 7C00H

B_8255 EQU 7D00H

C_8255 EQU 7E00H

CON_8255 EQU 7F00H;8255端口定义

ADC_0808 EQU 8000H;ADC0809地址ZHONGLIANG EQU 15H;重量存放地址

DANJIA EQU 16H;单价存放地址

EOC EQU P3.3

W8 EQU 0FEH

W7 EQU 0FDH

W6 EQU 0FBH

W5 EQU 0F7H

W4 EQU 0EFH

W3 EQU 0DFH

W2 EQU 0BFH

W1 EQU 07FH;定义LED位码

;;;;;;;;;主程序;;;;;;;;;;

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP EINT0S

ORG 0100H

MAIN: MOV P1,#0F0H

SETB TCON.0; 外部中断为下降沿触发

MOV IE,#81H; 外部中断开中断

MOV DPTR,#CON_8255

MOV A,#80H;状态字

MOVX @DPTR,A;8255初始化

LOOP: PUSH DPH

PUSH DPL

PUSH ACC

MOV DPTR,#ADC_0808

MOV A,#00H

MOVX @DPTR,A;启动0808,A无实际意义

ADLP1:JNB EOC,ADLP1

ADLP2:JB EOC,ADLP2

MOVX A,@DPTR;读

MOV ZHONGLIANG,A

POP ACC

POP DPL

POP DPH

MOV A,ZHONGLIANG

LCALL XIANSHI1;调用显示程序

MOV A,DANJIA

LCALL XIANSHI2

MOV A,ZHONGLIANG

MOV B,DANJIA

MUL AB;算出总价

LCALL XIANSHI3;只显示低八位

SJMP LOOP

;;;;;;;;;;;;;;;键盘子程序;;;;;;;;;

EINT0S:

LCALL KEY ;调用键盘扫描程序

KEY: CLR EA ;中断总禁止

PUSH PSW ;PSW入栈

LCALL DELAY ;调用延时程序去抖动

LCALL KS ;调用检测按键子程序

JNZ SAOMIAO ;若有按键则跳转至扫描

LJMP INT0R

SAOMIAO:

ACALL K1 ;调用键盘扫描程序

INC A

MOVC A,@A+PC ;查表后将值送入累加器

MOV DANJIA,A ;在P0口显示键盘值

K1: ;键盘扫描子程序

MOV R2,#0EFH ;将扫描值送入R2暂存

MOV R4,#00H ;R4用于存放行值,并将00H暂存

K3: MOV P1,R2 ;将R2的值送入P1口

L6: JB P1.0,L1 ;P1.0等于1跳转到L1

MOV A,#00H ;将第一列的列值00H送入ACC

AJMP LK ;跳转到键值理程序进行键值处理L1: JB P1.1,L2

MOV A,#03H

AJMP LK

L2: JB P1.2,L3

MOV A,#06H

AJMP LK ;跳转到键值处理程序

L3: JB P1.3,NEXT

MOV A,#09H;

LK: ADD A,R4 ;行值和列值等于键值

PUSH ACC; ;A入栈

K4: LCALL DELAY ;调用延时程序,去抖动

LCALL KS

JNZ K4 ;按键没有松开继续返回检测

POP ACC ;A出栈

RET

NEXT:

INC R4 ;将行值加一

MOV A,R2;

JNB ACC.6,INT0R ;未扫描出键值退出中断

RL A ;扫描未完成将A中的值右移一位进行下一列的扫描

MOV R2,A ;将ACC的值送入R2暂存

AJMP K3 ;检测下一行

KS: ;按键检测程序

MOV P1,#0FH ;将P1口高四位置0低四位值1

MOV A,P1 ;读P1口

XRL A,#0FH ;将A中的值与0FH相异或

RET

DELAY:; 10ms延时去抖动子程序2*FA*2=10ms MOV R5,#02H

L7: MOV R6,#0FAH

L8: DJNZ R6,L8

DJNZ R5,L7

RET

INT0R: POP PSW

MOV P1,#0F0H

SETB T CON.0

MOV IE,#81H

RETI

;;;;;;;;;显示子程序1;;;;;;;;;

XIANSHI1: MOV B,#100

DIV AB

LCALL AA1;取段码

MOV DPTR,#B_8255 MOVX @DPTR,A;送段码

MOV DPTR,#A_8255

MOV A,#W8

MOVX @DPTR,A;送位码

LCALL DLY1

;十位数

MOV A,B

MOV B,#10

DIV AB

LCALL AA1;取段码

MOV DPTR,#B_8255 MOVX @DPTR,A;送段码

MOV DPTR,#A_8255

MOV A,#W7

MOVX @DPTR,A;送位码

LCALL DLY1

;个位

MOV A,B

LCALL AA1;取段码

MOV DPTR,#B_8255 MOVX @DPTR,A;送段码

MOV DPTR,#A_8255

MOV A,#W6

MOVX @DPTR,A;送位码

LCALL DLY1

RET

AA1: INC A

MOVC A,@A+PC

RET

DB 03FH,06H,05BH,04FH,66H,06DH DB 07DH,07H,07FH,06FH,77H,07CH DLY1: MOV R7,#18

D11: MOV R6,#210

DJNZ R6,$

DJNZ R7,D11

RET

;;;;;;;;;显示子程序2;;;;;;;;;

相关文档
最新文档