//SMS0818数码笔段型液晶显示模块的演示程序[C51] // 本演示程序是在SMS0818软件接口子程序集基础上开发出来的.通过简单设置SMS0818中显 //示对象Num1..Num8数字及Z1..Z67标志,调用transram程序,就可以将要显示的数字及相应的 //标志在SMS0818数码笔段型液晶显示模块上显示出来.通过使用本程序,加深理解SMS0818软 //件接口子程序的使用方法,以及使用的的简洁性,用户上层程序的可移植性. // 本演示的内容为,在SMS0818液晶显示屏中所有数字显示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/SMS0818.html //------------------------------------------------------------------------------- #include #include //以下为演示程序的函数定义 void exsample(void); //演示程序 void exdelay(void); //演示延时子程序 void numfill(unsigned char d); //所有数字填充子程序 void zfill(bit d); //所有Z标志填充子程序 void decodetolcd(void); //液晶显示控制器译码子程序 void transram(void); //LCD显示刷新子程序 void lcdwc(unsigned char c); //送控制字到液晶显示控制器子程序 void lcdsleep(void); //LCD液晶显示控制器进入睡眠状态子程序 void transbyte(unsigned char d); //送1字节数据到液晶显示控制器子程序 void transbit(bit d); //送1位数据到液晶显示控制器子程序 //------------------------------------------------------------------------------- //SMS0818产品引脚说明 //PIN1: VDD [电源正极] //PIN2: VSS [电源地] //PIN3: DI [串行数据输入] //PIN4: CLK [串行移位脉冲输入] //PIN5: CS [片选信号输入] //------------------------------------------------------------------------------- //以下为产品接口引脚在演示程序中的预定义 //用户在编写应用程序时,需按自己的实际硬件连线来重新定义 sbit DIPIN = P1^2; //DI对应单片机引脚 sbit CLKPIN = P1^3; //CLK对应单片机引脚 sbit CSPIN = P1^4; //CS对应单片机引脚 //------------------------------------------------------------------------------- //以下Num1_Ram至Num8_Ram为数字1至8在演示程序中的RAM地址预定义 //用户在编写应用程序时,需按自己的实际软件程序需要来重新定义 #define NUMBERS 8 //显示数字的个数 unsigned char Num1_Ram; //数字1 unsigned char Num2_Ram; //数字2 unsigned char Num3_Ram; //数字3 unsigned char Num4_Ram; //数字4 unsigned char Num5_Ram; //数字5 unsigned char Num6_Ram; //数字6 unsigned char Num7_Ram; //数字7 unsigned char Num8_Ram; //数字8 //------------------------------------------------------------------------------- //以下Z1_Ram至Z67_Ram,Z1_BMASK至Z67_BMASK为Z标志1至67在演示程序中的RAM及BIT的预定义 //用户在编写应用程序时,需按自己的实际软件程序需要来重新定义 #define ZNUMBERS 67 //显示标志的个数 unsigned char Z1_Ram _at_ 0x28; //Z1[T1] #define Z1_BMASK 0x01 //[Z1_Ram].0 unsigned char Z2_Ram _at_ 0x28; //Z2[T2] #define Z2_BMASK 0x02 //[Z2_Ram].1 unsigned char Z3_Ram _at_ 0x28; //Z3[T3] #define Z3_BMASK 0x04 //[Z3_Ram].2 unsigned char Z4_Ram _at_ 0x28; //Z4[T4] #define Z4_BMASK 0x08 //[Z4_Ram].3 unsigned char Z5_Ram _at_ 0x28; //Z5[T5] #define Z5_BMASK 0x10 //[Z5_Ram].4 unsigned char Z6_Ram _at_ 0x28; //Z6[余量] #define Z6_BMASK 0x20 //[Z6_Ram].5 unsigned char Z7_Ram _at_ 0x28; //Z7[插卡] #define Z7_BMASK 0x40 //[Z7_Ram].6 unsigned char Z8_Ram _at_ 0x28; //Z8[缺相] #define Z8_BMASK 0x80 //[Z8_Ram].7 unsigned char Z9_Ram _at_ 0x29; //Z9[尖峰] #define Z9_BMASK 0x01 //[Z9_Ram].0 unsigned char Z10_Ram _at_ 0x29; //Z10[功率] #define Z10_BMASK 0x02 //[Z10_Ram].1 unsigned char Z11_Ram _at_ 0x29; //Z11[编号] #define Z11_BMASK 0x04 //[Z11_Ram].2 unsigned char Z12_Ram _at_ 0x29; //Z12[故障] #define Z12_BMASK 0x08 //[Z12_Ram].3 unsigned char Z13_Ram _at_ 0x29; //Z13[平谷] #define Z13_BMASK 0x10 //[Z13_Ram].4 unsigned char Z14_Ram _at_ 0x29; //Z14[kW] #define Z14_BMASK 0x20 //[Z14_Ram].5 unsigned char Z15_Ram _at_ 0x29; //Z15[.h] #define Z15_BMASK 0x40 //[Z15_Ram].6 unsigned char Z16_Ram _at_ 0x29; //Z16[S1] #define Z16_BMASK 0x80 //[Z16_Ram].7 unsigned char Z17_Ram _at_ 0x2A; //Z17[S2] #define Z17_BMASK 0x01 //[Z17_Ram].0 unsigned char Z18_Ram _at_ 0x2A; //Z18[S3] #define Z18_BMASK 0x02 //[Z18_Ram].1 unsigned char Z19_Ram _at_ 0x2A; //Z19[S4] #define Z19_BMASK 0x04 //[Z19_Ram].2 unsigned char Z20_Ram _at_ 0x2A; //Z20[S5] #define Z20_BMASK 0x08 //[Z20_Ram].3 unsigned char Z21_Ram _at_ 0x2A; //Z21[S6] #define Z21_BMASK 0x10 //[Z21_Ram].4 unsigned char Z22_Ram _at_ 0x2A; //Z22[S7] #define Z22_BMASK 0x20 //[Z22_Ram].5 unsigned char Z23_Ram _at_ 0x2A; //Z23[S8] #define Z23_BMASK 0x40 //[Z23_Ram].6 unsigned char Z24_Ram _at_ 0x2A; //Z24[S9] #define Z24_BMASK 0x80 //[Z24_Ram].7 unsigned char Z25_Ram _at_ 0x2B; //Z25[S10] #define Z25_BMASK 0x01 //[Z25_Ram].0 unsigned char Z26_Ram _at_ 0x2B; //Z26[S11] #define Z26_BMASK 0x02 //[Z26_Ram].1 unsigned char Z27_Ram _at_ 0x2B; //Z27[S12] #define Z27_BMASK 0x04 //[Z27_Ram].2 unsigned char Z28_Ram _at_ 0x2B; //Z28[S13] #define Z28_BMASK 0x08 //[Z28_Ram].3 unsigned char Z29_Ram _at_ 0x2B; //Z29[S14] #define Z29_BMASK 0x10 //[Z29_Ram].4 unsigned char Z30_Ram _at_ 0x2B; //Z30[S15] #define Z30_BMASK 0x20 //[Z30_Ram].5 unsigned char Z31_Ram _at_ 0x2B; //Z31[S16] #define Z31_BMASK 0x40 //[Z31_Ram].6 unsigned char Z32_Ram _at_ 0x2B; //Z32[S17] #define Z32_BMASK 0x80 //[Z32_Ram].7 unsigned char Z33_Ram _at_ 0x2C; //Z33[S18] #define Z33_BMASK 0x01 //[Z33_Ram].0 unsigned char Z34_Ram _at_ 0x2C; //Z34[S19] #define Z34_BMASK 0x02 //[Z34_Ram].1 unsigned char Z35_Ram _at_ 0x2C; //Z35[S20] #define Z35_BMASK 0x04 //[Z35_Ram].2 unsigned char Z36_Ram _at_ 0x2C; //Z36[S21] #define Z36_BMASK 0x08 //[Z36_Ram].3 unsigned char Z37_Ram _at_ 0x2C; //Z37[S22] #define Z37_BMASK 0x10 //[Z37_Ram].4 unsigned char Z38_Ram _at_ 0x2C; //Z38[S23] #define Z38_BMASK 0x20 //[Z38_Ram].5 unsigned char Z39_Ram _at_ 0x2C; //Z39[S24] #define Z39_BMASK 0x40 //[Z39_Ram].6 unsigned char Z40_Ram _at_ 0x2C; //Z40[S25] #define Z40_BMASK 0x80 //[Z40_Ram].7 unsigned char Z41_Ram _at_ 0x2D; //Z41[S26] #define Z41_BMASK 0x01 //[Z41_Ram].0 unsigned char Z42_Ram _at_ 0x2D; //Z42[S27] #define Z42_BMASK 0x02 //[Z42_Ram].1 unsigned char Z43_Ram _at_ 0x2D; //Z43[S28] #define Z43_BMASK 0x04 //[Z43_Ram].2 unsigned char Z44_Ram _at_ 0x2D; //Z44[S29] #define Z44_BMASK 0x08 //[Z44_Ram].3 unsigned char Z45_Ram _at_ 0x2D; //Z45[S30] #define Z45_BMASK 0x10 //[Z45_Ram].4 unsigned char Z46_Ram _at_ 0x2D; //Z46[S31] #define Z46_BMASK 0x20 //[Z46_Ram].5 unsigned char Z47_Ram _at_ 0x2D; //Z47[S32] #define Z47_BMASK 0x40 //[Z47_Ram].6 unsigned char Z48_Ram _at_ 0x2D; //Z48[S33] #define Z48_BMASK 0x80 //[Z48_Ram].7 unsigned char Z49_Ram _at_ 0x2E; //Z49[S34] #define Z49_BMASK 0x01 //[Z49_Ram].0 unsigned char Z50_Ram _at_ 0x2E; //Z50[S35] #define Z50_BMASK 0x02 //[Z50_Ram].1 unsigned char Z51_Ram _at_ 0x2E; //Z51[S36] #define Z51_BMASK 0x04 //[Z51_Ram].2 unsigned char Z52_Ram _at_ 0x2E; //Z52[S37] #define Z52_BMASK 0x08 //[Z52_Ram].3 unsigned char Z53_Ram _at_ 0x2E; //Z53[S38] #define Z53_BMASK 0x10 //[Z53_Ram].4 unsigned char Z54_Ram _at_ 0x2E; //Z54[S39] #define Z54_BMASK 0x20 //[Z54_Ram].5 unsigned char Z55_Ram _at_ 0x2E; //Z55[S40] #define Z55_BMASK 0x40 //[Z55_Ram].6 unsigned char Z56_Ram _at_ 0x2E; //Z56[S41] #define Z56_BMASK 0x80 //[Z56_Ram].7 unsigned char Z57_Ram _at_ 0x2F; //Z57[S42] #define Z57_BMASK 0x01 //[Z57_Ram].0 unsigned char Z58_Ram _at_ 0x2F; //Z58[S43] #define Z58_BMASK 0x02 //[Z58_Ram].1 unsigned char Z59_Ram _at_ 0x2F; //Z59[S44] #define Z59_BMASK 0x04 //[Z59_Ram].2 unsigned char Z60_Ram _at_ 0x2F; //Z60[S45] #define Z60_BMASK 0x08 //[Z60_Ram].3 unsigned char Z61_Ram _at_ 0x2F; //Z61[S46] #define Z61_BMASK 0x10 //[Z61_Ram].4 unsigned char Z62_Ram _at_ 0x2F; //Z62[S47] #define Z62_BMASK 0x20 //[Z62_Ram].5 unsigned char Z63_Ram _at_ 0x2F; //Z63[S48] #define Z63_BMASK 0x40 //[Z63_Ram].6 unsigned char Z64_Ram _at_ 0x2F; //Z64[S49] #define Z64_BMASK 0x80 //[Z64_Ram].7 unsigned char Z65_Ram _at_ 0x30; //Z65[S50] #define Z65_BMASK 0x01 //[Z65_Ram].0 unsigned char Z66_Ram _at_ 0x30; //Z66[S51] #define Z66_BMASK 0x02 //[Z66_Ram].1 unsigned char Z67_Ram _at_ 0x30; //Z67[H6] #define Z67_BMASK 0x04 //[Z67_Ram].2 //------------------------------------------------------------------------------- void main(void) //主程序 { while(1) { exsample(); //调用演示程序 } } void exsample(void) //演示程序 { unsigned char i; //0.演示前的准备,将LCD液晶显示所有标志及数字全清零 zfill(0); //所有Z标志清零 numfill(0); //所有数字清零 //1.数字演示: 所有数字显示0..9 空格一遍 for(i=0;i<11;i++) { numfill(i); //数字缓冲区全部填充为i的值 transram(); //LCD显示刷新 exdelay(); //延时300mS } //2.数字演示: 所有数字依次显示8 Num1_Ram=8; //数字1显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num2_Ram=8; //数字2显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num3_Ram=8; //数字3显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num4_Ram=8; //数字4显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num5_Ram=8; //数字5显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num6_Ram=8; //数字6显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num7_Ram=8; //数字7显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num8_Ram=8; //数字8显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS //3.标志演示: 所有标志依次显示 Z1_Ram|=Z1_BMASK; //Z1:T1 transram(); //LCD显示刷新 exdelay(); //延时300mS Z2_Ram|=Z2_BMASK; //Z2:T2 transram(); //LCD显示刷新 exdelay(); //延时300mS Z3_Ram|=Z3_BMASK; //Z3:T3 transram(); //LCD显示刷新 exdelay(); //延时300mS Z4_Ram|=Z4_BMASK; //Z4:T4 transram(); //LCD显示刷新 exdelay(); //延时300mS Z5_Ram|=Z5_BMASK; //Z5:T5 transram(); //LCD显示刷新 exdelay(); //延时300mS Z6_Ram|=Z6_BMASK; //Z6:余量 transram(); //LCD显示刷新 exdelay(); //延时300mS Z7_Ram|=Z7_BMASK; //Z7:插卡 transram(); //LCD显示刷新 exdelay(); //延时300mS Z8_Ram|=Z8_BMASK; //Z8:缺相 transram(); //LCD显示刷新 exdelay(); //延时300mS Z9_Ram|=Z9_BMASK; //Z9:尖峰 transram(); //LCD显示刷新 exdelay(); //延时300mS Z10_Ram|=Z10_BMASK; //Z10:功率 transram(); //LCD显示刷新 exdelay(); //延时300mS Z11_Ram|=Z11_BMASK; //Z11:编号 transram(); //LCD显示刷新 exdelay(); //延时300mS Z12_Ram|=Z12_BMASK; //Z12:故障 transram(); //LCD显示刷新 exdelay(); //延时300mS Z13_Ram|=Z13_BMASK; //Z13:平谷 transram(); //LCD显示刷新 exdelay(); //延时300mS Z14_Ram|=Z14_BMASK; //Z14:kW transram(); //LCD显示刷新 exdelay(); //延时300mS Z15_Ram|=Z15_BMASK; //Z15:.h transram(); //LCD显示刷新 exdelay(); //延时300mS Z16_Ram|=Z16_BMASK; //Z16:S1 transram(); //LCD显示刷新 exdelay(); //延时300mS Z17_Ram|=Z17_BMASK; //Z17:S2 transram(); //LCD显示刷新 exdelay(); //延时300mS Z18_Ram|=Z18_BMASK; //Z18:S3 transram(); //LCD显示刷新 exdelay(); //延时300mS Z19_Ram|=Z19_BMASK; //Z19:S4 transram(); //LCD显示刷新 exdelay(); //延时300mS Z20_Ram|=Z20_BMASK; //Z20:S5 transram(); //LCD显示刷新 exdelay(); //延时300mS Z21_Ram|=Z21_BMASK; //Z21:S6 transram(); //LCD显示刷新 exdelay(); //延时300mS Z22_Ram|=Z22_BMASK; //Z22:S7 transram(); //LCD显示刷新 exdelay(); //延时300mS Z23_Ram|=Z23_BMASK; //Z23:S8 transram(); //LCD显示刷新 exdelay(); //延时300mS Z24_Ram|=Z24_BMASK; //Z24:S9 transram(); //LCD显示刷新 exdelay(); //延时300mS Z25_Ram|=Z25_BMASK; //Z25:S10 transram(); //LCD显示刷新 exdelay(); //延时300mS Z26_Ram|=Z26_BMASK; //Z26:S11 transram(); //LCD显示刷新 exdelay(); //延时300mS Z27_Ram|=Z27_BMASK; //Z27:S12 transram(); //LCD显示刷新 exdelay(); //延时300mS Z28_Ram|=Z28_BMASK; //Z28:S13 transram(); //LCD显示刷新 exdelay(); //延时300mS Z29_Ram|=Z29_BMASK; //Z29:S14 transram(); //LCD显示刷新 exdelay(); //延时300mS Z30_Ram|=Z30_BMASK; //Z30:S15 transram(); //LCD显示刷新 exdelay(); //延时300mS Z31_Ram|=Z31_BMASK; //Z31:S16 transram(); //LCD显示刷新 exdelay(); //延时300mS Z32_Ram|=Z32_BMASK; //Z32:S17 transram(); //LCD显示刷新 exdelay(); //延时300mS Z33_Ram|=Z33_BMASK; //Z33:S18 transram(); //LCD显示刷新 exdelay(); //延时300mS Z34_Ram|=Z34_BMASK; //Z34:S19 transram(); //LCD显示刷新 exdelay(); //延时300mS Z35_Ram|=Z35_BMASK; //Z35:S20 transram(); //LCD显示刷新 exdelay(); //延时300mS Z36_Ram|=Z36_BMASK; //Z36:S21 transram(); //LCD显示刷新 exdelay(); //延时300mS Z37_Ram|=Z37_BMASK; //Z37:S22 transram(); //LCD显示刷新 exdelay(); //延时300mS Z38_Ram|=Z38_BMASK; //Z38:S23 transram(); //LCD显示刷新 exdelay(); //延时300mS Z39_Ram|=Z39_BMASK; //Z39:S24 transram(); //LCD显示刷新 exdelay(); //延时300mS Z40_Ram|=Z40_BMASK; //Z40:S25 transram(); //LCD显示刷新 exdelay(); //延时300mS Z41_Ram|=Z41_BMASK; //Z41:S26 transram(); //LCD显示刷新 exdelay(); //延时300mS Z42_Ram|=Z42_BMASK; //Z42:S27 transram(); //LCD显示刷新 exdelay(); //延时300mS Z43_Ram|=Z43_BMASK; //Z43:S28 transram(); //LCD显示刷新 exdelay(); //延时300mS Z44_Ram|=Z44_BMASK; //Z44:S29 transram(); //LCD显示刷新 exdelay(); //延时300mS Z45_Ram|=Z45_BMASK; //Z45:S30 transram(); //LCD显示刷新 exdelay(); //延时300mS Z46_Ram|=Z46_BMASK; //Z46:S31 transram(); //LCD显示刷新 exdelay(); //延时300mS Z47_Ram|=Z47_BMASK; //Z47:S32 transram(); //LCD显示刷新 exdelay(); //延时300mS Z48_Ram|=Z48_BMASK; //Z48:S33 transram(); //LCD显示刷新 exdelay(); //延时300mS Z49_Ram|=Z49_BMASK; //Z49:S34 transram(); //LCD显示刷新 exdelay(); //延时300mS Z50_Ram|=Z50_BMASK; //Z50:S35 transram(); //LCD显示刷新 exdelay(); //延时300mS Z51_Ram|=Z51_BMASK; //Z51:S36 transram(); //LCD显示刷新 exdelay(); //延时300mS Z52_Ram|=Z52_BMASK; //Z52:S37 transram(); //LCD显示刷新 exdelay(); //延时300mS Z53_Ram|=Z53_BMASK; //Z53:S38 transram(); //LCD显示刷新 exdelay(); //延时300mS Z54_Ram|=Z54_BMASK; //Z54:S39 transram(); //LCD显示刷新 exdelay(); //延时300mS Z55_Ram|=Z55_BMASK; //Z55:S40 transram(); //LCD显示刷新 exdelay(); //延时300mS Z56_Ram|=Z56_BMASK; //Z56:S41 transram(); //LCD显示刷新 exdelay(); //延时300mS Z57_Ram|=Z57_BMASK; //Z57:S42 transram(); //LCD显示刷新 exdelay(); //延时300mS Z58_Ram|=Z58_BMASK; //Z58:S43 transram(); //LCD显示刷新 exdelay(); //延时300mS Z59_Ram|=Z59_BMASK; //Z59:S44 transram(); //LCD显示刷新 exdelay(); //延时300mS Z60_Ram|=Z60_BMASK; //Z60:S45 transram(); //LCD显示刷新 exdelay(); //延时300mS Z61_Ram|=Z61_BMASK; //Z61:S46 transram(); //LCD显示刷新 exdelay(); //延时300mS Z62_Ram|=Z62_BMASK; //Z62:S47 transram(); //LCD显示刷新 exdelay(); //延时300mS Z63_Ram|=Z63_BMASK; //Z63:S48 transram(); //LCD显示刷新 exdelay(); //延时300mS Z64_Ram|=Z64_BMASK; //Z64:S49 transram(); //LCD显示刷新 exdelay(); //延时300mS Z65_Ram|=Z65_BMASK; //Z65:S50 transram(); //LCD显示刷新 exdelay(); //延时300mS Z66_Ram|=Z66_BMASK; //Z66:S51 transram(); //LCD显示刷新 exdelay(); //延时300mS Z67_Ram|=Z67_BMASK; //Z67:H6 transram(); //LCD显示刷新 exdelay(); //延时300mS //4.数字演示: 所有数字重复显示0..9 空格一遍 for(i=0;i<11;i++) { numfill(i); //数字缓冲区全部填充为i的值 transram(); //LCD显示刷新 exdelay(); //延时300mS } //5.数字演示: 所有数字依次显示8 Num1_Ram=8; //数字1显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num2_Ram=8; //数字2显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num3_Ram=8; //数字3显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num4_Ram=8; //数字4显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num5_Ram=8; //数字5显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num6_Ram=8; //数字6显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num7_Ram=8; //数字7显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS Num8_Ram=8; //数字8显示8 transram(); //LCD显示刷新 exdelay(); //延时300mS //6.标志演示: 所有标志依次隐藏 Z1_Ram&=(0xff-Z1_BMASK); //Z1:T1 transram(); //LCD显示刷新 exdelay(); //延时300mS Z2_Ram&=(0xff-Z2_BMASK); //Z2:T2 transram(); //LCD显示刷新 exdelay(); //延时300mS Z3_Ram&=(0xff-Z3_BMASK); //Z3:T3 transram(); //LCD显示刷新 exdelay(); //延时300mS Z4_Ram&=(0xff-Z4_BMASK); //Z4:T4 transram(); //LCD显示刷新 exdelay(); //延时300mS Z5_Ram&=(0xff-Z5_BMASK); //Z5:T5 transram(); //LCD显示刷新 exdelay(); //延时300mS Z6_Ram&=(0xff-Z6_BMASK); //Z6:余量 transram(); //LCD显示刷新 exdelay(); //延时300mS Z7_Ram&=(0xff-Z7_BMASK); //Z7:插卡 transram(); //LCD显示刷新 exdelay(); //延时300mS Z8_Ram&=(0xff-Z8_BMASK); //Z8:缺相 transram(); //LCD显示刷新 exdelay(); //延时300mS Z9_Ram&=(0xff-Z9_BMASK); //Z9:尖峰 transram(); //LCD显示刷新 exdelay(); //延时300mS Z10_Ram&=(0xff-Z10_BMASK); //Z10:功率 transram(); //LCD显示刷新 exdelay(); //延时300mS Z11_Ram&=(0xff-Z11_BMASK); //Z11:编号 transram(); //LCD显示刷新 exdelay(); //延时300mS Z12_Ram&=(0xff-Z12_BMASK); //Z12:故障 transram(); //LCD显示刷新 exdelay(); //延时300mS Z13_Ram&=(0xff-Z13_BMASK); //Z13:平谷 transram(); //LCD显示刷新 exdelay(); //延时300mS Z14_Ram&=(0xff-Z14_BMASK); //Z14:kW transram(); //LCD显示刷新 exdelay(); //延时300mS Z15_Ram&=(0xff-Z15_BMASK); //Z15:.h transram(); //LCD显示刷新 exdelay(); //延时300mS Z16_Ram&=(0xff-Z16_BMASK); //Z16:S1 transram(); //LCD显示刷新 exdelay(); //延时300mS Z17_Ram&=(0xff-Z17_BMASK); //Z17:S2 transram(); //LCD显示刷新 exdelay(); //延时300mS Z18_Ram&=(0xff-Z18_BMASK); //Z18:S3 transram(); //LCD显示刷新 exdelay(); //延时300mS Z19_Ram&=(0xff-Z19_BMASK); //Z19:S4 transram(); //LCD显示刷新 exdelay(); //延时300mS Z20_Ram&=(0xff-Z20_BMASK); //Z20:S5 transram(); //LCD显示刷新 exdelay(); //延时300mS Z21_Ram&=(0xff-Z21_BMASK); //Z21:S6 transram(); //LCD显示刷新 exdelay(); //延时300mS Z22_Ram&=(0xff-Z22_BMASK); //Z22:S7 transram(); //LCD显示刷新 exdelay(); //延时300mS Z23_Ram&=(0xff-Z23_BMASK); //Z23:S8 transram(); //LCD显示刷新 exdelay(); //延时300mS Z24_Ram&=(0xff-Z24_BMASK); //Z24:S9 transram(); //LCD显示刷新 exdelay(); //延时300mS Z25_Ram&=(0xff-Z25_BMASK); //Z25:S10 transram(); //LCD显示刷新 exdelay(); //延时300mS Z26_Ram&=(0xff-Z26_BMASK); //Z26:S11 transram(); //LCD显示刷新 exdelay(); //延时300mS Z27_Ram&=(0xff-Z27_BMASK); //Z27:S12 transram(); //LCD显示刷新 exdelay(); //延时300mS Z28_Ram&=(0xff-Z28_BMASK); //Z28:S13 transram(); //LCD显示刷新 exdelay(); //延时300mS Z29_Ram&=(0xff-Z29_BMASK); //Z29:S14 transram(); //LCD显示刷新 exdelay(); //延时300mS Z30_Ram&=(0xff-Z30_BMASK); //Z30:S15 transram(); //LCD显示刷新 exdelay(); //延时300mS Z31_Ram&=(0xff-Z31_BMASK); //Z31:S16 transram(); //LCD显示刷新 exdelay(); //延时300mS Z32_Ram&=(0xff-Z32_BMASK); //Z32:S17 transram(); //LCD显示刷新 exdelay(); //延时300mS Z33_Ram&=(0xff-Z33_BMASK); //Z33:S18 transram(); //LCD显示刷新 exdelay(); //延时300mS Z34_Ram&=(0xff-Z34_BMASK); //Z34:S19 transram(); //LCD显示刷新 exdelay(); //延时300mS Z35_Ram&=(0xff-Z35_BMASK); //Z35:S20 transram(); //LCD显示刷新 exdelay(); //延时300mS Z36_Ram&=(0xff-Z36_BMASK); //Z36:S21 transram(); //LCD显示刷新 exdelay(); //延时300mS Z37_Ram&=(0xff-Z37_BMASK); //Z37:S22 transram(); //LCD显示刷新 exdelay(); //延时300mS Z38_Ram&=(0xff-Z38_BMASK); //Z38:S23 transram(); //LCD显示刷新 exdelay(); //延时300mS Z39_Ram&=(0xff-Z39_BMASK); //Z39:S24 transram(); //LCD显示刷新 exdelay(); //延时300mS Z40_Ram&=(0xff-Z40_BMASK); //Z40:S25 transram(); //LCD显示刷新 exdelay(); //延时300mS Z41_Ram&=(0xff-Z41_BMASK); //Z41:S26 transram(); //LCD显示刷新 exdelay(); //延时300mS Z42_Ram&=(0xff-Z42_BMASK); //Z42:S27 transram(); //LCD显示刷新 exdelay(); //延时300mS Z43_Ram&=(0xff-Z43_BMASK); //Z43:S28 transram(); //LCD显示刷新 exdelay(); //延时300mS Z44_Ram&=(0xff-Z44_BMASK); //Z44:S29 transram(); //LCD显示刷新 exdelay(); //延时300mS Z45_Ram&=(0xff-Z45_BMASK); //Z45:S30 transram(); //LCD显示刷新 exdelay(); //延时300mS Z46_Ram&=(0xff-Z46_BMASK); //Z46:S31 transram(); //LCD显示刷新 exdelay(); //延时300mS Z47_Ram&=(0xff-Z47_BMASK); //Z47:S32 transram(); //LCD显示刷新 exdelay(); //延时300mS Z48_Ram&=(0xff-Z48_BMASK); //Z48:S33 transram(); //LCD显示刷新 exdelay(); //延时300mS Z49_Ram&=(0xff-Z49_BMASK); //Z49:S34 transram(); //LCD显示刷新 exdelay(); //延时300mS Z50_Ram&=(0xff-Z50_BMASK); //Z50:S35 transram(); //LCD显示刷新 exdelay(); //延时300mS Z51_Ram&=(0xff-Z51_BMASK); //Z51:S36 transram(); //LCD显示刷新 exdelay(); //延时300mS Z52_Ram&=(0xff-Z52_BMASK); //Z52:S37 transram(); //LCD显示刷新 exdelay(); //延时300mS Z53_Ram&=(0xff-Z53_BMASK); //Z53:S38 transram(); //LCD显示刷新 exdelay(); //延时300mS Z54_Ram&=(0xff-Z54_BMASK); //Z54:S39 transram(); //LCD显示刷新 exdelay(); //延时300mS Z55_Ram&=(0xff-Z55_BMASK); //Z55:S40 transram(); //LCD显示刷新 exdelay(); //延时300mS Z56_Ram&=(0xff-Z56_BMASK); //Z56:S41 transram(); //LCD显示刷新 exdelay(); //延时300mS Z57_Ram&=(0xff-Z57_BMASK); //Z57:S42 transram(); //LCD显示刷新 exdelay(); //延时300mS Z58_Ram&=(0xff-Z58_BMASK); //Z58:S43 transram(); //LCD显示刷新 exdelay(); //延时300mS Z59_Ram&=(0xff-Z59_BMASK); //Z59:S44 transram(); //LCD显示刷新 exdelay(); //延时300mS Z60_Ram&=(0xff-Z60_BMASK); //Z60:S45 transram(); //LCD显示刷新 exdelay(); //延时300mS Z61_Ram&=(0xff-Z61_BMASK); //Z61:S46 transram(); //LCD显示刷新 exdelay(); //延时300mS Z62_Ram&=(0xff-Z62_BMASK); //Z62:S47 transram(); //LCD显示刷新 exdelay(); //延时300mS Z63_Ram&=(0xff-Z63_BMASK); //Z63:S48 transram(); //LCD显示刷新 exdelay(); //延时300mS Z64_Ram&=(0xff-Z64_BMASK); //Z64:S49 transram(); //LCD显示刷新 exdelay(); //延时300mS Z65_Ram&=(0xff-Z65_BMASK); //Z65:S50 transram(); //LCD显示刷新 exdelay(); //延时300mS Z66_Ram&=(0xff-Z66_BMASK); //Z66:S51 transram(); //LCD显示刷新 exdelay(); //延时300mS Z67_Ram&=(0xff-Z67_BMASK); //Z67:H6 transram(); //LCD显示刷新 exdelay(); //延时300mS //7.节电演示: LCD液晶显示控制器进入睡眠状态,电流小于1uA lcdsleep(); //LCD液晶显示控制器进入睡眠状态 exdelay(); //延时300mS } void exdelay(void) //演示延时子程序 { unsigned char i,j,k; //延时约300mS for(i=0;i<30;i++) for(j=0;j<64;j++) for(k=0;k<51;k++); } //------------------------------------------------------------------------------- //以下为SMS0818软件接口子程序集[C51] //本软件接口子程序集将显示定义成Num1..Num8数字对象及Z1..Z67标志对象,用户只需要在 //应用时将Num1..Num8数字赋值及Z1..Z67标志置1,调用transram程序,就可以将要显示的数 //字及相应的标志在SMS0818数码笔段型液晶显示模块上显示出来. //------------------------------------------------------------------------------- //以下numfill,zfill,decodetolcd为三线式串行硬件接口(B型)的SMS0818液晶显示模块的 //基本子程序,NUMCODETAB为SMS0818液晶显示模块的数字七段译码表 //用户可根据实际使用的标志及数字情况进行程序的删减或合并,地址映射表请参见 //http://www.sunman.cn/document/product/chinese/usermanual/SMS0818.pdf //------------------------------------------------------------------------------- //子程序名称:void numfill(unsigned char d). //功能:将数字缓冲区填充为d代表的数字. //修改日期:2009.08.08 //修改人:chujianjun@sunman.cn,tanchao@sunman.cn //------------------------------------------------------------------------------- void numfill(unsigned char d) //所有数字填充子程序 { Num1_Ram=d; //1 Num2_Ram=d; //2 Num3_Ram=d; //3 Num4_Ram=d; //4 Num5_Ram=d; //5 Num6_Ram=d; //6 Num7_Ram=d; //7 Num8_Ram=d; //8 } //------------------------------------------------------------------------------- //子程序名称:void zfill(bit d). //功能:将标志缓冲区中所有标志填充为d代表的内容(d为0时,标志不显示). //修改日期:2009.08.08 //修改人:chujianjun@sunman.cn,tanchao@sunman.cn //------------------------------------------------------------------------------- void zfill(bit d) //所有Z标志填充子程序 { if(d) { //d不为零,则所有标志置位 Z1_Ram|=Z1_BMASK; //Z1:T1 Z2_Ram|=Z2_BMASK; //Z2:T2 Z3_Ram|=Z3_BMASK; //Z3:T3 Z4_Ram|=Z4_BMASK; //Z4:T4 Z5_Ram|=Z5_BMASK; //Z5:T5 Z6_Ram|=Z6_BMASK; //Z6:余量 Z7_Ram|=Z7_BMASK; //Z7:插卡 Z8_Ram|=Z8_BMASK; //Z8:缺相 Z9_Ram|=Z9_BMASK; //Z9:尖峰 Z10_Ram|=Z10_BMASK; //Z10:功率 Z11_Ram|=Z11_BMASK; //Z11:编号 Z12_Ram|=Z12_BMASK; //Z12:故障 Z13_Ram|=Z13_BMASK; //Z13:平谷 Z14_Ram|=Z14_BMASK; //Z14:kW Z15_Ram|=Z15_BMASK; //Z15:.h Z16_Ram|=Z16_BMASK; //Z16:S1 Z17_Ram|=Z17_BMASK; //Z17:S2 Z18_Ram|=Z18_BMASK; //Z18:S3 Z19_Ram|=Z19_BMASK; //Z19:S4 Z20_Ram|=Z20_BMASK; //Z20:S5 Z21_Ram|=Z21_BMASK; //Z21:S6 Z22_Ram|=Z22_BMASK; //Z22:S7 Z23_Ram|=Z23_BMASK; //Z23:S8 Z24_Ram|=Z24_BMASK; //Z24:S9 Z25_Ram|=Z25_BMASK; //Z25:S10 Z26_Ram|=Z26_BMASK; //Z26:S11 Z27_Ram|=Z27_BMASK; //Z27:S12 Z28_Ram|=Z28_BMASK; //Z28:S13 Z29_Ram|=Z29_BMASK; //Z29:S14 Z30_Ram|=Z30_BMASK; //Z30:S15 Z31_Ram|=Z31_BMASK; //Z31:S16 Z32_Ram|=Z32_BMASK; //Z32:S17 Z33_Ram|=Z33_BMASK; //Z33:S18 Z34_Ram|=Z34_BMASK; //Z34:S19 Z35_Ram|=Z35_BMASK; //Z35:S20 Z36_Ram|=Z36_BMASK; //Z36:S21 Z37_Ram|=Z37_BMASK; //Z37:S22 Z38_Ram|=Z38_BMASK; //Z38:S23 Z39_Ram|=Z39_BMASK; //Z39:S24 Z40_Ram|=Z40_BMASK; //Z40:S25 Z41_Ram|=Z41_BMASK; //Z41:S26 Z42_Ram|=Z42_BMASK; //Z42:S27 Z43_Ram|=Z43_BMASK; //Z43:S28 Z44_Ram|=Z44_BMASK; //Z44:S29 Z45_Ram|=Z45_BMASK; //Z45:S30 Z46_Ram|=Z46_BMASK; //Z46:S31 Z47_Ram|=Z47_BMASK; //Z47:S32 Z48_Ram|=Z48_BMASK; //Z48:S33 Z49_Ram|=Z49_BMASK; //Z49:S34 Z50_Ram|=Z50_BMASK; //Z50:S35 Z51_Ram|=Z51_BMASK; //Z51:S36 Z52_Ram|=Z52_BMASK; //Z52:S37 Z53_Ram|=Z53_BMASK; //Z53:S38 Z54_Ram|=Z54_BMASK; //Z54:S39 Z55_Ram|=Z55_BMASK; //Z55:S40 Z56_Ram|=Z56_BMASK; //Z56:S41 Z57_Ram|=Z57_BMASK; //Z57:S42 Z58_Ram|=Z58_BMASK; //Z58:S43 Z59_Ram|=Z59_BMASK; //Z59:S44 Z60_Ram|=Z60_BMASK; //Z60:S45 Z61_Ram|=Z61_BMASK; //Z61:S46 Z62_Ram|=Z62_BMASK; //Z62:S47 Z63_Ram|=Z63_BMASK; //Z63:S48 Z64_Ram|=Z64_BMASK; //Z64:S49 Z65_Ram|=Z65_BMASK; //Z65:S50 Z66_Ram|=Z66_BMASK; //Z66:S51 Z67_Ram|=Z67_BMASK; //Z67:H6 } else { Z1_Ram&=(0xff-Z1_BMASK); //Z1:T1 Z2_Ram&=(0xff-Z2_BMASK); //Z2:T2 Z3_Ram&=(0xff-Z3_BMASK); //Z3:T3 Z4_Ram&=(0xff-Z4_BMASK); //Z4:T4 Z5_Ram&=(0xff-Z5_BMASK); //Z5:T5 Z6_Ram&=(0xff-Z6_BMASK); //Z6:余量 Z7_Ram&=(0xff-Z7_BMASK); //Z7:插卡 Z8_Ram&=(0xff-Z8_BMASK); //Z8:缺相 Z9_Ram&=(0xff-Z9_BMASK); //Z9:尖峰 Z10_Ram&=(0xff-Z10_BMASK); //Z10:功率 Z11_Ram&=(0xff-Z11_BMASK); //Z11:编号 Z12_Ram&=(0xff-Z12_BMASK); //Z12:故障 Z13_Ram&=(0xff-Z13_BMASK); //Z13:平谷 Z14_Ram&=(0xff-Z14_BMASK); //Z14:kW Z15_Ram&=(0xff-Z15_BMASK); //Z15:.h Z16_Ram&=(0xff-Z16_BMASK); //Z16:S1 Z17_Ram&=(0xff-Z17_BMASK); //Z17:S2 Z18_Ram&=(0xff-Z18_BMASK); //Z18:S3 Z19_Ram&=(0xff-Z19_BMASK); //Z19:S4 Z20_Ram&=(0xff-Z20_BMASK); //Z20:S5 Z21_Ram&=(0xff-Z21_BMASK); //Z21:S6 Z22_Ram&=(0xff-Z22_BMASK); //Z22:S7 Z23_Ram&=(0xff-Z23_BMASK); //Z23:S8 Z24_Ram&=(0xff-Z24_BMASK); //Z24:S9 Z25_Ram&=(0xff-Z25_BMASK); //Z25:S10 Z26_Ram&=(0xff-Z26_BMASK); //Z26:S11 Z27_Ram&=(0xff-Z27_BMASK); //Z27:S12 Z28_Ram&=(0xff-Z28_BMASK); //Z28:S13 Z29_Ram&=(0xff-Z29_BMASK); //Z29:S14 Z30_Ram&=(0xff-Z30_BMASK); //Z30:S15 Z31_Ram&=(0xff-Z31_BMASK); //Z31:S16 Z32_Ram&=(0xff-Z32_BMASK); //Z32:S17 Z33_Ram&=(0xff-Z33_BMASK); //Z33:S18 Z34_Ram&=(0xff-Z34_BMASK); //Z34:S19 Z35_Ram&=(0xff-Z35_BMASK); //Z35:S20 Z36_Ram&=(0xff-Z36_BMASK); //Z36:S21 Z37_Ram&=(0xff-Z37_BMASK); //Z37:S22 Z38_Ram&=(0xff-Z38_BMASK); //Z38:S23 Z39_Ram&=(0xff-Z39_BMASK); //Z39:S24 Z40_Ram&=(0xff-Z40_BMASK); //Z40:S25 Z41_Ram&=(0xff-Z41_BMASK); //Z41:S26 Z42_Ram&=(0xff-Z42_BMASK); //Z42:S27 Z43_Ram&=(0xff-Z43_BMASK); //Z43:S28 Z44_Ram&=(0xff-Z44_BMASK); //Z44:S29 Z45_Ram&=(0xff-Z45_BMASK); //Z45:S30 Z46_Ram&=(0xff-Z46_BMASK); //Z46:S31 Z47_Ram&=(0xff-Z47_BMASK); //Z47:S32 Z48_Ram&=(0xff-Z48_BMASK); //Z48:S33 Z49_Ram&=(0xff-Z49_BMASK); //Z49:S34 Z50_Ram&=(0xff-Z50_BMASK); //Z50:S35 Z51_Ram&=(0xff-Z51_BMASK); //Z51:S36 Z52_Ram&=(0xff-Z52_BMASK); //Z52:S37 Z53_Ram&=(0xff-Z53_BMASK); //Z53:S38 Z54_Ram&=(0xff-Z54_BMASK); //Z54:S39 Z55_Ram&=(0xff-Z55_BMASK); //Z55:S40 Z56_Ram&=(0xff-Z56_BMASK); //Z56:S41 Z57_Ram&=(0xff-Z57_BMASK); //Z57:S42 Z58_Ram&=(0xff-Z58_BMASK); //Z58:S43 Z59_Ram&=(0xff-Z59_BMASK); //Z59:S44 Z60_Ram&=(0xff-Z60_BMASK); //Z60:S45 Z61_Ram&=(0xff-Z61_BMASK); //Z61:S46 Z62_Ram&=(0xff-Z62_BMASK); //Z62:S47 Z63_Ram&=(0xff-Z63_BMASK); //Z63:S48 Z64_Ram&=(0xff-Z64_BMASK); //Z64:S49 Z65_Ram&=(0xff-Z65_BMASK); //Z65:S50 Z66_Ram&=(0xff-Z66_BMASK); //Z66:S51 Z67_Ram&=(0xff-Z67_BMASK); //Z67:H6 } } //------------------------------------------------------------------------------- //数据表名称:NUMCODETAB. //功能:将数字转换为七段码. //修改日期:2009.08.08 //修改人:chujianjun@sunman.cn,tanchao@sunman.cn //------------------------------------------------------------------------------- //数码笔段定义: 8字的最上面一笔段为A笔段,顺时针方向依次为BCDEF笔段,中间的是G笔段 //数码笔段顺序: D76543210 // DEFACGBX unsigned char code NUMCODETAB[]={0xFA,0x0A,0xD6,0x9E, //数字0,1,2,3 0x2E,0xBC,0xFC,0x1A, //数字4,5,6,7 0xFE,0xBE,0x00,0x04, //数字8,9,字符空格,字符- 0xF0,0x76,0xF4,0x74}; //字符C,字符P,字符E,字符F //------------------------------------------------------------------------------- //子程序名称:void decodetolcd(void). //功能:按地址映射表字节顺序,所有数据译码后送LCD液晶显示控制器. //修改日期:2009.08.08 //修改人:chujianjun@sunman.cn,tanchao@sunman.cn //------------------------------------------------------------------------------- //地址映射表请参见 //http://www.sunman.cn/document/product/chinese/usermanual/SMS0818.pdf void decodetolcd(void) //按地址映射表字节顺序,所有数据译码后送 { unsigned char buf; //LCD液晶显示控制器子程序 //LCDBUF+0 缓冲区第1个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为ZZZZZZZZ位 if((Z16_Ram&Z16_BMASK) != 0 ) //第16个标志[S1]译码 buf|=0x08; if((Z17_Ram&Z17_BMASK) != 0 ) //第17个标志[S2]译码 buf|=0x04; if((Z18_Ram&Z18_BMASK) != 0 ) //第18个标志[S3]译码 buf|=0x02; if((Z19_Ram&Z19_BMASK) != 0 ) //第19个标志[S4]译码 buf|=0x01; if((Z20_Ram&Z20_BMASK) != 0 ) //第20个标志[S5]译码 buf|=0x10; if((Z21_Ram&Z21_BMASK) != 0 ) //第21个标志[S6]译码 buf|=0x20; if((Z22_Ram&Z22_BMASK) != 0 ) //第22个标志[S7]译码 buf|=0x40; if((Z23_Ram&Z23_BMASK) != 0 ) //第23个标志[S8]译码 buf|=0x80; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+1 缓冲区第2个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为ZZZZZZZZ位 if((Z24_Ram&Z24_BMASK) != 0 ) //第24个标志[S9]译码 buf|=0x08; if((Z25_Ram&Z25_BMASK) != 0 ) //第25个标志[S10]译码 buf|=0x04; if((Z26_Ram&Z26_BMASK) != 0 ) //第26个标志[S11]译码 buf|=0x02; if((Z27_Ram&Z27_BMASK) != 0 ) //第27个标志[S12]译码 buf|=0x01; if((Z28_Ram&Z28_BMASK) != 0 ) //第28个标志[S13]译码 buf|=0x10; if((Z29_Ram&Z29_BMASK) != 0 ) //第29个标志[S14]译码 buf|=0x20; if((Z30_Ram&Z30_BMASK) != 0 ) //第30个标志[S15]译码 buf|=0x40; if((Z31_Ram&Z31_BMASK) != 0 ) //第31个标志[S16]译码 buf|=0x80; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+2 缓冲区第3个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为ZZZZZZZZ位 if((Z32_Ram&Z32_BMASK) != 0 ) //第32个标志[S17]译码 buf|=0x08; if((Z33_Ram&Z33_BMASK) != 0 ) //第33个标志[S18]译码 buf|=0x04; if((Z34_Ram&Z34_BMASK) != 0 ) //第34个标志[S19]译码 buf|=0x02; if((Z35_Ram&Z35_BMASK) != 0 ) //第35个标志[S20]译码 buf|=0x01; if((Z36_Ram&Z36_BMASK) != 0 ) //第36个标志[S21]译码 buf|=0x10; if((Z37_Ram&Z37_BMASK) != 0 ) //第37个标志[S22]译码 buf|=0x20; if((Z38_Ram&Z38_BMASK) != 0 ) //第38个标志[S23]译码 buf|=0x40; if((Z39_Ram&Z39_BMASK) != 0 ) //第39个标志[S24]译码 buf|=0x80; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+3 缓冲区第4个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为ZZZZZZZZ位 if((Z40_Ram&Z40_BMASK) != 0 ) //第40个标志[S25]译码 buf|=0x08; if((Z41_Ram&Z41_BMASK) != 0 ) //第41个标志[S26]译码 buf|=0x04; if((Z42_Ram&Z42_BMASK) != 0 ) //第42个标志[S27]译码 buf|=0x02; if((Z43_Ram&Z43_BMASK) != 0 ) //第43个标志[S28]译码 buf|=0x01; if((Z44_Ram&Z44_BMASK) != 0 ) //第44个标志[S29]译码 buf|=0x10; if((Z45_Ram&Z45_BMASK) != 0 ) //第45个标志[S30]译码 buf|=0x20; if((Z46_Ram&Z46_BMASK) != 0 ) //第46个标志[S31]译码 buf|=0x40; if((Z47_Ram&Z47_BMASK) != 0 ) //第47个标志[S32]译码 buf|=0x80; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+4 缓冲区第5个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为ZZZZZZZZ位 if((Z48_Ram&Z48_BMASK) != 0 ) //第48个标志[S33]译码 buf|=0x08; if((Z49_Ram&Z49_BMASK) != 0 ) //第49个标志[S34]译码 buf|=0x04; if((Z50_Ram&Z50_BMASK) != 0 ) //第50个标志[S35]译码 buf|=0x02; if((Z51_Ram&Z51_BMASK) != 0 ) //第51个标志[S36]译码 buf|=0x01; if((Z52_Ram&Z52_BMASK) != 0 ) //第52个标志[S37]译码 buf|=0x10; if((Z53_Ram&Z53_BMASK) != 0 ) //第53个标志[S38]译码 buf|=0x20; if((Z54_Ram&Z54_BMASK) != 0 ) //第54个标志[S39]译码 buf|=0x40; if((Z55_Ram&Z55_BMASK) != 0 ) //第55个标志[S40]译码 buf|=0x80; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+5 缓冲区第6个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为ZZZZZZZZ位 if((Z56_Ram&Z56_BMASK) != 0 ) //第56个标志[S41]译码 buf|=0x08; if((Z57_Ram&Z57_BMASK) != 0 ) //第57个标志[S42]译码 buf|=0x04; if((Z58_Ram&Z58_BMASK) != 0 ) //第58个标志[S43]译码 buf|=0x02; if((Z59_Ram&Z59_BMASK) != 0 ) //第59个标志[S44]译码 buf|=0x01; if((Z60_Ram&Z60_BMASK) != 0 ) //第60个标志[S45]译码 buf|=0x10; if((Z61_Ram&Z61_BMASK) != 0 ) //第61个标志[S46]译码 buf|=0x20; if((Z62_Ram&Z62_BMASK) != 0 ) //第62个标志[S47]译码 buf|=0x40; if((Z63_Ram&Z63_BMASK) != 0 ) //第63个标志[S48]译码 buf|=0x80; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+6 缓冲区第7个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为XXXXZZZX位 if((Z64_Ram&Z64_BMASK) != 0 ) //第64个标志[S49]译码 buf|=0x08; if((Z65_Ram&Z65_BMASK) != 0 ) //第65个标志[S50]译码 buf|=0x04; if((Z66_Ram&Z66_BMASK) != 0 ) //第66个标志[S51]译码 buf|=0x02; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+7 缓冲区第8个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为DEFACGBZ位 buf|=NUMCODETAB[Num8_Ram]&0xFE; //第8个8字的DEFACGB笔段译码 if((Z15_Ram&Z15_BMASK) != 0 ) //第15个标志[.h]译码 buf|=0x01; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+8 缓冲区第9个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为DEFACGBZ位 buf|=NUMCODETAB[Num7_Ram]&0xFE; //第7个8字的DEFACGB笔段译码 if((Z14_Ram&Z14_BMASK) != 0 ) //第14个标志[kW]译码 buf|=0x01; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+9 缓冲区第10个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为DEFACGBZ位 buf|=NUMCODETAB[Num6_Ram]&0xFE; //第6个8字的DEFACGB笔段译码 if((Z67_Ram&Z67_BMASK) != 0 ) //第67个标志[H6]译码 buf|=0x01; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+10 缓冲区第11个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为DEFACGBZ位 buf|=NUMCODETAB[Num5_Ram]&0xFE; //第5个8字的DEFACGB笔段译码 if((Z5_Ram&Z5_BMASK) != 0 ) //第5个标志[T5]译码 buf|=0x01; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+11 缓冲区第12个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为DEFACGBZ位 buf|=NUMCODETAB[Num4_Ram]&0xFE; //第4个8字的DEFACGB笔段译码 if((Z4_Ram&Z4_BMASK) != 0 ) //第4个标志[T4]译码 buf|=0x01; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+12 缓冲区第13个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为DEFACGBZ位 buf|=NUMCODETAB[Num3_Ram]&0xFE; //第3个8字的DEFACGB笔段译码 if((Z3_Ram&Z3_BMASK) != 0 ) //第3个标志[T3]译码 buf|=0x01; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+13 缓冲区第14个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为DEFACGBZ位 buf|=NUMCODETAB[Num2_Ram]&0xFE; //第2个8字的DEFACGB笔段译码 if((Z2_Ram&Z2_BMASK) != 0 ) //第2个标志[T2]译码 buf|=0x01; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+14 缓冲区第15个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为ZZZZZZZZ位 if((Z6_Ram&Z6_BMASK) != 0 ) //第6个标志[余量]译码 buf|=0x10; if((Z7_Ram&Z7_BMASK) != 0 ) //第7个标志[插卡]译码 buf|=0x20; if((Z8_Ram&Z8_BMASK) != 0 ) //第8个标志[缺相]译码 buf|=0x40; if((Z9_Ram&Z9_BMASK) != 0 ) //第9个标志[尖峰]译码 buf|=0x80; if((Z10_Ram&Z10_BMASK) != 0 ) //第10个标志[功率]译码 buf|=0x01; if((Z11_Ram&Z11_BMASK) != 0 ) //第11个标志[编号]译码 buf|=0x02; if((Z12_Ram&Z12_BMASK) != 0 ) //第12个标志[故障]译码 buf|=0x04; if((Z13_Ram&Z13_BMASK) != 0 ) //第13个标志[平谷]译码 buf|=0x08; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 //LCDBUF+15 缓冲区第16个字节译码 buf=0x00; //当前译码数据置初始值 //需译码的BIT为DEFACGBZ位 buf|=NUMCODETAB[Num1_Ram]&0xFE; //第1个8字的DEFACGB笔段译码 if((Z1_Ram&Z1_BMASK) != 0 ) //第1个标志[T1]译码 buf|=0x01; transbyte(buf); //将当前译码数据送LCD液晶显示控制器 } //------------------------------------------------------------------------------- //以下transram,transbyte,lcdsleep为三线式串行硬件接口(B型)的基本子程序,transbit, //lcdwc为内部子程序. //------------------------------------------------------------------------------- //子程序名称:void transram(void). //功能:LCD显示刷新. //修改日期:2009.08.08 //修改人:chujianjun@sunman.cn,tanchao@sunman.cn //------------------------------------------------------------------------------- #define CMDOFF 0 //控制器掉电(控制字) #define CMDON 0x80 //控制器上电(控制字) #define CMDLCDOFF 0x40 //控制器液晶关闭(控制字) #define CMDLCDON 0xc0 //控制器液晶显示(控制字) #define CMDB3C4 0x94 //控制器液晶模式设置(控制字) void transram(void) //LCD显示刷新子程序 { //显示模式设置 lcdwc(CMDOFF); //将液晶显示控制器关闭后打开 lcdwc(CMDLCDOFF); //再置显示模式为1/3偏压,1/4占空比 lcdwc(CMDON); lcdwc(CMDLCDON); lcdwc(CMDB3C4); //送数据前准备操作 CSPIN=1; //CSPIN执行一个下降沿 CSPIN=0; transbit(1); //数据连续先送101000000系列后再开始送数 transbyte(0x2); //开始送数 decodetolcd(); //按地址映射表字节顺序,所有数据译码后送 //LCD液晶显示控制器 CSPIN=1; //送数完成后将CSPIN置为低电平 } //------------------------------------------------------------------------------- //子程序名称:void lcdwc(unsigned char c). //功能:送控制字到液晶显示控制器. //修改日期:2009.08.08 //修改人:chujianjun@sunman.cn,tanchao@sunman.cn //------------------------------------------------------------------------------- void lcdwc(unsigned char c) //送控制字到液晶显示控制器子程序 { CSPIN=1; //CSPIN执行一个下降沿 CSPIN=0; transbit(1); //数据连续先送100系列后再开始送控制字 transbit(0); transbit(0); transbyte(c); //送控制字 transbit(0); //送1位0 CSPIN=1; //送数完成后将CSPIN置为高电平 } //------------------------------------------------------------------------------- //子程序名称:void lcdsleep(void). //功能:液晶显示控制器进入睡眠来减少功耗. //修改日期:2009.08.08 //修改人:chujianjun@sunman.cn,tanchao@sunman.cn //------------------------------------------------------------------------------- void lcdsleep(void) //液晶显示控制器进入睡眠来减少功耗子程序 { lcdwc(CMDLCDOFF); //将液晶显示关闭 lcdwc(CMDOFF); //LCD液晶显示控制器进入睡眠状态,此时LCD } //液晶显示控制器的电流小于1uA //------------------------------------------------------------------------------- //子程序名称:void transbyte(unsigned char d). //功能:送1字节数据到液晶显示控制器. //修改日期:2009.08.08 //修改人:chujianjun@sunman.cn,tanchao@sunman.cn //------------------------------------------------------------------------------- void transbyte(unsigned char d) //送1字节数据到液晶显示控制器子程序 { unsigned char i; for(i=0;i<8;i++) { if((d&0x1) == 0x1) transbit(1); else transbit(0); d>>=1; //从低到高位送字节位数据到液晶显示控制器 } } //------------------------------------------------------------------------------- //子程序名称:void transbit(bit d). //功能:送1位数据到液晶显示控制器. //修改日期:2009.08.08 //修改人:chujianjun@sunman.cn,tanchao@sunman.cn //------------------------------------------------------------------------------- void transbit(bit d) //送1位数据到液晶显示控制器子程序 { DIPIN = d; //先送数据到数据口线DI _nop_(); _nop_(); CLKPIN = 1; //再使时钟口线发一个负脉冲 _nop_(); _nop_(); CLKPIN = 0; _nop_(); _nop_(); CLKPIN = 1; }