一叶知秋丶丨 2018-11-25 12:14 采纳率: 0%
浏览 709

硬件设计-电子秤用C语言怎么写

电子秤设计
要求:
利用8255控制4*4键盘与LCD显示屏,0809负责采集压力信号,实现电子秤的基本功能。具有单价输入、公斤显示及清屏功能和超重报警功能。用C语言实现。

  • 写回答

1条回答 默认 最新

  • 阿贵@ 2018-12-11 03:03
    关注

    IO_ADDRESS EQU 288hIO_ADDRESS EQU 288Ha8255 equ 288H ;8255 A口c8255 equ 28aH ;8255 C口k8255 equ 28bH ;8255控制口分DATA SEGMENTHUANCH DW 0D6D8H, 0C1BFH,0A3BAH,0C1A6H,0A1C3H,0A3AEH,0A3CBH,0BDEFH;0-14 显示kg,+6,最后一个存数据,+16DW 0BCDBH,0B8F1H,0A3BAH,0A3B0H,0A3AEH,0A3B0H,0A1A0H,0D4AAH;16-30 单价XXX.X帕DW 0D7DCH,0BCDBH,0A3BAH,0A3AEH,0A3AEH,0A3AEH,0A3AEH,0A3AEH;32-46 显示状态DW 00H,00H,00H,00H,00H,00H,00H,00H;48-52 显示值班人员DW 64,66,68,0,72;CC DB 10;HZ_ADR DB ?table1 DW 0770h,0B70h,0D70h,0E70h,07B0h,0BB0h,0DB0h,0EB0hDW 07D0h,0BD0h,0DD0h,0ED0h,07E0h,0BE0h,0DE0h,0EE0h ;键盘扫描码表char DB '0123456789ABCDEF' ;字符表DATA ENDSDATA ENDSSTACKS SEGMENT STACK ;堆栈空间DB 100 DUP (?)STACK ENDS ;jianpanCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKS,ES:DATASTART:CLIMOV AX,DATAMOV DS,AXMOV ES,AX ;?????????????????MOV AX,stacksMOV SS,AXMOV DX,IO_ADDRESS+3MOV AL,81HOUT DX,AL ;8255初始化CALL TRANSFORM ;调用0809 okCALL CLEAR ;LCD 清除LEA BX,HUANCHMOV CH,1 ;显示第1行信息CALL LCD_DISPCALL JISUANLEA BX, HUANCHMOV CH,2 ;显示第2行信息CALL LCD_DISPLEA BX, HUANCHMOV CH,3 ;显示第3行信息CALL LCD_DISPLEA BX,HUANCHMOV CH,4 ;显示第4行信息CALL LCD_DISPMOV DX,c8255MOV AL,0fhOUT DX,ALIN AL,DX ;读行扫描值AND AL,0fhCMP AL,0fhJZ START ;未发现有键按下则转MOV DL,3fhMOV AH,2INT 21hCALL JIANPANMOV DL,[CC]ADD DL,30HMOV AH,02INT 21h ;显示查找到的键盘MOV BL,[CC];MOV BH,0;MOV [HUANCH+66],BXADD BX,0A3B0HMOV [HUANCH+22],BXCALL JIANPANMOV DL,[CC]ADD DL,30HMOV AH,02INT 21h ;显示查找到的键盘MOV BL,[CC];MOV BH,0MOV [HUANCH+68],BXADD BX,0A3B0HMOV [HUANCH+26],BXMOV BL,10MOV AX,[HUANCH+66]MOV AH,0;MUL BLADD AX,[HUANCH+68]MOV [HUANCH+70],AX;MOV DX,IO_ADDRESS+3MOV AL,81HOUT DX,AL ;8255初始LEA BX, HUANCHMOV CH,2 ;显示第2行信息CALL LCD_DISPLEA BX, HUANCHCALL JISUANMOV CH,3 ;显示第3行信息CALL LCD_DISPl1: JMP STARTCLEAR PROCMOV AL,0CHMOV DX,IO_ADDRESSOUT DX,AL ;设置CLEAR命令CALL CMD_SETUP ;启动LCD执行命令RETCLEAR ENDPTRANSFORM PROC ;启动0809MOV DX,280HOUT DX,ALMOV CX,0FFHAGAIN: LOOP AGAININ AL,DX ;读取0809的值MOV BL,2 ;量程转换,100-1000MOV AH,0MUL BLMOV [HUANCH+64] ,AXMOV DX,0MOV CX,100 ;将转换量程后的值进行拆分,使之能在LED屏上显示DIV CXADD AX,0A3B0HMOV [HUANCH+6],AX ;储存百位数值,显示MOV AX,DXMOV DX,0MOV CX,10DIV CXADD AX,0A3B0HMOV [HUANCH+8],AX ;储存十位数值,显示MOV AX,DXADD AX,0A3B0HMOV [HUANCH+12],AX ;储存个位数值至缓冲区RETTRANSFORM ENDPFUNCUP PROCMOV AL,34H ;LCD显示状态命令OUT DX,ALCALL CMD_SETUPRETFUNCUP ENDPLCD_DISP PROCLEA BX, HUANCHCMP CH, 1 ;判断是否为第一行JZ DISP_SEC1CMP CH,2 ;判断是否为第二行JZ DISP_SEC2CMP CH,3 ;判断是否为第三行JZ DISP_SEC3CMP CH,4 ;判断是否为第三行JZ DISP_SEC4MOV BYTE PTR HZ_ADR,98h ;第四行起始端口地址ADD BX,48 ;指向第四行信息JMP NEXTDISP_SEC1:MOV BYTE PTR HZ_ADR,80H ;第一行起始端口地址ADD BX,0 ;指向第一行信息JMP NEXTDISP_SEC2:MOV BYTE PTR HZ_ADR,90H ;第二行起始端口地址ADD BX,16 ;指向第二行信息JMP NEXTDISP_SEC3:MOV BYTE PTR HZ_ADR,88H ;第三行起始端口信息ADD BX,32 ;指向第三行信息JMP NEXTDISP_SEC4:MOV BYTE PTR HZ_ADR,98H ;第三行起始端口信息ADD BX,48 ;指向第三行信息JMP NEXTNEXT:MOV CL,8CONTINUE:PUSH CXMOV AL,HZ_ADRMOV DX,IO_ADDRESSOUT DX, ALCALL CMD_SETUP ;设定DDRAM地址命令MOV AX,[BX]PUSH AXMOV AL,AH ;先送汉字编码高位MOV DX,IO_ADDRESSOUT DX,ALCALL DATA_SETUP ;输出汉字编码高字节CALL DELAYTIME ;延迟POP AXMOV DX,IO_ADDRESSOUT DX, ALCALL DATA_SETUP ;输出汉字编码低字节CALL DELAYTIMEINC BXINC BX ;修改显示内码缓冲区指针INC BYTE PTR HZ_ADR ;修改LCD显示端口地址POP CXDEC CLJNZ CONTINUERETLCD_DISP ENDPCMD_SETUP PROCMOV DX,IO_ADDRESS ;指向8255端口控制端口ADD DX,1NOPMOV AL,00000000B ;PC1置0,pc0置0 (LCD I端=0,W端=0)OUT DX, ALCALL DELAYTIMENOPMOV AL,00000100B ;PC2置1 (LCD E端=1)OUT DX, ALNOPCALL DELAYTIMEMOV AL, 00000000B ;PC2置0,(LCD E端置0)OUT DX, ALCALL DELAYTIMERETCMD_SETUP ENDPDATA_SETUP PROCMOV DX,IO_ADDRESS ;指向8255控制端口ADD DX,1MOV AL,00000001B ;PC1置0,PC0=1 (LCD I端=1)OUT DX, ALNOPCALL DELAYTIMEMOV AL,00000101B ;PC2置1 (LCD E端=1)OUT DX, ALNOPCALL DELAYTIMEMOV AL, 00000001B ;PC2置0,(LCD E端=0)OUT DX, ALNOPDELAYTIME PROC ;延时子程序MOV CX,0FFFFHD1:LOOP D1RETDELAYTIME ENDPDATA_SETUP ENDPJISUAN PROCMOV AX,[HUANCH+70]MOV BX,[HUANCH+64]MUL BXMOV DX,0;MOV BX,10000DIV BXADD AX,0A3B0HMOV [HUANCH+38],AXMOV AX,DXMOV BX,1000MOV DX,0;DIV BXADD AX,0A3B0HMOV [HUANCH+40],AXMOV AX,DXMOV BX,100MOV DX,0;DIV BXADD AX,0A3B0HMOV [HUANCH+42],AXMOV AX,DXMOV BX,10MOV DX,0;DIV BXADD AX,0A3B0HMOV [HUANCH+46],AXMOV AX,DXRETJISUAN ENDPJIANPAN PROCMOV DX,k8255 ;初始化8255控制字MOV AL,81hOUT DX,ALkey_loop:MOV DX,c8255MOV AL,0fhOUT DX,ALIN AL,DX ;读

    评论

报告相同问题?

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图