📄 fuzzy_pid.lst
字号:
C51 COMPILER V7.06 FUZZY_PID 01/17/2007 13:01:08 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE FUZZY_PID
OBJECT MODULE PLACED IN fuzzy_PID.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE fuzzy_PID.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*********************************************************************************************************
-******
2 水箱温度模糊控制系统设计
3
4 设计思路:
5 将程序划分为三个模式:1 随机模式(随机显示温度)
6 2 修改模式(修改参数设定值)
7 3 测控模式(每个周期测一次温度并显示出来,输出通电脉冲 )
8
9 调试现象:
10 1 LED显示有问题
11 原因:温度转换时间过长(超过1S)
12 解决办法:去除1S延时
13 结果:LED正常显示,但是亮度不够
14
15 温度传感器DS1820测量温度
16 2007/01/15
17 8:56
18
19 致用楼311实验室
20 **********************************************************************************************************
-******/
21
22 #include <reg52.h>
23 #include <absacc.h>
24 #include<stdio.h>
25
26 #define led_data XBYTE[0xe000] /*显示数据端口*/
27 #define led_sel XBYTE[0xc000] /*显示器选择端口*/
28 #define key XBYTE[0xa000] /*键盘端口*/
29 #define uchar unsigned char
30 #define uint unsigned int
31 #define Temp_max 80
32
33 sbit ddata=P1^0; //输入温度数据端
34 sbit outPCM=P1^7; //输出通电脉冲
35 sbit LED1=P1^1; //上限温度报警指示灯
36 sbit LED2=P1^2; //采样周期指示灯
37 sbit LED3=P1^3; //通电指示灯
38
39 sbit LED4=P1^4; //测控模式指示灯
40 sbit LED5=P1^5; //修改模式指示灯
41 sbit LED6=P1^6; //随机模式指示灯
42
43 uchar code table[13]={ 0x3F,0x06,0x5B,0x4F,0x66,
44 0x6D,0x7D,0x07,0x7F,0x6F,0x39,0x63,0}; //LED显示变换 C O 灭
45
46 uchar code ttable[16]={0x0,0x01,0x01,0x02,0x03,0x03,
47 0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //小数位表,一位
48
49 uchar code Ucontrol[7][7]={{6,6,6,5,5,4,3}, //输出控制规则表
50 {6,5,4,3,3,2,1},
51 {4,3,2,1,0,0,0},
52 {3,2,1,0,0,0,0},
53 {3,2,1,0,0,0,0},
C51 COMPILER V7.06 FUZZY_PID 01/17/2007 13:01:08 PAGE 2
54 {2,1,0,0,0,0,0},
55 {1,0,0,0,0,0,0}};
56
57 uchar Temp[7]; //存储温度
58 //0 十位
59 //1 个位
60 //2 小数位
61 //3 温度标号 C
62 //4 前次温度
63 //5 当前温度
64
65 uchar para[5]={6,8,1,50,1}; //存储参数 0 Ts 采样周期
66 //1 TT 温度常数 ,改变论域 T0
67 //2 Ku 通电时间常数 Ton
68 //3 TR 给定温度
69 //4 Kec 温度变化常数 K
70
71 uchar count[3]; //中断次数
72 //count[0]输出控制时间的中断次数 ;
73 //count[1]采样中断次数 ;
74 //count[2]记录中断次数
75 bit serial_flag; //开启串口发送数据标志
76 bit read_flag; //采样标志
77 uchar outTime=0; //输出控制时间
78 uchar button; //按键1,2,3,4 分别表示K1 ,K2,K3,K4
79 uchar parameter=0; //参数标号
80 uchar show_LED[7]={2,0,0,7,0,1,12}; //LED灯显示值
81 /**************************************************************************************************
82 延时子程序
83 说明:uchar t 最多可延时256ms (uint t可用于更长时间的延时)
84 ***************************************************************************************************/
85 void delay(uchar t)
86 {
87 1 uchar i;
88 1 while(t--)
89 1 {
90 2 for(i=0;i<125;i++)
91 2 {
92 3 }
93 2 }
94 1 }
95 /***************************************************************************************************
96 LED显示子程序
97 功能:
98 ***************************************************************************************************/
99 void show(void)
100 {
101 1 uchar i;
102 1 uchar led_settle=0xfe;
103 1 for(i=0;i<7;i++)
104 1 {
105 2 led_sel=led_settle;
106 2 if(i==1)
107 2 led_data=table[show_LED[i]]+0x80;
108 2 else
109 2 led_data=table[show_LED[i]];
110 2 led_settle=(led_settle<<1)|(led_settle>>7);
111 2 delay(1);
112 2 }
113 1 /* led_sel=0xfe; //显示十位
114 1 led_data=table[show_LED[0]];
115 1 delay(1);
C51 COMPILER V7.06 FUZZY_PID 01/17/2007 13:01:08 PAGE 3
116 1
117 1 led_sel=0xfd;
118 1 led_data=table[show_LED[1]]+0x80; //显示个位
119 1 delay(1);
120 1
121 1 led_sel=0xfb; //显示小数位
122 1 led_data=table[show_LED[2]];
123 1 delay(1);
124 1
125 1
126 1 led_sel=0xf7; //显示温度表号 C
127 1 led_data=table[show_LED[3]];
128 1 delay(1);
129 1
130 1 led_sel=0xef;
131 1 led_data=table[show_LED[4]];
132 1 delay(1);
133 1
134 1
135 1 led_sel=0xdf; //显示输出通电时间
136 1 led_data=table[show_LED[5]];
137 1 delay(1); */
138 1
139 1 }
140 /***************************************************************************************************
141 键盘扫描子程序
142 ***************************************************************************************************/
143 void keyscan(void)
144 {
145 1 // uchar i;
146 1 // uchar key_settle=0xfe;
147 1 key=0xff; //为输入键盘信息作准备
148 1 led_sel=0xfe;
149 1 // led_data=0;
150 1
151 1 /* for(i=1;i<5;i++)
152 1 {
153 1 delay(4);
154 1 if(key==key_settle)
155 1 {
156 1 button=i;
157 1 while(key==key_settle);
158 1 }
159 1 key_settle=(key_settle<<1)|(key_settle>>7);
160 1 }
161 1 button=0; */
162 1
163 1 if(key==0xfe)
164 1 {
165 2 // for (i=0; i<500; i++);
166 2 delay(4);
167 2 button=1;
168 2 while(key==0xfe);
169 2 }
170 1
171 1 else if(key==0xfd)
172 1 {
173 2 // for (i=0; i<500; i++);
174 2 delay(4);
175 2 button=2;
176 2 while(key==0xfd);
177 2 }
C51 COMPILER V7.06 FUZZY_PID 01/17/2007 13:01:08 PAGE 4
178 1
179 1 else if(key==0xfb)
180 1 {
181 2 //for (i=0; i<500; i++);
182 2 delay(4);
183 2 button=3;
184 2 while(key==0xfb);
185 2 }
186 1 else if(key==0xf7)
187 1 {
188 2 //for (i=0; i<500; i++);
189 2 delay(4);
190 2 button=4;
191 2 while(key==0xf7);
192 2 }
193 1 else
194 1 button=0;
195 1
196 1 }
197 /***************************************************************************************************
198 初始化DS18B20子
199 产生复位脉冲
200 ***************************************************************************************************/
201 void TxReset(void)
202 {
203 1 uint i;
204 1 ddata=0;
205 1
206 1 i=100; //拉低约900us
207 1 while(i>0)
208 1 {
209 2 i--;
210 2 }
211 1
212 1 ddata=1;
213 1 i=4;
214 1 while(i>0)
215 1 {
216 2 i--;
217 2 }
218 1 }
219
220 /***************************************************************************************************
221 等待子程序
222 等待应答脉冲
223 ***************************************************************************************************/
224 void RxWait(void)
225 {
226 1 uint i;
227 1 while(ddata);
228 1 while(~ddata);
229 1 i=4;
230 1 while(i>0)
231 1 {
232 2 i--;
233 2 }
234 1 }
235 /***************************************************************************************************
236 读取一位数据子程序
237
238 ***************************************************************************************************/
239 bit RdBit(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -