;SMS0828数码笔段型液晶显示模块的演示程序[ASM51] ; 本演示程序是在SMS0828软件接口子程序集基础上开发出来的.通过简单设置SMS0828中显 ;示对象NUM1..NUM8数字及Z1..Z40标志,调用TRANRAM程序,就可以将要显示的数字及相应的 ;标志在SMS0828数码笔段型液晶显示模块上显示出来.通过使用本程序,加深理解SMS0828软 ;件接口子程序的使用方法,以及使用的的简洁性,用户上层程序的可移植性. ; 本演示的内容为,在SMS0828液晶显示屏中所有数字显示0..9 空格一遍,所有数字依次显 ;示8,所有标志依次显示,LCD所有数字重复显示0..9 空格一遍,所有数字依次显示8,所有标 ;志依次隐藏,LCD液晶显示控制器进入睡眠状态. ;------------------------------------------------------------------------------- ;创建日期: 2009.08.08 ;软件环境: VW For Windows ;硬件环境: AT89C52 MCU,MCS-51系列 MCU,etc. ;创建人: 褚建军(chujianjun@sunman.cn),谭超(tanchao@sunman.cn). ;技术支持: 电话(0731-84167806,84167807),传真(0731-84167807),网址(www.sunman.cn) ;版权信息: 长沙太阳人电子有限公司版权所有,转载请指明出处. ;参考网页: http:/www.sunman.cn/lcm/product/SMS0828.html ;------------------------------------------------------------------------------- ;SMS0828产品引脚说明 ;PIN1: CS [片选信号输入] ;PIN2: CLK [串行移位脉冲输入] ;PIN3: DI [串行数据输入] ;PIN4: VSS [电源地] ;PIN5: NC [空脚] ;PIN6: VDD [电源正极] ;------------------------------------------------------------------------------- ;以下为产品接口引脚在演示程序中的预定义 ;用户在编写应用程序时,需按自己的实际硬件连线来重新定义 CSPIN BIT P1.0 ;CS对应单片机引脚 CLKPIN BIT P1.1 ;CLK对应单片机引脚 DIPIN BIT P1.2 ;DI对应单片机引脚 ;------------------------------------------------------------------------------- ;以下NUM1_RAM至NUM8_RAM为数字1至8在演示程序中的RAM地址预定义 ;用户在编写应用程序时,需按自己的实际软件程序需要来重新定义 NUMBERS EQU 8 ;显示数字的个数 NUM1_RAM EQU 20H ;数字1 NUM2_RAM EQU 21H ;数字2 NUM3_RAM EQU 22H ;数字3 NUM4_RAM EQU 23H ;数字4 NUM5_RAM EQU 24H ;数字5 NUM6_RAM EQU 25H ;数字6 NUM7_RAM EQU 26H ;数字7 NUM8_RAM EQU 27H ;数字8 ;------------------------------------------------------------------------------- ;以下Z1_RAM至Z40_RAM,Z1_BMASK至Z40_BMASK为Z标志1至40在演示程序中的RAM及BIT的预定义 ;用户在编写应用程序时,需按自己的实际软件程序需要来重新定义 ZNUMBERS EQU 40 ;显示标志的个数 Z1_RAM EQU 28H ;Z1[L1] Z1_BMASK EQU 00000001B ;[Z1_RAM].0 Z2_RAM EQU 28H ;Z2[K1] Z2_BMASK EQU 00000010B ;[Z2_RAM].1 Z3_RAM EQU 28H ;Z3[I1] Z3_BMASK EQU 00000100B ;[Z3_RAM].2 Z4_RAM EQU 28H ;Z4[J1] Z4_BMASK EQU 00001000B ;[Z4_RAM].3 Z5_RAM EQU 28H ;Z5[L2] Z5_BMASK EQU 00010000B ;[Z5_RAM].4 Z6_RAM EQU 28H ;Z6[K2] Z6_BMASK EQU 00100000B ;[Z6_RAM].5 Z7_RAM EQU 28H ;Z7[I2] Z7_BMASK EQU 01000000B ;[Z7_RAM].6 Z8_RAM EQU 28H ;Z8[J2] Z8_BMASK EQU 10000000B ;[Z8_RAM].7 Z9_RAM EQU 29H ;Z9[L3] Z9_BMASK EQU 00000001B ;[Z9_RAM].0 Z10_RAM EQU 29H ;Z10[K3] Z10_BMASK EQU 00000010B ;[Z10_RAM].1 Z11_RAM EQU 29H ;Z11[I3] Z11_BMASK EQU 00000100B ;[Z11_RAM].2 Z12_RAM EQU 29H ;Z12[J3] Z12_BMASK EQU 00001000B ;[Z12_RAM].3 Z13_RAM EQU 29H ;Z13[L4] Z13_BMASK EQU 00010000B ;[Z13_RAM].4 Z14_RAM EQU 29H ;Z14[K4] Z14_BMASK EQU 00100000B ;[Z14_RAM].5 Z15_RAM EQU 29H ;Z15[I4] Z15_BMASK EQU 01000000B ;[Z15_RAM].6 Z16_RAM EQU 29H ;Z16[J4] Z16_BMASK EQU 10000000B ;[Z16_RAM].7 Z17_RAM EQU 2AH ;Z17[L5] Z17_BMASK EQU 00000001B ;[Z17_RAM].0 Z18_RAM EQU 2AH ;Z18[K5] Z18_BMASK EQU 00000010B ;[Z18_RAM].1 Z19_RAM EQU 2AH ;Z19[I5] Z19_BMASK EQU 00000100B ;[Z19_RAM].2 Z20_RAM EQU 2AH ;Z20[J5] Z20_BMASK EQU 00001000B ;[Z20_RAM].3 Z21_RAM EQU 2AH ;Z21[L6] Z21_BMASK EQU 00010000B ;[Z21_RAM].4 Z22_RAM EQU 2AH ;Z22[K6] Z22_BMASK EQU 00100000B ;[Z22_RAM].5 Z23_RAM EQU 2AH ;Z23[I6] Z23_BMASK EQU 01000000B ;[Z23_RAM].6 Z24_RAM EQU 2AH ;Z24[J6] Z24_BMASK EQU 10000000B ;[Z24_RAM].7 Z25_RAM EQU 2BH ;Z25[L7] Z25_BMASK EQU 00000001B ;[Z25_RAM].0 Z26_RAM EQU 2BH ;Z26[K7] Z26_BMASK EQU 00000010B ;[Z26_RAM].1 Z27_RAM EQU 2BH ;Z27[I7] Z27_BMASK EQU 00000100B ;[Z27_RAM].2 Z28_RAM EQU 2BH ;Z28[J7] Z28_BMASK EQU 00001000B ;[Z28_RAM].3 Z29_RAM EQU 2BH ;Z29[L8] Z29_BMASK EQU 00010000B ;[Z29_RAM].4 Z30_RAM EQU 2BH ;Z30[K8] Z30_BMASK EQU 00100000B ;[Z30_RAM].5 Z31_RAM EQU 2BH ;Z31[I8] Z31_BMASK EQU 01000000B ;[Z31_RAM].6 Z32_RAM EQU 2BH ;Z32[J8] Z32_BMASK EQU 10000000B ;[Z32_RAM].7 Z33_RAM EQU 2CH ;Z33[H1] Z33_BMASK EQU 00000001B ;[Z33_RAM].0 Z34_RAM EQU 2CH ;Z34[H2] Z34_BMASK EQU 00000010B ;[Z34_RAM].1 Z35_RAM EQU 2CH ;Z35[H3] Z35_BMASK EQU 00000100B ;[Z35_RAM].2 Z36_RAM EQU 2CH ;Z36[H4] Z36_BMASK EQU 00001000B ;[Z36_RAM].3 Z37_RAM EQU 2CH ;Z37[H5] Z37_BMASK EQU 00010000B ;[Z37_RAM].4 Z38_RAM EQU 2CH ;Z38[H6] Z38_BMASK EQU 00100000B ;[Z38_RAM].5 Z39_RAM EQU 2CH ;Z39[H7] Z39_BMASK EQU 01000000B ;[Z39_RAM].6 Z40_RAM EQU 2CH ;Z40[H8] Z40_BMASK EQU 10000000B ;[Z40_RAM].7 ;------------------------------------------------------------------------------- ORG 0000H ; JMP START START: MOV SP,#60H MAIN: CALL EXSAMPLE ;调用演示程序 JMP MAIN EXSAMPLE: ;演示程序 ;0.演示前的准备,将LCD液晶显示所有标志及数字全清零 MOV A,#0 CALL ZFILL ;所有Z标志清零 CALL NUMFILL ;所有数字清零 ;1.数字演示: 所有数字显示0..9 空格一遍 MOV R7,#0 ;初始数字为0 ESP_PA: ; MOV A,R7 ; CALL NUMFILL ;数字缓冲区全部填充为A的值 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS INC R7 CJNE R7,#11,ESP_PA ; ;2.数字演示: 所有数字依次显示8 MOV NUM1_RAM,#08H ;数字1显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM2_RAM,#08H ;数字2显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM3_RAM,#08H ;数字3显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM4_RAM,#08H ;数字4显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM5_RAM,#08H ;数字5显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM6_RAM,#08H ;数字6显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM7_RAM,#08H ;数字7显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM8_RAM,#08H ;数字8显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ;3.标志演示: 所有标志依次显示 ORL Z1_RAM,#Z1_BMASK ;Z1:L1 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z2_RAM,#Z2_BMASK ;Z2:K1 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z3_RAM,#Z3_BMASK ;Z3:I1 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z4_RAM,#Z4_BMASK ;Z4:J1 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z5_RAM,#Z5_BMASK ;Z5:L2 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z6_RAM,#Z6_BMASK ;Z6:K2 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z7_RAM,#Z7_BMASK ;Z7:I2 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z8_RAM,#Z8_BMASK ;Z8:J2 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z9_RAM,#Z9_BMASK ;Z9:L3 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z10_RAM,#Z10_BMASK ;Z10:K3 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z11_RAM,#Z11_BMASK ;Z11:I3 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z12_RAM,#Z12_BMASK ;Z12:J3 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z13_RAM,#Z13_BMASK ;Z13:L4 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z14_RAM,#Z14_BMASK ;Z14:K4 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z15_RAM,#Z15_BMASK ;Z15:I4 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z16_RAM,#Z16_BMASK ;Z16:J4 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z17_RAM,#Z17_BMASK ;Z17:L5 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z18_RAM,#Z18_BMASK ;Z18:K5 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z19_RAM,#Z19_BMASK ;Z19:I5 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z20_RAM,#Z20_BMASK ;Z20:J5 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z21_RAM,#Z21_BMASK ;Z21:L6 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z22_RAM,#Z22_BMASK ;Z22:K6 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z23_RAM,#Z23_BMASK ;Z23:I6 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z24_RAM,#Z24_BMASK ;Z24:J6 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z25_RAM,#Z25_BMASK ;Z25:L7 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z26_RAM,#Z26_BMASK ;Z26:K7 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z27_RAM,#Z27_BMASK ;Z27:I7 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z28_RAM,#Z28_BMASK ;Z28:J7 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z29_RAM,#Z29_BMASK ;Z29:L8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z30_RAM,#Z30_BMASK ;Z30:K8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z31_RAM,#Z31_BMASK ;Z31:I8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z32_RAM,#Z32_BMASK ;Z32:J8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z33_RAM,#Z33_BMASK ;Z33:H1 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z34_RAM,#Z34_BMASK ;Z34:H2 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z35_RAM,#Z35_BMASK ;Z35:H3 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z36_RAM,#Z36_BMASK ;Z36:H4 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z37_RAM,#Z37_BMASK ;Z37:H5 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z38_RAM,#Z38_BMASK ;Z38:H6 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z39_RAM,#Z39_BMASK ;Z39:H7 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ORL Z40_RAM,#Z40_BMASK ;Z40:H8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ;4.数字演示: 所有数字重复显示0..9 空格一遍 MOV R7,#0 ;初始数字为0 ESP_PB: ; MOV A,R7 ; CALL NUMFILL ;数字缓冲区全部填充为A的值 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS INC R7 CJNE R7,#11,ESP_PB ; ;5.数字演示: 所有数字依次显示8 MOV NUM1_RAM,#08H ;数字1显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM2_RAM,#08H ;数字2显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM3_RAM,#08H ;数字3显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM4_RAM,#08H ;数字4显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM5_RAM,#08H ;数字5显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM6_RAM,#08H ;数字6显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM7_RAM,#08H ;数字7显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS MOV NUM8_RAM,#08H ;数字8显示8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ;6.标志演示: 所有标志依次隐藏 ANL Z1_RAM,#0FFH-Z1_BMASK ;Z1:L1 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z2_RAM,#0FFH-Z2_BMASK ;Z2:K1 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z3_RAM,#0FFH-Z3_BMASK ;Z3:I1 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z4_RAM,#0FFH-Z4_BMASK ;Z4:J1 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z5_RAM,#0FFH-Z5_BMASK ;Z5:L2 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z6_RAM,#0FFH-Z6_BMASK ;Z6:K2 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z7_RAM,#0FFH-Z7_BMASK ;Z7:I2 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z8_RAM,#0FFH-Z8_BMASK ;Z8:J2 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z9_RAM,#0FFH-Z9_BMASK ;Z9:L3 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z10_RAM,#0FFH-Z10_BMASK ;Z10:K3 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z11_RAM,#0FFH-Z11_BMASK ;Z11:I3 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z12_RAM,#0FFH-Z12_BMASK ;Z12:J3 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z13_RAM,#0FFH-Z13_BMASK ;Z13:L4 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z14_RAM,#0FFH-Z14_BMASK ;Z14:K4 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z15_RAM,#0FFH-Z15_BMASK ;Z15:I4 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z16_RAM,#0FFH-Z16_BMASK ;Z16:J4 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z17_RAM,#0FFH-Z17_BMASK ;Z17:L5 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z18_RAM,#0FFH-Z18_BMASK ;Z18:K5 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z19_RAM,#0FFH-Z19_BMASK ;Z19:I5 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z20_RAM,#0FFH-Z20_BMASK ;Z20:J5 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z21_RAM,#0FFH-Z21_BMASK ;Z21:L6 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z22_RAM,#0FFH-Z22_BMASK ;Z22:K6 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z23_RAM,#0FFH-Z23_BMASK ;Z23:I6 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z24_RAM,#0FFH-Z24_BMASK ;Z24:J6 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z25_RAM,#0FFH-Z25_BMASK ;Z25:L7 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z26_RAM,#0FFH-Z26_BMASK ;Z26:K7 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z27_RAM,#0FFH-Z27_BMASK ;Z27:I7 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z28_RAM,#0FFH-Z28_BMASK ;Z28:J7 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z29_RAM,#0FFH-Z29_BMASK ;Z29:L8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z30_RAM,#0FFH-Z30_BMASK ;Z30:K8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z31_RAM,#0FFH-Z31_BMASK ;Z31:I8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z32_RAM,#0FFH-Z32_BMASK ;Z32:J8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z33_RAM,#0FFH-Z33_BMASK ;Z33:H1 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z34_RAM,#0FFH-Z34_BMASK ;Z34:H2 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z35_RAM,#0FFH-Z35_BMASK ;Z35:H3 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z36_RAM,#0FFH-Z36_BMASK ;Z36:H4 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z37_RAM,#0FFH-Z37_BMASK ;Z37:H5 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z38_RAM,#0FFH-Z38_BMASK ;Z38:H6 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z39_RAM,#0FFH-Z39_BMASK ;Z39:H7 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ANL Z40_RAM,#0FFH-Z40_BMASK ;Z40:H8 CALL TRANSRAM ;LCD显示刷新 CALL EXDELAY ;延时300mS ;7.节电演示: LCD液晶显示控制器进入睡眠状态,电流小于1uA CALL LCDSLEEP ;LCD液晶显示控制器进入睡眠状态 CALL EXDELAY ;延时300mS RET EXDELAY: ;演示延时子程序 MOV R2,#30 ;延时约300mS EDY_PA: MOV R1,#100 EDY_PB: MOV R0,#49 DJNZ R0,$ DJNZ R1,EDY_PB DJNZ R2,EDY_PA RET ;------------------------------------------------------------------------------- ;以下为SMS0828软件接口子程序集[ASM51] ;本软件接口子程序集将显示定义成NUM1..NUM8数字对象及Z1..Z40标志对象,用户只需要在 ;应用时将NUM1..NUM8数字赋值及Z1..Z40标志置1,调用TRANRAM程序,就可以将要显示的数字 ;及相应的标志在SMS0828数码笔段型液晶显示模块上显示出来. ;用户在编写应用程序时,需按自己的实际软件程序需要来重新定义NUM1..NUM8,Z1..Z40 ;例: ; 第1个数字的RAM地址为40H,则 NUM1_RAM EQU 40H ; 第1个数字显示用户自定义变量MODE的值 则 NUM1_RAM EQU MODE ; 第1个标志的RAM地址为50H的第D2位 则 Z1_RAM EQU 50H ; Z1_BMASK EQU 00000100B ; 第1个标志显示用户自定义标志LABELBUF的第D6为 则 Z1_RAM EQU LABELBUF ; Z1_BMASK EQU 01000000B ;------------------------------------------------------------------------------- ;以下NUMFILL,ZFILL,DECODETOLCD为三线式串行硬件接口(B型)的SMS0828液晶显示模块的基 ;本子程序,NUMCODE1TAB,NUMCODE2TAB,NUMCODE3TAB为SMS0828液晶显示模块的数字七段译码 ;表 ;用户可根据实际使用的标志及数字情况进行程序的删减或合并,地址映射表请参见 ;http://www.sunman.cn/document/product/chinese/usermanual/SMS0828.pdf ;------------------------------------------------------------------------------- ;子程序名称:NUMFILL(A). ;功能:将数字缓冲区填充为A代表的数字. ;输入:A. ;输出:无. ;影响:无. ;修改日期:2009.08.08 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- NUMFILL: ;所有数字填充子程序 MOV NUM1_RAM,A ;1 MOV NUM2_RAM,A ;2 MOV NUM3_RAM,A ;3 MOV NUM4_RAM,A ;4 MOV NUM5_RAM,A ;5 MOV NUM6_RAM,A ;6 MOV NUM7_RAM,A ;7 MOV NUM8_RAM,A ;8 RET ;------------------------------------------------------------------------------- ;子程序名称:ZFILL(A). ;功能:将标志缓冲区中所有标志填充为A代表的内容(A为0时,标志不显示). ;输入:A. ;输出:无. ;影响:无. ;修改日期:2009.08.08 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- ZFILL: ;所有Z标志填充子程序 JNZ ZFL_LAY ;检测A的内容 ;A为零,则所有标志清零 ANL Z1_RAM,#0FFH-Z1_BMASK ;1 ANL Z2_RAM,#0FFH-Z2_BMASK ;2 ANL Z3_RAM,#0FFH-Z3_BMASK ;3 ANL Z4_RAM,#0FFH-Z4_BMASK ;4 ANL Z5_RAM,#0FFH-Z5_BMASK ;5 ANL Z6_RAM,#0FFH-Z6_BMASK ;6 ANL Z7_RAM,#0FFH-Z7_BMASK ;7 ANL Z8_RAM,#0FFH-Z8_BMASK ;8 ANL Z9_RAM,#0FFH-Z9_BMASK ;9 ANL Z10_RAM,#0FFH-Z10_BMASK ;10 ANL Z11_RAM,#0FFH-Z11_BMASK ;11 ANL Z12_RAM,#0FFH-Z12_BMASK ;12 ANL Z13_RAM,#0FFH-Z13_BMASK ;13 ANL Z14_RAM,#0FFH-Z14_BMASK ;14 ANL Z15_RAM,#0FFH-Z15_BMASK ;15 ANL Z16_RAM,#0FFH-Z16_BMASK ;16 ANL Z17_RAM,#0FFH-Z17_BMASK ;17 ANL Z18_RAM,#0FFH-Z18_BMASK ;18 ANL Z19_RAM,#0FFH-Z19_BMASK ;19 ANL Z20_RAM,#0FFH-Z20_BMASK ;20 ANL Z21_RAM,#0FFH-Z21_BMASK ;21 ANL Z22_RAM,#0FFH-Z22_BMASK ;22 ANL Z23_RAM,#0FFH-Z23_BMASK ;23 ANL Z24_RAM,#0FFH-Z24_BMASK ;24 ANL Z25_RAM,#0FFH-Z25_BMASK ;25 ANL Z26_RAM,#0FFH-Z26_BMASK ;26 ANL Z27_RAM,#0FFH-Z27_BMASK ;27 ANL Z28_RAM,#0FFH-Z28_BMASK ;28 ANL Z29_RAM,#0FFH-Z29_BMASK ;29 ANL Z30_RAM,#0FFH-Z30_BMASK ;30 ANL Z31_RAM,#0FFH-Z31_BMASK ;31 ANL Z32_RAM,#0FFH-Z32_BMASK ;32 ANL Z33_RAM,#0FFH-Z33_BMASK ;33 ANL Z34_RAM,#0FFH-Z34_BMASK ;34 ANL Z35_RAM,#0FFH-Z35_BMASK ;35 ANL Z36_RAM,#0FFH-Z36_BMASK ;36 ANL Z37_RAM,#0FFH-Z37_BMASK ;37 ANL Z38_RAM,#0FFH-Z38_BMASK ;38 ANL Z39_RAM,#0FFH-Z39_BMASK ;39 ANL Z40_RAM,#0FFH-Z40_BMASK ;40 JMP ZFL_LAX ZFL_LAY: ;A不为零,则所有标志置位 ORL Z1_RAM,#Z1_BMASK ;1 ORL Z2_RAM,#Z2_BMASK ;2 ORL Z3_RAM,#Z3_BMASK ;3 ORL Z4_RAM,#Z4_BMASK ;4 ORL Z5_RAM,#Z5_BMASK ;5 ORL Z6_RAM,#Z6_BMASK ;6 ORL Z7_RAM,#Z7_BMASK ;7 ORL Z8_RAM,#Z8_BMASK ;8 ORL Z9_RAM,#Z9_BMASK ;9 ORL Z10_RAM,#Z10_BMASK ;10 ORL Z11_RAM,#Z11_BMASK ;11 ORL Z12_RAM,#Z12_BMASK ;12 ORL Z13_RAM,#Z13_BMASK ;13 ORL Z14_RAM,#Z14_BMASK ;14 ORL Z15_RAM,#Z15_BMASK ;15 ORL Z16_RAM,#Z16_BMASK ;16 ORL Z17_RAM,#Z17_BMASK ;17 ORL Z18_RAM,#Z18_BMASK ;18 ORL Z19_RAM,#Z19_BMASK ;19 ORL Z20_RAM,#Z20_BMASK ;20 ORL Z21_RAM,#Z21_BMASK ;21 ORL Z22_RAM,#Z22_BMASK ;22 ORL Z23_RAM,#Z23_BMASK ;23 ORL Z24_RAM,#Z24_BMASK ;24 ORL Z25_RAM,#Z25_BMASK ;25 ORL Z26_RAM,#Z26_BMASK ;26 ORL Z27_RAM,#Z27_BMASK ;27 ORL Z28_RAM,#Z28_BMASK ;28 ORL Z29_RAM,#Z29_BMASK ;29 ORL Z30_RAM,#Z30_BMASK ;30 ORL Z31_RAM,#Z31_BMASK ;31 ORL Z32_RAM,#Z32_BMASK ;32 ORL Z33_RAM,#Z33_BMASK ;33 ORL Z34_RAM,#Z34_BMASK ;34 ORL Z35_RAM,#Z35_BMASK ;35 ORL Z36_RAM,#Z36_BMASK ;36 ORL Z37_RAM,#Z37_BMASK ;37 ORL Z38_RAM,#Z38_BMASK ;38 ORL Z39_RAM,#Z39_BMASK ;39 ORL Z40_RAM,#Z40_BMASK ;40 ZFL_LAX: RET ;------------------------------------------------------------------------------- ;数据表名称:NUMCODE1TAB. ;功能:将数字转换为七段码. ;修改日期:2009.08.08 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- ;数码笔段定义: 8字的最上面一笔段为A笔段,顺时针方向依次为BCDEF笔段,中间的是G笔段 NUMCODE1TAB: ;GEXDBXCX ;数字七段译码表 DB 01011010B ;0:数字0 DB 00001010B ;1:数字1 DB 11011000B ;2:数字2 DB 10011010B ;3:数字3 DB 10001010B ;4:数字4 DB 10010010B ;5:数字5 DB 11010010B ;6:数字6 DB 00001010B ;7:数字7 DB 11011010B ;8:数字8 DB 10011010B ;9:数字9 DB 00000000B ;10:字符空格 DB 10000000B ;11:字符- DB 01010000B ;12:字符C DB 11001000B ;13:字符P DB 11010000B ;14:字符E DB 11000000B ;15:字符F ;------------------------------------------------------------------------------- ;数据表名称:NUMCODE2TAB. ;功能:将数字转换为七段码. ;修改日期:2009.08.08 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- NUMCODE2TAB: ;XXXXXFXA ;数字七段译码表 DB 00000101B ;0:数字0 DB 00000000B ;1:数字1 DB 00000001B ;2:数字2 DB 00000001B ;3:数字3 DB 00000100B ;4:数字4 DB 00000101B ;5:数字5 DB 00000101B ;6:数字6 DB 00000001B ;7:数字7 DB 00000101B ;8:数字8 DB 00000101B ;9:数字9 DB 00000000B ;10:字符空格 DB 00000000B ;11:字符- DB 00000101B ;12:字符C DB 00000101B ;13:字符P DB 00000101B ;14:字符E DB 00000101B ;15:字符F ;------------------------------------------------------------------------------- ;数据表名称:NUMCODE3TAB. ;功能:将数字转换为七段码. ;修改日期:2009.08.08 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- NUMCODE3TAB: ;XFXAXXXX ;数字七段译码表 DB 01010000B ;0:数字0 DB 00000000B ;1:数字1 DB 00010000B ;2:数字2 DB 00010000B ;3:数字3 DB 01000000B ;4:数字4 DB 01010000B ;5:数字5 DB 01010000B ;6:数字6 DB 00010000B ;7:数字7 DB 01010000B ;8:数字8 DB 01010000B ;9:数字9 DB 00000000B ;10:字符空格 DB 00000000B ;11:字符- DB 01010000B ;12:字符C DB 01010000B ;13:字符P DB 01010000B ;14:字符E DB 01010000B ;15:字符F ;------------------------------------------------------------------------------- ;子程序名称:DECODETOLCD(). ;功能:按地址映射表字节顺序,所有数据译码后送LCD液晶显示控制器. ;输入:无. ;输出:无. ;影响:R0,R1,R2,R3,ACC,B,DPTR. ;修改日期:2009.08.08 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- ;地址映射表请参见 ;http://www.sunman.cn/document/product/chinese/usermanual/SMS0828.pdf DECODETOLCD: ;按地址映射表字节顺序,所有数据译码后送 ;LCD液晶显示控制器子程序 ;临时LCD缓冲区字节为R3 ;LCDBUF+0 缓冲区第1个字节译码 MOV A,#00000000B ;当前字节不需译码,直接将当前临时LCD缓冲区 CALL TRANSBYTE ;字节数据初始值送LCD液晶显示控制器中 ;LCDBUF+1 缓冲区第2个字节译码 MOV A,#00000000B ;当前字节不需译码,直接将当前临时LCD缓冲区 CALL TRANSBYTE ;字节数据初始值送LCD液晶显示控制器中 ;LCDBUF+2 缓冲区第3个字节译码 MOV A,#00000000B ;当前字节不需译码,直接将当前临时LCD缓冲区 CALL TRANSBYTE ;字节数据初始值送LCD液晶显示控制器中 ;LCDBUF+3 缓冲区第4个字节译码 MOV A,#00000000B ;当前字节不需译码,直接将当前临时LCD缓冲区 CALL TRANSBYTE ;字节数据初始值送LCD液晶显示控制器中 ;LCDBUF+4 缓冲区第5个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为GEZDBZCZ位 ;第8个8字的GEDBC笔段送缓冲区 MOV B,#11011010B ;置当前8字的屏蔽码为GEXDBXCX MOV R1,#NUM8_RAM ;置R1为第8个8字的字节地址 MOV DPTR,#NUMCODE1TAB ;表格段码为GEXDBXCX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第29个标志[L8]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z29_RAM ;第29个标志在标志缓冲区的字节位置 MOV R2,#Z29_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第29个标志的值,并送到R3 ;第30个标志[K8]送缓冲区 MOV B,#00000100B ;置当前标志的屏蔽码为00000100B MOV R1,#Z30_RAM ;第30个标志在标志缓冲区的字节位置 MOV R2,#Z30_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第30个标志的值,并送到R3 ;第40个标志[H8]送缓冲区 MOV B,#00000001B ;置当前标志的屏蔽码为00000001B MOV R1,#Z40_RAM ;第40个标志在标志缓冲区的字节位置 MOV R2,#Z40_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第40个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 ;LCDBUF+5 缓冲区第6个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为GEZDBZCZ位 ;第7个8字的GEDBC笔段送缓冲区 MOV B,#11011010B ;置当前8字的屏蔽码为GEXDBXCX MOV R1,#NUM7_RAM ;置R1为第7个8字的字节地址 MOV DPTR,#NUMCODE1TAB ;表格段码为GEXDBXCX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第25个标志[L7]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z25_RAM ;第25个标志在标志缓冲区的字节位置 MOV R2,#Z25_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第25个标志的值,并送到R3 ;第26个标志[K7]送缓冲区 MOV B,#00000100B ;置当前标志的屏蔽码为00000100B MOV R1,#Z26_RAM ;第26个标志在标志缓冲区的字节位置 MOV R2,#Z26_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第26个标志的值,并送到R3 ;第39个标志[H7]送缓冲区 MOV B,#00000001B ;置当前标志的屏蔽码为00000001B MOV R1,#Z39_RAM ;第39个标志在标志缓冲区的字节位置 MOV R2,#Z39_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第39个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 ;LCDBUF+6 缓冲区第7个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为GEZDBZCZ位 ;第6个8字的GEDBC笔段送缓冲区 MOV B,#11011010B ;置当前8字的屏蔽码为GEXDBXCX MOV R1,#NUM6_RAM ;置R1为第6个8字的字节地址 MOV DPTR,#NUMCODE1TAB ;表格段码为GEXDBXCX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第21个标志[L6]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z21_RAM ;第21个标志在标志缓冲区的字节位置 MOV R2,#Z21_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第21个标志的值,并送到R3 ;第22个标志[K6]送缓冲区 MOV B,#00000100B ;置当前标志的屏蔽码为00000100B MOV R1,#Z22_RAM ;第22个标志在标志缓冲区的字节位置 MOV R2,#Z22_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第22个标志的值,并送到R3 ;第38个标志[H6]送缓冲区 MOV B,#00000001B ;置当前标志的屏蔽码为00000001B MOV R1,#Z38_RAM ;第38个标志在标志缓冲区的字节位置 MOV R2,#Z38_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第38个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 ;LCDBUF+7 缓冲区第8个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为GEZDBZCZ位 ;第5个8字的GEDBC笔段送缓冲区 MOV B,#11011010B ;置当前8字的屏蔽码为GEXDBXCX MOV R1,#NUM5_RAM ;置R1为第5个8字的字节地址 MOV DPTR,#NUMCODE1TAB ;表格段码为GEXDBXCX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第17个标志[L5]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z17_RAM ;第17个标志在标志缓冲区的字节位置 MOV R2,#Z17_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第17个标志的值,并送到R3 ;第18个标志[K5]送缓冲区 MOV B,#00000100B ;置当前标志的屏蔽码为00000100B MOV R1,#Z18_RAM ;第18个标志在标志缓冲区的字节位置 MOV R2,#Z18_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第18个标志的值,并送到R3 ;第37个标志[H5]送缓冲区 MOV B,#00000001B ;置当前标志的屏蔽码为00000001B MOV R1,#Z37_RAM ;第37个标志在标志缓冲区的字节位置 MOV R2,#Z37_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第37个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 ;LCDBUF+8 缓冲区第9个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为GEZDBZCZ位 ;第4个8字的GEDBC笔段送缓冲区 MOV B,#11011010B ;置当前8字的屏蔽码为GEXDBXCX MOV R1,#NUM4_RAM ;置R1为第4个8字的字节地址 MOV DPTR,#NUMCODE1TAB ;表格段码为GEXDBXCX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第13个标志[L4]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z13_RAM ;第13个标志在标志缓冲区的字节位置 MOV R2,#Z13_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第13个标志的值,并送到R3 ;第14个标志[K4]送缓冲区 MOV B,#00000100B ;置当前标志的屏蔽码为00000100B MOV R1,#Z14_RAM ;第14个标志在标志缓冲区的字节位置 MOV R2,#Z14_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第14个标志的值,并送到R3 ;第36个标志[H4]送缓冲区 MOV B,#00000001B ;置当前标志的屏蔽码为00000001B MOV R1,#Z36_RAM ;第36个标志在标志缓冲区的字节位置 MOV R2,#Z36_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第36个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 ;LCDBUF+9 缓冲区第10个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为GEZDBZCZ位 ;第3个8字的GEDBC笔段送缓冲区 MOV B,#11011010B ;置当前8字的屏蔽码为GEXDBXCX MOV R1,#NUM3_RAM ;置R1为第3个8字的字节地址 MOV DPTR,#NUMCODE1TAB ;表格段码为GEXDBXCX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第9个标志[L3]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z9_RAM ;第9个标志在标志缓冲区的字节位置 MOV R2,#Z9_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第9个标志的值,并送到R3 ;第10个标志[K3]送缓冲区 MOV B,#00000100B ;置当前标志的屏蔽码为00000100B MOV R1,#Z10_RAM ;第10个标志在标志缓冲区的字节位置 MOV R2,#Z10_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第10个标志的值,并送到R3 ;第35个标志[H3]送缓冲区 MOV B,#00000001B ;置当前标志的屏蔽码为00000001B MOV R1,#Z35_RAM ;第35个标志在标志缓冲区的字节位置 MOV R2,#Z35_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第35个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 ;LCDBUF+10 缓冲区第11个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为GEZDBZCZ位 ;第2个8字的GEDBC笔段送缓冲区 MOV B,#11011010B ;置当前8字的屏蔽码为GEXDBXCX MOV R1,#NUM2_RAM ;置R1为第2个8字的字节地址 MOV DPTR,#NUMCODE1TAB ;表格段码为GEXDBXCX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第5个标志[L2]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z5_RAM ;第5个标志在标志缓冲区的字节位置 MOV R2,#Z5_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第5个标志的值,并送到R3 ;第6个标志[K2]送缓冲区 MOV B,#00000100B ;置当前标志的屏蔽码为00000100B MOV R1,#Z6_RAM ;第6个标志在标志缓冲区的字节位置 MOV R2,#Z6_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第6个标志的值,并送到R3 ;第34个标志[H2]送缓冲区 MOV B,#00000001B ;置当前标志的屏蔽码为00000001B MOV R1,#Z34_RAM ;第34个标志在标志缓冲区的字节位置 MOV R2,#Z34_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第34个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 ;LCDBUF+11 缓冲区第12个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为GEZDBZCZ位 ;第1个8字的GEDBC笔段送缓冲区 MOV B,#11011010B ;置当前8字的屏蔽码为GEXDBXCX MOV R1,#NUM1_RAM ;置R1为第1个8字的字节地址 MOV DPTR,#NUMCODE1TAB ;表格段码为GEXDBXCX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第1个标志[L1]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z1_RAM ;第1个标志在标志缓冲区的字节位置 MOV R2,#Z1_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第1个标志的值,并送到R3 ;第2个标志[K1]送缓冲区 MOV B,#00000100B ;置当前标志的屏蔽码为00000100B MOV R1,#Z2_RAM ;第2个标志在标志缓冲区的字节位置 MOV R2,#Z2_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第2个标志的值,并送到R3 ;第33个标志[H1]送缓冲区 MOV B,#00000001B ;置当前标志的屏蔽码为00000001B MOV R1,#Z33_RAM ;第33个标志在标志缓冲区的字节位置 MOV R2,#Z33_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第33个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 ;LCDBUF+12 缓冲区第13个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为ZFZAZFZA位 ;第1个8字的FA笔段送缓冲区 MOV B,#00000101B ;置当前8字的屏蔽码为XXXXXFXA MOV R1,#NUM1_RAM ;置R1为第1个8字的字节地址 MOV DPTR,#NUMCODE2TAB ;表格段码为XXXXXFXA CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第2个8字的FA笔段送缓冲区 MOV B,#01010000B ;置当前8字的屏蔽码为XFXAXXXX MOV R1,#NUM2_RAM ;置R1为第2个8字的字节地址 MOV DPTR,#NUMCODE3TAB ;表格段码为XFXAXXXX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第3个标志[I1]送缓冲区 MOV B,#00000010B ;置当前标志的屏蔽码为00000010B MOV R1,#Z3_RAM ;第3个标志在标志缓冲区的字节位置 MOV R2,#Z3_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第3个标志的值,并送到R3 ;第4个标志[J1]送缓冲区 MOV B,#00001000B ;置当前标志的屏蔽码为00001000B MOV R1,#Z4_RAM ;第4个标志在标志缓冲区的字节位置 MOV R2,#Z4_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第4个标志的值,并送到R3 ;第7个标志[I2]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z7_RAM ;第7个标志在标志缓冲区的字节位置 MOV R2,#Z7_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第7个标志的值,并送到R3 ;第8个标志[J2]送缓冲区 MOV B,#10000000B ;置当前标志的屏蔽码为10000000B MOV R1,#Z8_RAM ;第8个标志在标志缓冲区的字节位置 MOV R2,#Z8_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第8个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 ;LCDBUF+13 缓冲区第14个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为ZFZAZFZA位 ;第3个8字的FA笔段送缓冲区 MOV B,#00000101B ;置当前8字的屏蔽码为XXXXXFXA MOV R1,#NUM3_RAM ;置R1为第3个8字的字节地址 MOV DPTR,#NUMCODE2TAB ;表格段码为XXXXXFXA CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第4个8字的FA笔段送缓冲区 MOV B,#01010000B ;置当前8字的屏蔽码为XFXAXXXX MOV R1,#NUM4_RAM ;置R1为第4个8字的字节地址 MOV DPTR,#NUMCODE3TAB ;表格段码为XFXAXXXX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第11个标志[I3]送缓冲区 MOV B,#00000010B ;置当前标志的屏蔽码为00000010B MOV R1,#Z11_RAM ;第11个标志在标志缓冲区的字节位置 MOV R2,#Z11_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第11个标志的值,并送到R3 ;第12个标志[J3]送缓冲区 MOV B,#00001000B ;置当前标志的屏蔽码为00001000B MOV R1,#Z12_RAM ;第12个标志在标志缓冲区的字节位置 MOV R2,#Z12_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第12个标志的值,并送到R3 ;第15个标志[I4]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z15_RAM ;第15个标志在标志缓冲区的字节位置 MOV R2,#Z15_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第15个标志的值,并送到R3 ;第16个标志[J4]送缓冲区 MOV B,#10000000B ;置当前标志的屏蔽码为10000000B MOV R1,#Z16_RAM ;第16个标志在标志缓冲区的字节位置 MOV R2,#Z16_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第16个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 ;LCDBUF+14 缓冲区第15个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为ZFZAZFZA位 ;第5个8字的FA笔段送缓冲区 MOV B,#00000101B ;置当前8字的屏蔽码为XXXXXFXA MOV R1,#NUM5_RAM ;置R1为第5个8字的字节地址 MOV DPTR,#NUMCODE2TAB ;表格段码为XXXXXFXA CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第6个8字的FA笔段送缓冲区 MOV B,#01010000B ;置当前8字的屏蔽码为XFXAXXXX MOV R1,#NUM6_RAM ;置R1为第6个8字的字节地址 MOV DPTR,#NUMCODE3TAB ;表格段码为XFXAXXXX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第19个标志[I5]送缓冲区 MOV B,#00000010B ;置当前标志的屏蔽码为00000010B MOV R1,#Z19_RAM ;第19个标志在标志缓冲区的字节位置 MOV R2,#Z19_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第19个标志的值,并送到R3 ;第20个标志[J5]送缓冲区 MOV B,#00001000B ;置当前标志的屏蔽码为00001000B MOV R1,#Z20_RAM ;第20个标志在标志缓冲区的字节位置 MOV R2,#Z20_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第20个标志的值,并送到R3 ;第23个标志[I6]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z23_RAM ;第23个标志在标志缓冲区的字节位置 MOV R2,#Z23_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第23个标志的值,并送到R3 ;第24个标志[J6]送缓冲区 MOV B,#10000000B ;置当前标志的屏蔽码为10000000B MOV R1,#Z24_RAM ;第24个标志在标志缓冲区的字节位置 MOV R2,#Z24_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第24个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 ;LCDBUF+15 缓冲区第16个字节译码 MOV R3,#00000000B ;当前临时LCD缓冲区字节数据初始值 ;需译码的BIT为ZFZAZFZA位 ;第7个8字的FA笔段送缓冲区 MOV B,#00000101B ;置当前8字的屏蔽码为XXXXXFXA MOV R1,#NUM7_RAM ;置R1为第7个8字的字节地址 MOV DPTR,#NUMCODE2TAB ;表格段码为XXXXXFXA CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第8个8字的FA笔段送缓冲区 MOV B,#01010000B ;置当前8字的屏蔽码为XFXAXXXX MOV R1,#NUM8_RAM ;置R1为第8个8字的字节地址 MOV DPTR,#NUMCODE3TAB ;表格段码为XFXAXXXX CALL MASKGETNUMCODE ;查表得到8字段码屏蔽后的值,并送到R3 ;第27个标志[I7]送缓冲区 MOV B,#00000010B ;置当前标志的屏蔽码为00000010B MOV R1,#Z27_RAM ;第27个标志在标志缓冲区的字节位置 MOV R2,#Z27_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第27个标志的值,并送到R3 ;第28个标志[J7]送缓冲区 MOV B,#00001000B ;置当前标志的屏蔽码为00001000B MOV R1,#Z28_RAM ;第28个标志在标志缓冲区的字节位置 MOV R2,#Z28_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第28个标志的值,并送到R3 ;第31个标志[I8]送缓冲区 MOV B,#00100000B ;置当前标志的屏蔽码为00100000B MOV R1,#Z31_RAM ;第31个标志在标志缓冲区的字节位置 MOV R2,#Z31_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第31个标志的值,并送到R3 ;第32个标志[J8]送缓冲区 MOV B,#10000000B ;置当前标志的屏蔽码为10000000B MOV R1,#Z32_RAM ;第32个标志在标志缓冲区的字节位置 MOV R2,#Z32_BMASK ;置当前标志在当前标志缓冲区字节的位屏蔽码 CALL MASKGETZ ;得到第32个标志的值,并送到R3 MOV A,R3 ;将当前临时LCD缓冲区字节数据 CALL TRANSBYTE ;送LCD液晶显示控制器中 RET ;------------------------------------------------------------------------------- ;以下MASKGETNUMCODE,MASKGETNUMSEG,MASKGETZ三个子程序,专供程序DECODETOLCD调用 ;------------------------------------------------------------------------------- MASKGETNUMCODE: ;数字查表并按LCDBUF屏蔽码相与得到结果的 ;子程序 MOV A,@R1 ;NUM_RAM内容译码 MOVC A,@A+DPTR ANL A,B ;和数字屏蔽码B相与 ORL A,R3 ;送到LCD临时缓冲字节中 MOV R3,A RET MASKGETNUMSEG: ;数字查表并按数字字段屏蔽码相与后,再得到 ;是否为LCDBIT屏蔽码的子程序 MOV A,@R1 ;NUM内容译码 MOVC A,@A+DPTR ANL A,R2 ;和数字字段屏蔽码相与 JZ MGS_LAX MOV A,B ;SEG为1则置A为LCDBIT屏蔽码的值 ORL A,R3 ;送到LCD临时缓冲字节中 MOV R3,A MGS_LAX: RET MASKGETZ: ;标志字节按数字字段屏蔽码相与后,再得到 ;是否为LCDBIT屏蔽码的子程序 MOV A,@R1 ;读当前标志的Z_RAM字节内容 ANL A,R2 ;R2为当前标志Z_BMASK的位屏蔽码 JZ MGZ_LAX MOV A,B ;标志为1则置A为LCDBIT屏蔽码的值 MGZ_LAX: ORL A,R3 ;送到LCD临时缓冲字节中 MOV R3,A RET ;------------------------------------------------------------------------------- ;以下TRANSRAM,TRANSBYTE,LCDSLEEP为三线式串行硬件接口(B型)的基本子程序,TRANSBIT, ;LCDWC为内部子程序. ;------------------------------------------------------------------------------- ;子程序名称:TRANSRAM(). ;功能:LCD显示刷新. ;输入:无. ;输出:无. ;影响:R0,ACC. ;修改日期:2009.08.07 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- CMDOFF EQU 0 ;控制器掉电(控制字) CMDON EQU 80H ;控制器上电(控制字) CMDLCDOFF EQU 40H ;控制器液晶关闭(控制字) CMDLCDON EQU 0C0H ;控制器液晶显示(控制字) CMDB3C4 EQU 94H ;控制器液晶模式设置(控制字) TRANSRAM: ;LCD显示刷新子程序 ;显示模式设置 MOV A,#CMDOFF ;将液晶显示控制器关闭后打开 CALL LCDWC ;再置显示模式为1/3偏压,1/4占空比 MOV A,#CMDLCDOFF CALL LCDWC MOV A,#CMDON CALL LCDWC MOV A,#CMDLCDON CALL LCDWC MOV A,#CMDB3C4 CALL LCDWC ;送数据前准备操作 SETB CSPIN ;CSPIN执行一个下降沿 CLR CSPIN ; SETB C CALL TRANSBIT ;数据连续先送101000000系列后再开始送数 MOV A,#02H CALL TRANSBYTE ;开始送数 CALL DECODETOLCD ;按地址映射表字节顺序,所有数据译码后送 ;LCD液晶显示控制器 SETB CSPIN ;送数完成后将CSPIN置为高电平 RET ;------------------------------------------------------------------------------- ;子程序名称:LCDWC(A). ;功能:送控制字到液晶显示控制器. ;输入:A. ;输出:无. ;影响:R0. ;修改日期:2009.08.07 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- LCDWC: ;送控制字到液晶显示控制器子程序 SETB CSPIN ;CSPIN执行一个下降沿 CLR CSPIN SETB C ;送100序列 CALL TRANSBIT CLR C CALL TRANSBIT CALL TRANSBIT CALL TRANSBYTE ;送控制字 CLR C ;送1位0 CALL TRANSBIT SETB CSPIN ;送数完成后将CSPIN置为高电平 RET ;------------------------------------------------------------------------------- ;子程序名称:LCDSLEEP(). ;功能:液晶显示控制器进入睡眠来减少功耗. ;输入:无. ;输出:无. ;影响:R0,ACC. ;修改日期:2009.08.07 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- LCDSLEEP: ;液晶显示控制器进入睡眠来减少功耗子程序 MOV A,#CMDLCDOFF ;将液晶显示关闭 CALL LCDWC MOV A,#CMDOFF ;LCD液晶显示控制器进入睡眠状态,此时LCD CALL LCDWC ;液晶显示控制器的电流小于1uA RET ;------------------------------------------------------------------------------- ;子程序名称:TRANSBYTE(). ;功能:送1字节数据到液晶显示控制器. ;输入:ACC. ;输出:无. ;影响:R0. ;修改日期:2009.08.07 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- TRANSBYTE: ;送1字节数据到液晶显示控制器子程序 MOV R0,#8 TSB_PA: RRC A CALL TRANSBIT DJNZ R0,TSB_PA RRC A RET ;------------------------------------------------------------------------------- ;子程序名称:TRANSBIT(). ;功能:送1位数据到液晶显示控制器. ;输入:C. ;输出:无. ;影响:无. ;修改日期:2009.08.07 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- TRANSBIT: ;送1位数据到液晶显示控制器子程序 MOV DIPIN,C ;先送数据到数据口线DI NOP NOP SETB CLKPIN ;再使时钟口线发一个负脉冲 NOP NOP CLR CLKPIN NOP NOP SETB CLKPIN NOP NOP SETB DIPIN ;将DI口线置为高,可以减少芯片上拉电阻的耗电 RET