📄 lcdparse.lst
字号:
C51 COMPILER V7.10 LCDPARSE 02/03/2005 10:45:40 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE LCDPARSE
OBJECT MODULE PLACED IN lcdparse.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcdparse.c OPTIMIZE(7,SIZE) BROWSE INCDIR(E:\WorkHome\932-DDSF\DDSF-932-002
-\;F:\WorkHome\932-DDSF\DDSF-932-003\) DEBUG OBJECTEXTEND
line level source
1 /*========================================*/
2 /*系统名称:DDSF-CECG-JiangSu */
3 /*函数名称:液晶显示 */
4 /*程序编写:步爱军 */
5 /*开始日期:2005-01-01 */
6 /*完成日期: */
7 /*修改记录: */
8 /*软件版本:DDSF-CECG-002 */
9 /*版本说明:用户数据保存在外部 */
10 /*外部器件:LM75、AT24C02、HT1621、LPC932 */
11 /* R8025、ADE7755 */
12 /*========================================*/
13 //液晶显示方式选择
14 //利用到的重要数据
15 //显示停顿时间---LcdShowTime=IicByteRead(0xa0,0x62);
16 //历史电量显示标志---LcdShowBit[1]=IicByteRead(0xa0,0x63);
17 //当前电量显示标志---LcdShowBit[0]=IicByteRead(0xa0,0x64)&0x80;
18 #include <REG932.H>
19 #include <define.h>
20 #include <Stdio.h>
21 #include <Intrins.h>
22
23 void LcdFull(unsigned char DataOne,unsigned char DataTwo,unsigned char DataThree,unsigned char DataFour)
24 {
25 1 unsigned char data i,j,k;
26 1 unsigned char idata DataBufA[4],DataBufB[4];
27 1 unsigned char code Digit[12]={
28 1 0xBE, //0
29 1 0x06, //1
30 1 0x7C, //2
31 1 0x5E, //3
32 1 0xC6, //4
33 1 0xDA, //5
34 1 0xFA, //6
35 1 0x0E, //7
36 1 0xFE, //8
37 1 0xDE, //9
38 1 0xf8, //a--E
39 1 0x40, //b--_
40 1 };
41 1 DataBufA[0]=DataOne;
42 1 DataBufA[1]=DataTwo;
43 1 DataBufA[2]=DataThree;
44 1 DataBufA[3]=DataFour;
45 1
46 1 if(BataMoveFg)
47 1 {
48 2 for(i=0;i<4;i++)//
49 2 {
50 3 k=DataBufA[i];
51 3 j=DataBufA[i+1];
52 3 k=k&0x0f;
53 3 k=k<<4;
54 3 j=j>>4;
C51 COMPILER V7.10 LCDPARSE 02/03/2005 10:45:40 PAGE 2
55 3 j=j&0x0f;
56 3 DataBufB[i]=k|j;
57 3 }
58 2 }
59 1 for(i=0;i<3;i++)
60 1 {
61 2 k=DataBufB[i] & 0xf0;
62 2 k=k>>4;
63 2 LcdShowBuf[i+i]=Digit[k];
64 2 k=DataBufB[i] & 0x0f;
65 2 LcdShowBuf[i+i+1]=Digit[k];
66 2 }
67 1
68 1 }
69 void LcdDisplayData(unsigned char DataOne,unsigned char DataTwo,unsigned char DataThree,unsigned char Data
-Four,unsigned char DataFive,unsigned char DataSix,unsigned char DataSeven)
70 {
71 1 unsigned char data i;
72 1
73 1 LcdShowBuf[6]=DataFive;
74 1 LcdShowBuf[7]=DataSix;
75 1
76 1 switch(DataSeven)
77 1 {
78 2 case 0x00 : //没有小数点的显示/
79 2 LcdFull(DataOne,DataTwo,DataThree,DataFour);
80 2 break;
81 2 case 0x21 : //第2位带小数点的显示/
82 2 LcdFull(DataOne,DataTwo,DataThree,DataFour);
83 2 LcdShowBuf[1]=LcdShowBuf[1]|0x01;
84 2 break;
85 2 case 0x41 : //第4位带小数点的显示/
86 2 LcdFull(DataOne,DataTwo,DataThree,DataFour);
87 2 LcdShowBuf[1]=LcdShowBuf[1]|0x01;
88 2 LcdShowBuf[3]=LcdShowBuf[3]|0x01;
89 2 break;
90 2 case 0x51 : //第5位带小数点的显示/
91 2 LcdFull(DataOne,DataTwo,DataThree,DataFour);
92 2 LcdShowBuf[4]=LcdShowBuf[4]|0x01;
93 2 break;
94 2 }
95 1 if(ComFg)
96 1 {
97 2 LcdShowBuf[7]=LcdShowBuf[7]|0x10;
98 2 }
99 1 else
100 1 {
101 2 LcdShowBuf[7]=LcdShowBuf[7]&0xef;
102 2 }
103 1 if(ReverseFgToLcd)
104 1 {
105 2 LcdShowBuf[7]=LcdShowBuf[7]|0x40;
106 2 }
107 1 else
108 1 {
109 2 LcdShowBuf[7]=LcdShowBuf[7]&0xbf;
110 2 }
111 1 LcdStart();
112 1 LcdSendId(0xa0); //写数据操作
113 1 LcdSendAddress(0x00);
114 1 for(i=0;i<8;i++)
115 1 {
C51 COMPILER V7.10 LCDPARSE 02/03/2005 10:45:40 PAGE 3
116 2 LcdSendByte(LcdShowBuf[i]);
117 2 Delay(LcdDelay);
118 2 }
119 1 LcdStop();
120 1 }
121 void LcdParse(void)
122 {
123 1 unsigned char data i,j,k,l,m;
124 1 unsigned char data databuf[4];
125 1 if(LcdTimeFg)
126 1 {
127 2 //LcdTimeFg=0;
128 2 m=LcdShowBit[0]&0x80;
129 2 switch(LcdRunData)
130 2 {
131 3 case 0x01 ://第01种显示方式数据提取到显示缓冲区---当前日期/
132 3 if(LcdShowBit[0]&0x01)
133 3 {
134 4 i=IicByteRead(0x64,0x40) & 0x3f;
135 4 j=IicByteRead(0x64,0x50) & 0x1f;
136 4 k=IicByteRead(0x64,0x60);
137 4 l=0;
138 4 BataMoveFg=0;//不执行移位操作
139 4 LcdDisplayData(i,j,k,l,0x80,0x00,0x41);
140 4 }
141 3 else
142 3 {
143 4 LcdRunData=0x02;
144 4 }
145 3 break;
146 3 case 0x02 ://第02种显示方式数据提取到显示缓冲区---当前时间/
147 3 if(LcdShowBit[0]&0x02)
148 3 {
149 4 k=IicByteRead(0x64,0x00) & 0x7f;
150 4 j=IicByteRead(0x64,0x10) & 0x7f;
151 4 i=IicByteRead(0x64,0x20) & 0x3f;
152 4 l=0;
153 4 BataMoveFg=0;//不执行移位操作
154 4 LcdDisplayData(i,j,k,l,0x40,0x0c,0x00);
155 4 }
156 3 else
157 3 {
158 4 LcdRunData=0x03;
159 4 }
160 3 break;
161 3 case 0x03 ://第03种显示方式数据提取到显示缓冲区---当前总电量(整数加小数|整数)
162 3
163 3 //电表先显示整数---6位整数
164 3 if(m)
165 3 {
166 4 BataMoveFg=0;//不执行移位操作
167 4 for(i=0;i<4;i++)
168 4 {
169 5 databuf[i]=HexToBcd(SumPulseData[i]);
170 5 }
171 4 LcdDisplayData(databuf[2],databuf[1],databuf[0],0x00,0x08,0x82,0x00);
172 4 }
173 3 //电表显示整数加小数---5位整数加一位小数
174 3 else
175 3 {
176 4 BataMoveFg=1;//执行移位操
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -