📄 all.lst
字号:
C51 COMPILER V7.20 ALL 01/16/2009 13:29:33 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE ALL
OBJECT MODULE PLACED IN all.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE all.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*项目名称:数字式多路温度检测、显示与报警系统*/
2 /*创建 人:孙云辉 */
3 /*创建时间:2008.05.25 */
4 /*修改时间:2008.06.01 */
5 /*功 能:全部功能 */
6 /*版 本:V1.0 */
7
8 #include<reg51.h>
9
10 /////////////////////////////////////////////////
11 /********************基本程序*******************/
12 /////////////////////////////////////////////////
13
14 /*短延时程序16us为单位 延时时间=24+Num*16 微秒*/
15 void Delay_short(unsigned int n)
16 {
17 1 unsigned int i;
18 1 for(i=0;i<n;i++)
19 1 {}
20 1 }
21
22 /*长延时程序,以5ms为单位*/
23 void Delay_long(unsigned char N)
24 { unsigned char i;
25 1 unsigned int j;
26 1 for(i=0;i<N;i++)
27 1 { for(j=0;j<315;j++) //一个循环16us,共5ms
28 2 {}
29 2 }
30 1 }
31
32 /////////////////////////////////////////////////
33 /*******************键盘部分********************/
34 /////////////////////////////////////////////////
35
36 /*键盘键值定义*/
37 #define MENU 0xee //KEY1 菜单键
38 #define UP 0xde //KEY2 菜单上翻或加一键
39 #define SET 0xeb //KEY3 确认键
40 #define CHANGE 0xe7 //KEY4 搜索ROM键
41 #define LEFT 0xed //KEY5 光标左移
42 #define DOWN 0xdd //KEY6 菜单下翻或减一键
43 #define RIGHT 0xdb //KEY7 光标右移
44 #define QUIT 0xd7 //KEY8 退出键
45
46 /*键盘接口定义*/
47 sbit R1= P2^4; //第一列按键
48 sbit R2= P2^5; //第二列按键
49
50 /*键盘扫描程序,返回键值*/
51 unsigned char Key_scan(void)
52 {
53 1 unsigned char i,j;
54 1 R1=0; //扫描第一列
55 1 i=P2; //读取键值
C51 COMPILER V7.20 ALL 01/16/2009 13:29:33 PAGE 2
56 1 Delay_long(2); //延时10ms去抖动
57 1 j=P2; //再次读取键值
58 1 R1=1; //第一列初始化
59 1 if(i==j) //两次键值相同表示有键按下
60 1 {
61 2 switch(j)
62 2 {
63 3 case 0xee: return(j);break;//KEY1
64 3 case 0xed: return(j);break;//KEY5
65 3 case 0xeb: return(j);break;//KEY3
66 3 case 0xe7: return(j);break;//KEY4
67 3 }
68 2
69 2 }
70 1 R2=0;
71 1 i=P2;
72 1 Delay_long(2);
73 1 j=P2;
74 1 R2=1;
75 1 if(i==j)
76 1 {
77 2 switch(j)
78 2 {
79 3 case 0xde: return(j);break;//KEY2
80 3 case 0xdd: return(j);break;//KEY6
81 3 case 0xdb: return(j);break;//KEY7
82 3 case 0xd7: return(j);break;//KEY8
83 3 default:return(0); //无键按下返回0
84 3 }
85 2 }
86 1
87 1 }
88
89 /////////////////////////////////////////////////
90 /*******************报警部分********************/
91 /////////////////////////////////////////////////
92
93 /*蜂鸣器接口*/
94 sbit voice=P1^7;
95
96 bit Alarm_flag; //报警标志位 1报警 0取消报警
97
98 /*报警子程序 */
99 /*全局变量:Alarm_flag=1报警=0报警解除*/
100 void Alarm(void)
101 {
102 1 unsigned char i;
103 1 if(Alarm_flag==1) //当Alarm_flag有效
104 1 {
105 2 for(i=0;i<10;i++) //报警一段时间
106 2 {
107 3 voice=~voice;
108 3 Delay_long(5);
109 3 }
110 2 }
111 1 }
112
113 /////////////////////////////////////////////////
114 /********************LCD部分********************/
115 /////////////////////////////////////////////////
116
117 /*LCD接口定义*/
C51 COMPILER V7.20 ALL 01/16/2009 13:29:33 PAGE 3
118 sbit LcdRS = P1^0; //lcd数据/命令选择端 数据1命令0
119 sbit LcdRW = P1^1; //lcd读/写选择端 读1写0
120 sbit LcdEn = P1^2; //lcd使能控制端 1有效
121 sfr LcdIO = 0x80; //lcd数据接口 P0=0x80
122
123
124 /****向LCD写入命令或数据部分****/
125 #define LCD_COMMAND 0 // 输出指令
126 #define LCD_DATA 1 // 输出数据
127
128 #define LCD_CLEAR_SCREEN 0x01 // 清屏指令
129 #define LCD_HOME 0x02 // 光标返回原点指令
130
131 /*写LCD子程序 */
132 /*入口参数:数据style=1 指令style=0 input:写入的内容*/
133
134 void LCD_Write(bit style, unsigned char input)
135 {
136 1 LcdRS=style; //数据style=1 指令style=0
137 1 LcdRW=0; //写
138 1 LcdIO=input; //P0口输出
139 1 Delay_short(10); //延时
140 1 LcdEn=1; //lcd使能
141 1 Delay_short(10); //延时
142 1 LcdEn=0; //停止
143 1 }
144
145 /****初始化LCD程序****/
146 void LCD_Initial()
147 {
148 1 Delay_long(6); //延迟5*6=30ms
149 1 LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
150 1 LCD_Write(LCD_COMMAND,0x38);
151 1 LCD_Write(LCD_COMMAND,0x38); //发送三遍
152 1 Delay_short(2); //延迟大于39us
153 1 LCD_Write(LCD_COMMAND,0x0c); //显示模式设置:开启显示, 无光标 0x0c
154 1 Delay_short(2); //延迟大于39us
155 1 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏 0x01
156 1 Delay_short(100); //延迟大于1.53ms
157 1 LCD_Write(LCD_COMMAND,0x06); //输入模式设置:AC递增, 画面不动 0x06
158 1 }
159
160
161 /*液晶字符输入的位置定位程序*/
162 /*入口参数:x范围:0-15 y范围:1,2*/
163 void GotoXY(unsigned char x, unsigned char y)
164 {
165 1 unsigned char address;
166 1 if(y==1)
167 1 address=0x80+x; //y=1显示在第一行
168 1 else
169 1 address=0xc0+x; //y=2显示在第二行
170 1 LCD_Write(LCD_COMMAND, address);
171 1 }
172
173 /*将字符串输出到液晶显示函数*/
174 /*入口参数:字符串指针 */
175 void Print(unsigned char *str)
176 {
177 1 while(*str!='\0')
178 1 {
179 2 LCD_Write(LCD_DATA,*str);
C51 COMPILER V7.20 ALL 01/16/2009 13:29:33 PAGE 4
180 2 str++;
181 2 }
182 1 }
183
184 /////////////////////////////////////////
185 /***********DS18B20部分*****************/
186 /////////////////////////////////////////
187
188 /*DS18B20接口定义*/
189 sbit DQ =P1^6; //单总线接口
190
191 /*全局变量定义*/
192 unsigned char DS_Temp[5][3]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; //存放温度值(负数用补码表示)
193 //0:符号1:整数2:小数
194 unsigned char DS_Tl[5]={0,0,0,0,0}; //温度报警上限
195 unsigned char DS_Th[5]={0,0,0,0,0}; //温度报警下限
196 unsigned char ID[5][8]={{0},{0},{0},{0},{0}}; //存放序列号
197
198 //*DS18B20指令定义*/
199 #define READ_ROM 0x33 //读ROM指令
200 #define MATCH_ROM 0x55 //匹配ROM指令
201 #define SKIP_ROM 0xCC //跳过ROM指令
202 #define ALARM_SEARCH 0xEC //报警搜索指令
203 #define CONVERT_T 0x44 //温度转换指令
204 #define WRITE_SCR 0x4E //写暂存器指令
205 #define READ_SCR 0xBE //读暂存器指令
206 #define COPY_SCR 0x48 //复制暂存器指令
207
208
209
210 /*ds18b20初始化函数 返回初始化状态*/
211 unsigned char DS_Reset(void)
212 {
213 1 unsigned char presence;
214 1 DQ = 1; //DQ复位
215 1 Delay_short(1); //稍做延时
216 1 DQ = 0; //单片机将DQ拉低
217 1 Delay_short(29); //精确延时480us
218 1 DQ = 1; //拉高总线
219 1 Delay_short(3); //等待存在信号
220 1 presence=DQ; //稍做延时后 如果presence=0则初始化成功 =1则初始化失败
221 1 Delay_short(25);
222 1 if(presence==0)
223 1 return 1; //初始化成功返回1
224 1 else
225 1 return 0; //初始化失败返回0
226 1 }
227
228 /*从ds18b20读一个字节 dat为返回值*/
229 unsigned char DS_ReadByte(void)
230 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -