📄 chengxu.lst
字号:
C51 COMPILER V8.04 CHENGXU 10/08/2006 15:40:48 PAGE 1
C51 COMPILER V8.04, COMPILATION OF MODULE CHENGXU
OBJECT MODULE PLACED IN chengxu.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE chengxu.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<math.h>
3
4 void short_delay(void); //短延时程序
5 void send_1602( unsigned char DATA_OUT ); //控制1602接收数据
6 void write_command(unsigned char DATA_OUT); //写命令
7 void write_data(unsigned char DATA_OUT); //写数据
8 unsigned int fh(unsigned char i);
9 unsigned int Vout[10];
10 unsigned char counter,couter,counter1;
11
12 sbit RS=P3^1; //1602命令控制端
13 sbit RW=P3^0; //1602读写控制端
14 sbit E=P3^7; //1602时能控制端,并且是低下降延触发
15
16 //*************************************
17 //1602的操作
18
19 //写数据到1602
20 void send_1602( unsigned char DATA_OUT )
21 {E=1;
22 1 P1=DATA_OUT;
23 1 short_delay();
24 1 E=0;
25 1 short_delay();
26 1 }
27
28 //写命令
29 void write_command(unsigned char DATA_OUT)
30 {RS=0;
31 1 RW=0;
32 1 send_1602(DATA_OUT);
33 1 }
34
35 //写数据
36 void write_data(unsigned char DATA_OUT)
37 {RS=1;
38 1 RW=0;
39 1 send_1602(DATA_OUT);
40 1 }
41
42 //显示单位
43 void write_unit(void)
44 {write_command(0x8d);
45 1 write_data('(');
46 1 write_data('V');
47 1 write_data(')');
48 1 write_command(0x85);
49 1 }
50 //*************************************
51 //10的指数次运算
52 unsigned int fh(unsigned char i)
53 {unsigned int temp;
54 1 temp=1;
55 1 for(i;i;i--)
C51 COMPILER V8.04 CHENGXU 10/08/2006 15:40:48 PAGE 2
56 1 {temp=temp*10;
57 2 }
58 1 return(temp);
59 1 }
60
61 //数据处理
62 void Vout_manage(void)
63 {unsigned char i,flag,temp[7]={"000000"};
64 1 // unsigned long int a;
65 1 unsigned int a,b;
66 1 a=0;
67 1 for(i=(counter1);i;i--)
68 1 {a+=Vout[i-1];}
69 1 b=a/10;
70 1 flag=0;
71 1 temp[0]= (b/fh(4))+48; //清除标致
72 1 for(i=3;i;i--) //
73 1 {temp[4-i]=((b/fh(i))-(b/fh(i+1))*10)+48;
74 2 }
75 1 temp[4]=(b%10)+48; //求最后一位
76 1 for(i=0;i<5;i++)
77 1 {if(i<2) //如果是整数部份,就执行整数部分的程序
78 2 {if(!(temp[i]-48)) //整数值是否为零,为零时是否是最高位为零,是不显示
79 3 {if(flag) write_data(temp[i]);}
80 3 else
81 3 {flag=1;
82 4 write_data(temp[i]);}
83 3 }
84 2 else if(i==2)
85 2 {if(flag!=1)
86 3 {write_data('0'); //如果显示整数为零,折显示0
87 4 }
88 3 write_data('.'); //显示小数点
89 3 write_data(temp[i]);
90 3 }
91 2 else if(i>2&&i<5)
92 2 {write_data(temp[i]);
93 3 }
94 2 }
95 1 write_command(0x85);
96 1 }
97
98 void yw(void)
99 {unsigned char i;
100 1 for(i=9;i;i--)Vout[i]=Vout[i-1];
101 1 }
102 //*************************************
103 //中断程序
104
105 //外部脉冲计数控制,既定时器0中断控制
106 void time0(void) interrupt 1 using 1
107 {TL0=0x00;
108 1 TH0=0x00;
109 1 counter++;
110 1 }
111
112 //定时器一秒时间控制,既定时器1中断控制
113 void time1(void) interrupt 3 using 1
114 {unsigned char i,temp1,temp2,temp3;
115 1 unsigned int temp;
116 1 TL1=0xB0;
117 1 TH1=0x3C;
C51 COMPILER V8.04 CHENGXU 10/08/2006 15:40:48 PAGE 3
118 1 couter--;
119 1 if(!couter) //V-F转换
120 1 {temp1=TL0; //低位
121 2 TL0=0x00;
122 2 temp2=TH0; //高位
123 2 TH0=0x00;
124 2 couter=20;
125 2 temp3=counter;
126 2 counter=0;
127 2 if(counter1!=10)counter1++;
128 2 temp=(temp1+temp2*256+65536*temp3);
129 2 temp=(temp-2000)*1.5;
130 2 //yw(); //移位
131 2 for(i=9;i;i--)Vout[i]=Vout[i-1];
132 2 i=temp/100;
133 2 if(50<i&&i<60)
134 2 {temp=temp+40;}
135 2 else if(40<i && i<50)
136 2 {temp=temp+20;}
137 2 else if(30<i&&i<41)
138 2 {temp=temp+10;}
139 2 else if(20<i&&i<31)
140 2 {temp=temp-40;}
141 2 else if(15<i&&i<21)
142 2 {temp=temp-80;}
143 2 else if(i<16)
144 2 {switch (i)
145 3 {case 15:temp=temp-100;break;
146 4 case 14:temp=temp-150;break;
147 4 case 13:temp=temp-180;break;
148 4 case 12:temp=temp-200;break;
149 4 case 11:temp=temp-200;break;
150 4 case 10:temp=temp-220;break;
151 4 case 9:temp=temp-250;break;
152 4 case 8:temp=temp-260;break;
153 4 case 7:temp=temp-275;break;
154 4 case 6:temp=temp-285;break;
155 4 case 5:temp=temp-330;break;
156 4 case 4:temp=temp-410;break;
157 4 case 3:temp=temp-420;break;
158 4 case 2:temp=temp-400;break;
159 4 }
160 3 }
161 2 Vout[0]=temp;
162 2 //Vout=((temp1+temp2*256+65536*temp3)-2000)*1.5; //对数值进行1000倍放大
163 2 //Vout=10000;
164 2 //Vout=(Vout-2)*1.5;
165 2 }
166 1 }
167
168 //*************************************
169 //延时程序
170 void short_delay(void)
171 {unsigned char i;
172 1 for(i=200;i;i--);
173 1 }
174
175 //主程序
176 void main()
177 {unsigned char code a[9]={"Vout="};
178 1 unsigned char i;
-
C51 COMPILER V8.04 CHENGXU 10/08/2006 15:40:48 PAGE 4
- SP=0x60;
179 1 IE=0x8A; //打开定时中断0和1
180 1 IP=0x08;
181 1 TMOD=0x15; //T0为外部计脉冲,T1为定时控制
182 1 TL0=0x00; //设置定时器0和1的器起始时间
183 1 TH0=0x00;
184 1 TL1=0xB0;
185 1 TH1=0x3C;
186 1 //PCON=0X01;
187 1 Vout[0]=2000;
188 1 counter1=1;
189 1 counter=0;
190 1 couter=20;
191 1 write_command(0x01); //关画面
192 1 for(i=255;i;i--) //保证液晶正常复位
193 1 {short_delay();
194 2 }
195 1 for(i=200;i;i--) //保证液晶正常复位
196 1 {short_delay();
197 2 }
198 1 write_command(0x0c); //开画面
199 1 write_command(0x38); //设置数据为8位,并且使双行显示,5*7的点阵字体
200 1 write_command(0x06); //设置光标为右移
201 1 write_command(0x80); //设置起始位置
202 1 for (i=0;i<5;i++) //显示个数据
203 1 {write_data( a[i] );
204 2 }
205 1 Vout_manage(); //显示数值
206 1 write_unit(); //显示单位
207 1 TCON=0x50; //打开定时器
208 1 while(1)
209 1 {Vout_manage();
210 2 }
211 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 889 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 23 14
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -