📄 zly.lst
字号:
C51 COMPILER V7.06 ZLY 11/18/2005 20:42:12 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ZLY
OBJECT MODULE PLACED IN zly.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE zly.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <AT89X51.H>//6MHz
2 #define uchar unsigned char
3 #define uint unsigned int
4 #define reset() {WDT=0x1e;WDT=0xe1;}//看门狗复位宏定义
5 sfr WDT=0xa6; //定义看门狗寄存器
6 uchar code DATA_7SEG[10]={0x3f,0x06,0x5b,0x4f,0x66,
7 0x6d,0x7d,0x07,0x7f,0x6f};/*0~9的数码管段码*/
8 //============================================================
9 uchar data deda; /*100mS计数单元*/
10 uchar data sec; //计时秒
11 uchar data min; //计时分
12 char data set_min; //设定分
13 uchar data cnt_5s;
14 uchar data ram_flag;
15 char data powout_flag;
16 bit work_status;
17 bit flag_500ms;
18 bit bz_flag=0; //蜂鸣标志
19 bit startflag_5s; //5S标志
20 bit start_flag;
21 bit pout_flag;
22 //===========================================================
23 sbit h_pow_out=P2^7; //驱动H
24 sbit m_pow_out=P2^6; //驱动M
25 sbit l_pow_out=P2^5; //驱动L
26 sbit g_x1=P2^2; //个位显示
27 sbit g_x2=P2^3;
28 sbit s_x1=P2^0; //十位显示
29 sbit s_x2=P2^1;
30 sbit r_led=P3^1;
31 sbit g_led=P3^0;
32 sbit on_off_key=P3^2;
33 sbit timeinc_key=P3^3;
34 sbit timedec_key=P3^4;
35 sbit pow_sel_key=P3^5;
36 sbit run_stop_key=P3^6;
37 sbit bz_out=P2^4;
38 //==================================================
39 void init(void)
40 {
41 1 sec=min=set_min=0;
42 1 cnt_5s=0;
43 1 powout_flag=0;
44 1 work_status=0;
45 1 flag_500ms=0;
46 1 bz_flag=0;
47 1 startflag_5s=0;
48 1 start_flag=0;
49 1 pout_flag=0;
50 1 }
51 /*=========定时器T0初始化======*/
52 void init_timer0()
53 {
54 1 TMOD=0x11;//T0、T1方式1
55 1 TH0=-(50235/256);//100mS初值
C51 COMPILER V7.06 ZLY 11/18/2005 20:42:12 PAGE 2
56 1 TL0=-(50235%256);
57 1 ET0=1;TR0=1; //T0开中断,启动T0
58 1 }
59 //======================================================
60 /*延时k*1mS子函数*/
61 void delay(uint k)
62 {
63 1 uint i,j;
64 1 for(i=0;i<k;i++){reset()
65 2 for(j=0;j<60;j++)
66 2 {;}}
67 1 }
68 /*定时器T1初始化*/
69 void init_timer1()
70 {
71 1 TH1=-(2500/256); //5mS初值
72 1 TL1=-(2500%256);
73 1 ET1=1; TR1=1; //T1开中断,启动T1
74 1 }
75 //======================================================
76 /*100mS定时中断服务子函数*/
77 void timer0(void) interrupt 1 using 1
78 {
79 1 TH0=-(50235/256);// 重装定时初值
80 1 TL0=-(50235%256);
81 1 deda++; //计时单元递加
82 1 if(startflag_5s)cnt_5s++;//启动5秒计时
83 1 if(deda>=10){sec++;deda=0;}// 秒加1
84 1 if(cnt_5s>=50){pout_flag=1;cnt_5s=50;}//5秒到,输出标志置位,
85 1 //同时5秒计时值固定为5秒
86 1 if(sec>=60){set_min--;sec=0;}//60秒到,设定分递减
87 1 if(set_min<=0)set_min=0;// 最小为0
88 1 if((set_min==0)&&(work_status==0)){startflag_5s=0;}// 若设定分为0且工作状态为0,
89 1 //5秒启动标志复位
90 1 else {startflag_5s=1;}// 否则5秒启动标志置位
91 1 if((set_min<=3)&&(work_status==0))bz_flag=1;// 若设定分小于3且工作状态为0,
92 1 //蜂鸣器启动标志置位
93 1 else bz_flag=0; //否则蜂鸣器启动标志复位
94 1 }
95 //===========================================================
96 /*T1 5ms定时中断服务子*/
97 void timer1(void) interrupt 3 using 2
98 {static bit RL;static uchar cnt500;
99 1 cnt500++;if(cnt500==100){cnt500=0;flag_500ms=!flag_500ms;}// 每0.5秒,标志取反
100 1 RL=!RL;
101 1 TH1=-(2500/256);// 重装5mS定时初值
102 1 TL1=-(2500%256);
103 1 if(start_flag)// 若系统启动
104 1 {if(work_status==0)// 若自动时控工作
105 2 { if(RL){P1=DATA_7SEG[set_min/10];// 点亮十位数码管
106 4 s_x1=0;s_x2=0;g_x1=1;g_x2=1;}
107 3 else{P1=DATA_7SEG[set_min%10];// 点亮个位数码管
108 4 s_x1=1;s_x2=1;g_x1=0;g_x2=0;}
109 3 }
110 2 //===========================================
111 2 else//否则处于持续工作时
112 2 { if(flag_500ms){if(RL){P1=0x40;s_x1=0;s_x2=0;// 点亮g段
113 5 g_x1=1;g_x2=1;}
114 4 else {P1=0x40;s_x1=1;s_x2=1;// 点亮g段
115 5 g_x1=0;g_x2=0;}
116 4 }
117 3 else{P1=0x00;s_x1=1;s_x2=1;g_x1=1;g_x2=1;}
C51 COMPILER V7.06 ZLY 11/18/2005 20:42:12 PAGE 3
118 3 }
119 2 }
120 1 else {P1=0x00;s_x1=1;s_x2=1;g_x1=1;g_x2=1;} // 若系统关闭,熄灭数码管
121 1 }
122
123
124 /**************************************************/
125 void key(void) //扫描时间设定键
126 {uchar temp,ss;
127 1 delay(10);
128 1 ss=P3;P3=0xff;
129 1 if(P3!=0xff)
130 1 {delay(10);temp=P3;P3=ss;
131 2 if(temp==0xfb){start_flag=!start_flag;ram_flag=0x55;delay(300);}// 按下开/关键,
132 2 //系统启动标志取反,同时防干扰标志写入55H
133 2 if(start_flag) //若处于开机状态,根据按键状态,进行功能散转
134 2 {
135 3 switch(temp)
136 3 {
137 4
138 4 case 0xf7:{set_min++;bz_flag=0;startflag_5s=1;cnt_5s=0;// 设定分递增
139 5 if(set_min>=60)set_min=60;delay(300);}break;
140 4 case 0xef:{set_min--;bz_flag=0;startflag_5s=1;cnt_5s=0;// 设定分递减
141 5 if(set_min<=00)set_min=0;delay(300);}break;
142 4 case 0xdf:{powout_flag++;if(powout_flag>=3)powout_flag=0;// 切换
143 5 //输出功率
144 5 delay(300);}break;
145 4 case 0xbf:{work_status=!work_status;delay(300);}break;// 选择自动时控
146 4 //或持续工作
147 4 default:break;
148 4 }
149 3 }
150 2 else //否则处于关机状态,设定分清零
151 2 {set_min=0;}
152 2 //===================================
153 2 if(work_status==0){if(set_min>0)startflag_5s=1;// 工作状态为0,
154 3 //当设定分大于0,启动5秒标志
155 3 else startflag_5s=0;}
156 2 else {startflag_5s=1;}// 工作状态为1,也启动5秒标志
157 2 }
158 1 }
159
160 /**************************************/
161 void power_out(uchar powout_flag)// 切换高中低三档温度
162 {
163 1 if(pout_flag==1)
164 1 {
165 2 switch(powout_flag)
166 2 {
167 3 case 0:m_pow_out=0;h_pow_out=1;l_pow_out=1;break;
168 3 case 1:h_pow_out=0;m_pow_out=1;l_pow_out=1;break;
169 3 case 2:l_pow_out=0;m_pow_out=1;h_pow_out=1;break;
170 3 default:break;
171 3 }
172 2 }
173 1 else {m_pow_out=1;h_pow_out=1;l_pow_out=1;}
174 1 if(start_flag==0)
175 1 {m_pow_out=1;h_pow_out=1;l_pow_out=1;pout_flag=0;bz_flag=0;bz_out=1;}
176 1 if(work_status==1)startflag_5s=1;
177 1 else {if(set_min==0)
178 2 {m_pow_out=1;h_pow_out=1;l_pow_out=1;
179 3 pout_flag=0;bz_flag=0;bz_out=1;startflag_5s=0;}
C51 COMPILER V7.06 ZLY 11/18/2005 20:42:12 PAGE 4
180 2 }
181 1 //=====================================================
182 1 if((bz_flag)&&(pout_flag)){if(flag_500ms)bz_out=0;else bz_out=1;}
183 1 else bz_out=1;
184 1 }
185 /*******************************************************/
186 /*主函数*/
187 void main()
188 {
189 1 if(ram_flag!=0x55)init();//上电时初始化
190 1 init_timer0(); //定时器T0初始化
191 1 init_timer1(); //定时器T1初始化
192 1 EA=1; //开总中断
193 1
194 1 while(1) //无限循环
195 1 {
196 2 if(!start_flag){g_led=0;r_led=1;}// 系统关闭,绿灯亮,红灯灭
197 2 else {g_led=1;r_led=0;}// 否则系统启动,红灯亮,绿灯灭
198 2 key(); //扫描按键
199 2 power_out(powout_flag); //调用功率切换子函数
200 2 reset() //看门狗复位
201 2 }
202 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 650 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 1
IDATA SIZE = ---- ----
BIT SIZE = 7 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -