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