📄 c_code.lst
字号:
C51 COMPILER V8.02 C_CODE 10/25/2006 07:30:58 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE C_CODE
OBJECT MODULE PLACED IN c_code.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE c_code.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <math.h>
3 #include <string.h>
4 #include <intrins.h>
5 #include <stdio.h>
6 #include "c_code.h"
7
8 #define Graphic 1
9 #define TXT 0
10
11 unsigned char code str_USB[];
12 unsigned char code str2[];
13 unsigned char code str3[];
14 unsigned char code str4[];
15 unsigned char code str5[];
16 unsigned char i;
17
18 unsigned int ihexs, iflag[3];
19 unsigned char disp_buffer[5];
20
21 extern unsigned int ad_convert();
22 unsigned char C;
23
24 void hextobcd(unsigned int hexs,unsigned char j);
25 void deoutlier(unsigned int x[4], unsigned int x0[4][2], char Bound);
26 void calibration(unsigned int x[4]);
27
28 void LcmDynWriteData(unsigned char x, unsigned char y, unsigned char CH_No,unsigned int ihex);
29
30 unsigned int new_value[4];
31 unsigned int value[4][2];
32
33 unsigned char menu_item;
34
35 void main(void)
36 {
37 1 menu_item = 0;
38 1 do
39 1 {
40 2 for(i = 0;i < 3; i++)
41 2 iflag[i] = 0; //程序跳转标志
42 2 ACC = 0x01; //MOV A, #01h
43 2 Regstr = ACC; //MOV 30h, A
44 2 PortA000 = ACC; //MOV DPTR, #A000h MOV @DPTR, A
45 2 FPWR = 0; //CLR P1.5
46 2 ACC = Port6000;
47 2 ACC = ACC & 0x80;
48 2 if(ACC != 0x80) //电源POWER键按下
49 2 {
50 3 ACC = Port6000;
51 3 ACC = ACC & 0x80;
52 3 if(ACC != 0x00)
53 3 iflag[0] = 1;
54 3 else
55 3 {
C51 COMPILER V8.02 C_CODE 10/25/2006 07:30:58 PAGE 2
56 4 FPWR = 1;
57 4 LcmInit();
58 4 LcmClear(0); //设置屏幕
59 4 LcmWriteCommand(0x9f);
60 4 PutString(0,0,str_Welcome); //显示欢迎屏
61 4 Delay(10); //延迟并转入菜单屏
62 4
63 4 PortA000 = 0x04;
64 4 ACC = Port6000;
65 4 ACC = ACC & 0x01;
66 4 if(ACC != 0x01) //检测ESC键按下,则转测量Start
67 4 {
68 5 //菜单共5条:日期、时间、量程、报警上限、报警下限,故0 <= menu_item <= 4
69 5 ACC = Port6000;
70 5 ACC = ACC & 0x10;
71 5 if(ACC == 0x10)
72 5 {
73 6 if(menu_item != 4)
74 6 menu_item ++; //若按Down键,menu_item ++,但其最大值为4
75 6 else
76 6 menu_item = 4;
77 6 }
78 5 ACC = Port6000;
79 5 ACC = ACC & 0x20;
80 5 if(ACC == 0x30)
81 5 {
82 6 if(menu_item != 0)
83 6 menu_item --; //若按UP键,menu_item --,但其最小值为0
84 6 else
85 6 menu_item = 0;
86 6 }
87 5 switch(menu_item) //下面每个设置必须按Enter确认
88 5 {
89 6 case 0: //日期设置
90 6 break;
91 6 case 1: //时间设置
92 6 break;
93 6 case 2: //量程设置
94 6 break;
95 6 case 3: //上限设置
96 6 break;
97 6 case 4: //下限设置
98 6 break;
99 6 }
100 5 ACC = Port6000;
101 5 ACC = ACC & 0x02;
102 5 if(ACC == 0x02) //校零键按下
103 5 {
104 6 }
105 5 }
106 4 }
107 3 }
108 2 else
109 2 {
110 3 ACC = Port6000;
111 3 ACC = ACC & 0x40;
112 3 if(ACC != 0x00) //交流电插入
113 3 {
114 4 FPWR = 1;
115 4 LcmInit();
116 4 LcmClear(0);
117 4 LcmWriteCommand(0x9f);
C51 COMPILER V8.02 C_CODE 10/25/2006 07:30:58 PAGE 3
118 4 PutString(0,0,str_Charge);
119 4 Delay(1);
120 4 while(1)
121 4 {
122 5 AD_A0 = 1;
123 5 AD_A1 = 1;
124 5
125 5 ad_convert();
126 5 hextobcd(ihexs,5); //电源电压转换
127 5 //显示
128 5 FCHRG = 1; //没有写完
129 5 }
130 4 iflag[1] = 1;
131 4 }
132 3 if(FUSB == 1) //USB插入
133 3 {
134 4 LcmInit();
135 4 LcmClear(0);
136 4 LcmWriteCommand(0x9f);
137 4 while(FUSB == 1)
138 4 {
139 5 //USB服务程序
140 5
141 5 PortA000 = 0x08;
142 5 ACC = Port6000;
143 5 ACC = ACC & 0x08;
144 5 if(ACC == 0x08) //Send键按下
145 5 {
146 6 }
147 5 }
148 4 Delay(1);
149 4 FPWR = 0;
150 4 iflag[2] = 1; //关机
151 4 }
152 3 if(iflag[1] == 0 || iflag[2] == 0) //没有键按下
153 3 {
154 4 iflag[1] = 0;
155 4 iflag[2] = 0;
156 4 FPWR = 1; //置P1.5 = 1
157 4 LcmInit();
158 4 LcmClear(0);
159 4 LcmWriteCommand(0x9f);
160 4 PutString(0,0,str_Hibernate);
161 4 Delay(0);
162 4 }
163 3 }
164 2 }while(iflag[0]);
165 1
166 1
167 1 //Start 测量程序
168 1 do//测量前必须曾按过Power键
169 1 { //程序跳转标志
170 2 iflag[0] = 0;
171 2 LcmClear(1);
172 2 LcmWriteCommand(0x9f);
173 2 LcmClear(1);
174 2
175 2 for(i=0;i<4;i++)
176 2 {
177 3 value[i][0] = 0; //k-1时刻测量值
178 3 value[i][1] = 0; //k-2时刻测量值
179 3 new_value[i] = -1; //当前k时刻测量值
C51 COMPILER V8.02 C_CODE 10/25/2006 07:30:58 PAGE 4
180 3 }
181 2
182 2 PortA000 = 0x81; //poweron();
183 2 Regstr = 0x81;
184 2 ACC = Regstr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -