单片机电子秤设计软件程序清单信息工程毕
2013-05-26 01:12
导读:电子信息工程论文毕业论文,单片机电子秤设计软件程序清单信息工程毕论文样本,在线游览或下载,科教论文网海量论文供你参考:
程序清单
;定义 中文LCD液晶 128X64 的地址
W_C_GLCD
程序清单
;定义 中文LCD液晶 128X64 的地址
W_C_GLCD XDATA 0E000H
W_D_GLCD XDATA 0E001H
R_B_GLCD XDATA 0E002H
R_D_GLCD XDATA 0E003H
;-------------------------------------------------------
TIMER0 DATA 30H ;延时时间的初值
TIMER1 DATA 31H ;调用延时子程序的次数
DATA1 DATA 32H ;点阵显示的变量1
DATA2 DATA 33H ;点阵显示的变量2
X DATA 34H ;X方向的位置
Y DATA 35H ;Y方向的位置
COUNTER DATA 36H ;计数器
N DATA 37H ;行数变量
D1 DATA 38H ;点变量1
D2 DATA 39H ;点变量1
ADDR DATA 3AH ;起始的显示位置
ADDR1 DATA 3BH ;起始的显示位置临时变量
N1 DATA 3CH ;行数的临时变量
;*******************************************************
;* 主程序开始
;*******************************************************
ORG 0000H
(科教作文网 zw.nseac.com整理)
AJMP START
ORG 0030H
START: CLR P1.0
SETB P1.1
MOV SP,#60H
LCALL INITIAL_GLCD ; 调用LCD初始化
LCALL KAIJI ; 显示开机画面
LCALL DELAY500
LCALL DELAY500
LCALL DELAY500
LCALL TISHI ; 显示主界面
LCALL INI_8279
;------------------------------------------
;判断是否继续
;------------------------------------------
KEY_A: MOV DPTR,#8101H ; 8101H为8279命令
MOVX A,@DPTR ; 读状态字
ANL A,#07H ; 判断低三位是否为0
CJNE A,#00H,LP1 ; 不为0(有键按下)则跳转
SJMP KEY_A ; 为0(没键按下)则继续查询
大学排名
LP1: MOV DPTR,#8100H ; 8100H为8279数据口
MOVX A,@DPTR ; 读键值
CJNE A,#0DBH,KEY_A ; 判断是否按D键
AJMP K1
K1: LCALL YUZHI ; 阈值设定
LCALL celianjieguo ; 结果显示界面
LCALL CELIANGJIEGUO ; 结果显示
AJMP $
;*******************************************************
;* 主程序开始
;*******************************************************
;=======================================================
;各界面显示内容
;=======================================================
DHTABLE1: DB " 欢 迎 使 用 "
DHTABLE2: DB " 半桥电子秤 "
DHTABLE3: DB " 设计人: x x x "
(科教作文网http://zw.ΝsΕAc.Com编辑整理)
DHTABLE4: DB " 时间:xxxx "
DHTABLE5: DB "****************"
DHTABLE6: DB " 设置报警上限 "
DHTABLE7: DB " 确定 "
DHTABLE8: DB " 请按D 键 "
DHTABLE9: DB " "
DHTABLE10: DB " 报警上限重量: "
DHTABLE11: DB " . g "
DHTABLE12: DB " 确定(E) "
CELIANG1: DB " 电子秤 "
CELIANG2: DB " 重量是: "
CELIANG3: DB " . g "
CELIANG4:DB " 返回 (F) "
;=======================================================
;开机界面子程序
;=======================================================
KAIJI: MOV ADDR1,#00H ; 第一行显示
MOV N1,#08H ; 数量 8 个
MOV DPTR,#DHTABLE1 ; 需要显示的汉字位置
CALL DHZ ; 调用汉字子序
MOV ADDR1,#10H ; 第二行显示
(科教范文网http://fw.ΝsΕΑc.com编辑)
MOV N1,#08H
MOV DPTR,#DHTABLE2
CALL DHZ
MOV ADDR1,#08H ; 第三行显示
MOV N1,#08H
MOV DPTR,#DHTABLE3
CALL DHZ
MOV ADDR1,#18H ; 第四行显示
MOV N1,#08H
MOV DPTR,#DHTABLE4
CALL DHZ
RET
;=======================================================
;提示界面子程序
;=======================================================
TISHI: LCALL CLEAR_GLCD ; 清除LCD显示屏幕
MOV ADDR1,#00H
MOV N1,#08H
MOV DPTR,#DHTABLE5
CALL DHZ
MOV ADDR1,#10H
MOV N1,#08H
MOV DPTR,#DHTABLE6
CALL DHZ
MOV ADDR1,#08H
MOV N1,#08H
(科教作文网http://zw.ΝsΕac.cOM编辑)
MOV DPTR,#DHTABLE7
CALL DHZ
MOV ADDR1,#18H
MOV N1,#08H
MOV DPTR,#DHTABLE8
CALL DHZ
RET
;=======================================================
;阈值设定界面子程序
;=======================================================
SHEDING: LCALL CLEAR_GLCD
MOV ADDR1,#00H
MOV N1,#08H
MOV DPTR,#DHTABLE9
CALL DHZ
MOV ADDR1,#10H
MOV N1,#08H
MOV DPTR,#DHTABLE10
CALL DHZ
MOV ADDR1,#08H
MOV N1,#08H
(转载自http://zw.NSEAC.com科教作文网)
MOV DPTR,#DHTABLE11
CALL DHZ
MOV ADDR1,#18H
MOV N1,#08H
MOV DPTR,#DHTABLE12
CALL DHZ
RET
;=======================================================
;测量界面子程序
;=======================================================
celianjieguo: LCALL CLEAR_GLCD
MOV ADDR1,#00H
MOV N1,#08H
MOV DPTR,#CELIANG1
CALL DHZ
MOV ADDR1,#10H
MOV N1,#08H
MOV DPTR,#CELIANG2
CALL DHZ
MOV ADDR1,#08H
MOV N1,#08
MOV DPTR,#CELIANG3
(转载自科教范文网http://fw.nseac.com)
CALL DHZ
MOV ADDR1,#18H
MOV N1,#08
MOV DPTR,#CELIANG4
CALL DHZ
RET
;=======================================================
;8279初始化子程序
;=======================================================
INI_8279: MOV DPTR,#8101H
MOV A,#00H
MOVX @DPTR,A
MOV A,#32H
MOVX @DPTR,A
MOV A,#0DFH
MOVX @DPTR,A
RET
;=======================================================
;键盘设定阈值子程序
;=======================================================
(转载自中国科教评价网http://www.nseac.com)
YUZHI: LCALL SHEDING
MOV 44H,#00H ; 44H单元存按键次数,先清0
;******************键盘按键存储空间 *******
MOV 55H,#00H ;存入四次按键值
MOV 56H,#00H
MOV 57H,#00H
MOV 58H,#00H
MOV 50H,#00H ; 存阈值百位
MOV 51H,#00H ; 存阈值十位和个位
MOV 52H,#00H ; 存阈值小数位
;*************************************************************
KEY_09: MOV DPTR,#8101H ; 判断是否有键按下
MOVX A,@DPTR
ANL A,#07H
CJNE A,#00H,LPP1
您可以访问中国科教评价网(www.NsEac.com)查看更多相关的文章。
AJMP KEY_09
;-------------------------------------------
;各个键的处理
;------------------------------------------
LPP1: MOV DPTR,#8100H
MOVX A,@DPTR
B0: CJNE A,#0D8H,B1
AJMP KK0
B1: CJNE A,#0D0H,B2
AJMP KK1
B2: CJNE A,#0D1H,B3
AJMP KK2
B3: CJNE A,#0D2H,B4
AJMP KK3
B4: CJNE A,#0C8H,B5
AJMP KK4
B5: CJNE A,#0C9H,B6
AJMP KK5
B6: CJNE A,#0CAH,B7
(科教范文网 lw.nseaC.Com编辑发布)
AJMP KK6
B7: CJNE A,#0C0H,B8
AJMP KK7
B8: CJNE A,#0C1H,B9
AJMP KK8
B9: CJNE A,#0C2H,BE
AJMP KK9
BE: CJNE A,#0DAH,YUZHI
AJMP KKE
KK0: MOV 5BH,#00H ; 5BH存键值
AJMP COUNT_1
KK1: MOV 5BH,#01H
AJMP COUNT_1
KK2: MOV 5BH,#02H
AJMP COUNT_1
KK3: MOV 5BH,#03H
AJMP COUNT_1
内容来自www.nseac.com
KK4: MOV 5BH,#04H
AJMP COUNT_1
KK5: MOV 5BH,#05H
AJMP COUNT_1
KK6: MOV 5BH,#06H
AJMP COUNT_1
KK7: MOV 5BH,#07H
AJMP COUNT_1
KK8: MOV 5BH,#08H
AJMP COUNT_1
KK9: MOV 5BH,#09H
AJMP COUNT_1
KKE: AJMP END_P
COUNT_1: MOV A,44H ; 44H存按键次数
INC A
MOV 44H,A
CJNE A,#05H ,CW1 ; 按键次数是否达到4次
(转载自http://zw.NSEaC.com科教作文网)
AJMP YUZHI ; 五次按键则重设阈值
CW1: ADD A,#54H ; 键盘按键存储空间
MOV R0,A
CW2: CLR A
MOV A,5BH
MOV @R0,A
LCALL PRO_SHOW
AJMP KEY_09
RET
;=========================================
;各次报警值按键处理子程序
;=========================================
PRO_SHOW: NOP
PR_1: CLR A ; 一次按键
MOV A,44H
CJNE A,#01H,PR_2
MOV R0,#55H
MOV A,@R0
中国大学排名
SUBB A,#05H
JNC SS
MOV 51H,55H
MOV A,55H
MOV ADDR1,#0AH
LCALL SHUZIXIANSHI
SJMP END_P
PR_2: CLR A ; 二次按键
MOV A,44H
CJNE A,#02H,PR_3
CLR A
MOV A,55H
SWAP A
ADD A,56H
MOV 51H,A
(转载自中国科教评价网www.nseac.com )
MOV A,55H
MOV ADDR1,#09H
LCALL SHUZIXIANSHI
MOV A,56H
MOV ADDR1,#0AH
LCALL SHUZIXIANSHI
AJMP END_P
PR_3: CLR A ; 三次按键
MOV A,44H
CJNE A,#03H,PR_4
CLR A
MOV 50H,55H
MOV A,56H
SWAP A
ADD A,57H
(科教作文网http://zw.ΝsΕAc.Com编辑整理)
MOV 51H,A
MOV A,55H
MOV ADDR1,#08H
LCALL SHUZIXIANSHI
MOV A,56H
MOV ADDR1,#09H
LCALL SHUZIXIANSHI
MOV A,57H
MOV ADDR1,#0AH
LCALL SHUZIXIANSHI
SJMP END_P
PR_4: CLR A ; 四次按键
MOV A,58H
SWAP A
MOV 52H,A
(科教作文网 zw.nseac.com整理)
SWAP A
MOV ADDR1,#0CH
LCALL SHUZIXIANSHI
SJMP END_P
END_P: RET
SS: LJMP YUZHI
;=============================================================
;结果显示子程序
;=============================================================
CELIANGJIEGUO: LCALL ADC0809 ; 调用0809采样程序
LCALL ZHH ; 调用转换程序
MOV ADDR1,#08H ; 采数据送LCD显示
MOV A,40H
LCALL SHUZIXIANSHI
MOV ADDR1,#09H
MOV A,41H
SWAP A
LCALL SHUZIXIANSHI
MOV ADDR1,#0AH
(科教作文网http://zw.ΝsΕAc.Com编辑整理)
MOV A,41H
LCALL SHUZIXIANSHI
MOV ADDR1,#0CH
MOV A,43H
SWAP A
LCALL SHUZIXIANSHI
CALL DELAY500 ; 调用延时
CALL BJ ; 判断是否超过阈值,超过则报警
;------------------------------------------
;F键判断是否返回提示界面
;------------------------------------------
KEY_F: MOV DPTR,#8101H
MOVX A,@DPTR
ANL A,#07H
CJNE A,#00H,LP2
SJMP CELIANGJIEGUO
LP2: MOV DPTR,#8100H
MOVX A,@DPTR
CJNE A,#0D9H,CELIANGJIEGUO ;判断是否按F键
SETB P1.1
CLR P1.0
AJMP K1
;=======================================================
;报警子程序
;=======================================================
BJ: MOV R1,#50H
MOV A,@R1
CLR C
SUBB A,40H
JC WARNING
JZ COMP1
SETB P1.1
CLR P1.0
RET
COMP1: INC R1
MOV A,@R1
内容来自www.nseac.com
CLR C
SUBB A,41H
JC WARNING
JZ COMP2
SETB P1.1
CLR P1.0
RET
COMP2: INC R1
MOV A,@R1
CLR C
SUBB A,43H
JC WARNING
SETB P1.1
CLR P1.0
RET
WARNING: CLR P1.1
SETB P1.0
RET
;=======================================================
;0809采样程序
ADC0809: PUSH DPL
PUSH DPH
PUSH ACC
MOV DPTR,#W_D_0809 ; AD0809的启动地址
MOV A,#00H
MOVX @DPTR,A ; 0 通道
LCALL DELAY01 ; 延时100US
MOVX A,@DPTR ; 读出A/D的结果
MOV 3FH,A ; 暂存
POP ACC
POP DPH
POP DPL
RET
;=======================================================
;转换子程序 : 3FH的内容(A/D采样的结果)*(5V/256(FFH))=十进制结果;40H,41H.例如:3FH=0FFH, 那么程序执行后:40H=04H , 41H=99H 既4.99V
(转载自http://www.NSEAC.com中国科教评价网)
;=======================================================
ZHH: PUSH PSW
PUSH ACC
SETB RS0
MOV A,#4eH
MOV B,3FH
MUL AB
MOV R6,B
MOV R7,A
HB2: CLR A
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H
HB3: MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
(科教作文网http://zw.NSEaC.com编辑发布)
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A
DJNZ R2,HB3
MOV 40H,R3
MOV 41H,R4
MOV 43H,R5
POP ACC
POP PSW
RET
;=======================================================
;点阵式 LCD(128X64)模块显示部分子程序 ;以下是公共的程序:
;=======================================================
;LCD 初始化子程序
;=========================================
INITIAL_GLCD: PUSH ACC
MOV A,#30H ; 功能设定
(科教作文网http://zw.NSEaC.com编辑发布)
CALL COMMAND_GLCD
MOV A,#30H ; 功能设定
CALL COMMAND_GLCD
MOV A,#30H ; 功能设定
CALL COMMAND_GLCD
MOV A,#06H ; 显示器控制:游标不显示;
CALL COMMAND_GLCD
MOV A,#01H ; 清除显示器
CALL COMMAND_GLCD
MOV A,#0CH ; 进入模式设定
CALL COMMAND_GLCD
POP ACC
(科教作文网 zw.nseac.com整理)
RET
;=========================================
;汉字显示子程序(16X16点阵)
;=========================================
DHZ: MOV ADDR,ADDR1 ; 开始行位置
MOV B,N1 ; 显示数量
DHZ1: MOV A,ADDR;
ORL A,#80H ; 送显示地址
LCALL COMMAND_GLCD ; 调写命令子程序
DHZ2: CLR A
MOVC A,@A+DPTR ; 查找汉字的高位码
INC DPTR
LCALL WRITE_GLCD ; 送显示
CLR A
MOVC A,@A+DPTR ; 查找汉字的低位码
INC DPTR
LCALL WRITE_GLCD ; 送显示
(转载自中国科教评价网www.nseac.com )
DJNZ B,DHZ2
RET
;=========================================
;数字显示子程序
;=========================================
SHUZIXIANSHI: MOV 42H,A
MOV ADDR,ADDR1 ; 开始行位置
MOV A,ADDR;
ORL A,#80H ; 送显示地址
LCALL COMMAND_GLCD
MOV A,42H
;------------------------------------------
;将 ACC 内容,以十六进制值显示
;------------------------------------------
HEX_LCD: PUSH DPH
PUSH DPL
PUSH ACC
ANL A,#0FH
MOV DPTR,#ASCII_CODE ; DPTR 指到 ASCII_CODE
MOVC A,@A+DPTR ; 取得 ASCII 码
CALL WRITE_GLCD ; 写到 LCD
(转载自http://zw.nseac.coM科教作文网)
POP ACC
POP DPL
POP DPH
RET
ASCII_CODE: DB '0123456789ABCDEF'
;=========================================
;检查LCD 忙碌标志
;=========================================
CHKBUSY_GLCD: PUSH DPH
PUSH DPL
PUSH ACC
MOV DPTR,#R_B_GLCD
CHK: MOVX A,@DPTR
JB ACC.7,CHK ; 判别是不是忙?
POP ACC
POP DPL
POP DPH
RET
;=========================================
;写命令到 GLCD
;=========================================
COMMAND_GLCD: PUSH DPH
PUSH DPL
(转载自http://www.NSEAC.com中国科教评价网)
CALL CHKBUSY_GLCD ; 判别是不是忙?
MOV DPTR,#W_C_GLCD
MOVX @DPTR,A ; 写入命令
POP DPL
POP DPH
RET
;=========================================
;写资料到 GLCD
;=========================================
WRITE_GLCD: PUSH DPH
PUSH DPL
CALL CHKBUSY_GLCD ; 判别是不是忙?
MOV DPTR,#W_D_GLCD ; 写入数据
MOVX @DPTR,A
POP DPL
POP DPH
RET
;=========================================
(科教作文网 zw.nseac.com整理)
;清除 LCD 的显示幕
;=========================================
CLEAR_GLCD: PUSH ACC
MOV A,#01H ; 清除显示器
CALL COMMAND_GLCD
POP ACC
RET
;=======================================================
;延时子程序
;=======================================================
DELAY: PUSH TIMER1 ; 延时TIMER1*1 ms for 12MHz
PUSH TIMER0
DELAY1: MOV TIMER0,#250 ;时间为4*1μS
DELAY2: NOP ; 1个周期
NOP ; 1个周期
DJNZ TIMER0,DELAY2 ; 2个周期
DJNZ TIMER1,DELAY1
POP TIMER0
POP TIMER1
(转载自中国科教评价网www.nseac.com )
RET
NOP
;------------------------------------------
;延时 1 ms
;------------------------------------------
DELAY01: NOP
PUSH TIMER1
MOV TIMER1,#01H
LCALL DELAY
POP TIMER1
RET
NOP
;------------------------------------------
;延时500ms
;------------------------------------------
DELAY500: NOP
PUSH TIMER1
MOV TIMER1,#250
LCALL DELAY
LCALL DELAY
POP TIMER1
RET
NOP