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

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

0

1个回答

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 ;读

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!