📄 chengxu.lst
字号:
C51 COMPILER V9.00 CHENGXU 12/28/2012 00:49:21 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE CHENGXU
OBJECT MODULE PLACED IN chengxu.OBJ
COMPILER INVOKED BY: D:\keil2\C51\BIN\C51.EXE chengxu.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 汇诚科技
3
4 实现功能:此版配套测试程序
5 使用芯片:STC12C2052AD
6 晶振:11.0592MHZ
7 波特率:9600
8 编译环境:Keil
9 作者:yang
10 QQ:790244909
11 网站:www.ourhc.cn
12 淘宝店:汇诚科技 华龙电子直销:http://hlelectrony.taobao.com
13 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
14 /********************************************************************
15
16 ********************************************************************/
17 #include<STC12C5A60S2.H> //库文件
18 #include <intrins.h>
19 #include<eprom.h>
20 #define uchar unsigned char//宏定义无符号字符型
21 #define uint unsigned int //宏定义无符号整型
22 #define DUAN P2 //P0口控制段
23 #define WEI P1 //P2口控制位
24 /********************************************************************
25 初始定义
26 *********************************************************************/
27 //数码管显示段码
28 code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};
29 //数码管显示位码
30 sbit wei1=P1^0; //位的控制端
31 sbit wei2=P1^1;
32 sbit wei3=P1^2;
33 sbit wei4=P1^3;
34
35 uchar numb[4]; //定义字符串用于数值转换
36 //按键
37 sbit key2=P3^2;
38 sbit key1=P3^3;
39 //模拟量输入端
40 sbit A1=P1^5;
41 sbit A2=P1^6;
42 //输入控制端
43 sbit IN1=P3^7;
44 sbit IN2=P1^7;
45 //输出控制端
46 sbit OUT1=P3^4;
47 sbit OUT2=P3^5;
48 //全局变量和标着位变量
49 uchar timesnum;
50 uchar setnum;
51 uchar setnum1;
52 uint xstimes=180;
53 bit flag=0;
54 bit zfflag=0;
55 bit xsflag=0;
C51 COMPILER V9.00 CHENGXU 12/28/2012 00:49:21 PAGE 2
56 bit changeflag=0;
57 /********************************************************************
58 延时函数
59 *********************************************************************/
60 void delay(uchar x) //延时程序 0.002秒
61 {
62 1 uchar m,n,s;
63 1 for(m=x;m>0;m--)
64 1 for(n=20;n>0;n--)
65 1 for(s=248;s>0;s--);
66 1 }
67 /********************************************************************
68 求值函数
69 *********************************************************************/
70 void t_to_dis(uchar num)
71 {
72 1 uint x;
73 1 x=num*4;
74 1 numb[0]=0; //显示千位
75 1 numb[1]=x/100; //显示百位
76 1 numb[2]=x%100/10; //显示十位
77 1 numb[3]=x%10; //显示个位
78 1 }
79
80 /********************************************************************
81 显示函数
82 *********************************************************************/
83 void display() //显示函数
84 {
85 1 WEI&=0XF0;
86 1 DUAN=seg7code[numb[0]];
87 1 wei1=1;
88 1 delay(2);
89 1
90 1 WEI&=0XF0;
91 1 DUAN=seg7code[numb[1]];
92 1 wei2=1;
93 1 delay(2);
94 1
95 1 WEI&=0XF0;
96 1 DUAN=seg7code[numb[2]];
97 1 wei3=1;
98 1 delay(2);
99 1
100 1 WEI&=0XF0;
101 1 DUAN=seg7code[numb[3]];
102 1 wei4=1;
103 1 delay(2);
104 1 WEI&=0XF0;
105 1 }
106 /********************************************************************
107 IO口初始化函数
108 *********************************************************************/
109 void init_all(void)
110 {
111 1 P2M1=0;
112 1 P2M0=0xff;
113 1 P1M1=0x80;
114 1 P1M0=0x0f;
115 1 P3M1|=0x80;
116 1 P3M0&=0x7f;
117 1 }
C51 COMPILER V9.00 CHENGXU 12/28/2012 00:49:21 PAGE 3
118 /********************************************************************
119 按键扫描函数
120 *********************************************************************/
121 void key_scan(void)
122 {
123 1 if(xsflag==1)
124 1 t_to_dis(setnum); //数值变换
125 1 else
126 1 t_to_dis(timesnum);
127 1
128 1 if(key1==0) //增加次数
129 1 {
130 2 delay(5);
131 2 if(key1==0)
132 2 {
133 3 while(!key1);
134 3 xsflag=1;
135 3 setnum++; //keynum=0为模式0,继电器吸合300ms ,keynum=1继电器吸合12s
136 3 if(setnum>=100)
137 3 setnum=100;
138 3 IapEraseSector(0); //擦除扇区
139 3 IapProgramByte(5,setnum);
140 3 xstimes=0;
141 3 changeflag=1;
142 3 }
143 2 }
144 1 if(key2==0) //按键扫描,key2按下模式变化一次
145 1 {
146 2 delay(5);
147 2 if(key2==0)
148 2 {
149 3 while(!key2);
150 3 xsflag=1;
151 3 setnum--; //减小次数
152 3 if(setnum==0||setnum>=120)
153 3 setnum=0;
154 3 IapEraseSector(0); //擦除扇区
155 3 IapProgramByte(5,setnum);
156 3 xstimes=0;
157 3 changeflag=1;
158 3 }
159 2 }
160 1 }
161 /********************************************************************
162 定时器T0初始化
163 *********************************************************************/
164 void timer0init(void)
165 {
166 1 TMOD=0X01; //定义定时器工作方式
167 1 TH0=(65536-25000)/256;
168 1 TL0=(65536-25000)%256;
169 1 ET0=1;
170 1 TR0=1;
171 1 EA=1;
172 1 }
173 /********************************************************************
174 主函数
175 *********************************************************************/
176 void main()
177 {
178 1 init_all(); //初始化IO
179 1 timer0init(); //定时器初始化
C51 COMPILER V9.00 CHENGXU 12/28/2012 00:49:21 PAGE 4
180 1 setnum1=setnum=IapReadByte(5);
181 1 while(1)
182 1 {
183 2
184 2
185 2 key_scan(); //键盘扫描
186 2
187 2 if(xstimes>=180)
188 2 xsflag=0;
189 2
190 2
191 2 if(IN2==0&&flag==0) //寻找位置
192 2 {
193 3 delay(10);
194 3 if(IN2==0)
195 3 {
196 4 delay(2);
197 4 //while(!IN1);
198 4 OUT1=!OUT1;
199 4
200 4 flag=1;
201 4 }
202 3 }
203 2
204 2
205 2 if(flag==1&&IN1==0) //flag=1上电不计数,找到位置开始计数
206 2 {
207 3 delay(5);
208 3 if(IN1==0)
209 3 {
210 4 delay(5);
211 4 while(!IN1);
212 4
213 4 if(zfflag==0&×num<(setnum1+1))
214 4 timesnum++;
215 4 else
216 4 timesnum--;
217 4
218 4 if(timesnum>=(setnum1+1))
219 4 {
220 5 delay(60);
221 5 zfflag=1;
222 5 OUT1=!OUT1;
223 5 }
224 4
225 4 if(timesnum==0)
226 4 {
227 5 delay(5);
228 5 if(timesnum==0)
229 5 {
230 6
231 6 t_to_dis(timesnum);
232 6 zfflag=0;
233 6 if(changeflag==1)
234 6 {
235 7 changeflag=0;
236 7 setnum1=setnum;
237 7 }
238 6 while(IN2);
239 6 OUT1=!OUT1;
240 6 }
241 5 }
C51 COMPILER V9.00 CHENGXU 12/28/2012 00:49:21 PAGE 5
242 4
243 4 }
244 3 }
245 2 }
246 1 }
247 /********************************************************************
248 定时器T1中断函数
249 *********************************************************************/
250 void timer0(void)interrupt 1 using 1
251 {
252 1 TH0=(65536-25000)/256;
253 1 TL0=(65536-25000)%256;
254 1 xstimes++;
255 1 display(); //显示函数
256 1
257 1 }
258 /********************************************************************
259 结束
260 *********************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 582 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 ----
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -