📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 01/12/2009 19:00:37 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "lcd1602.h"
2 #include "DS1820.h"
3 #include"24C02.h"
4 //#include "isr.h"
5 //#include "hardware.h"
6 sbit ENTER=P1^0;
7 sbit UP=P1^1;
8 sbit DOWN=P1^2;
9 sbit MENU=P1^3;
10 sbit P3_0=P3^0;
11
12 uchar flag=0,flag2=0;
13 uchar display_code[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
14 uchar dispbuf[5]; //显示缓冲区
15 uchar temper[2];//存放温度的数组
16 HTemperature();
17 LTemperature();
18 //***********************************************************************
19 //正常读取温度时的显示函数
20 display()
21 { uchar temp;
22 1 float backbit;
23 1 readtemp();//读18B20
24 1 backbit = temper[0];//换成浮点数
25 1 backbit = backbit * 625;//乘以0.0625*100
26 1 temp = backbit;//取低2位整数部分
27 1 dispbuf[4] = temp%10 ;
28 1 temp = temp/10;
29 1 dispbuf[3] = temp%10 ;
30 1 temp = temper[1];//取整数部分
31 1 dispbuf[2] = temp%10; //整数个位
32 1 temp = temp/10;
33 1 dispbuf[1]= temp%10; //整数十位
34 1 temp = temp/10;
35 1 dispbuf[0]= temp%10; //整数百位
36 1 if(flag2==1)
37 1 lcd_strwdat( 0,"warnHTemperature " );
38 1 else
39 1 if(flag2==2)
40 1 lcd_strwdat( 0,"warnLTemperature " );
41 1 else
42 1 lcd_strwdat( 0,"Now Temperature " );
43 1 lcd_pos(0x42);
44 1 if(dispbuf[0]!=0) //如果上一百度则百数才显示
45 1 lcd_write(1,display_code[dispbuf[0]]);
46 1 lcd_write(1,display_code[dispbuf[1]]); //显示十位
47 1
48 1 lcd_write(1,display_code[dispbuf[2]]); //显示个位
49 1 lcd_write(1,0x2E);
50 1 lcd_write(1,display_code[dispbuf[3]]); //显示小数个位
51 1 lcd_write(1,display_code[dispbuf[2]]); //显示小数十位
52 1 }
53 //**********************************************************************
54
55 //***********************************************************************
C51 COMPILER V8.08 MAIN 01/12/2009 19:00:37 PAGE 2
56 //设置最高与最低值温度时的显示函数
57 display1(uchar temp)
58 {
59 1 lcd_pos(0x42);
60 1 if(temp/100!=0)
61 1 lcd_write(1,display_code[temp/100]); //显示百位
62 1 lcd_write(1,display_code[temp/10]); //显示十位
63 1 lcd_write(1,display_code[temp%10]); //显示个位
64 1 lcd_write(1,0x2E);
65 1 lcd_write(1,display_code[0]); //在设置温度时小数不可设置此时为0
66 1 lcd_write(1,display_code[0]);
67 1 }
68 //*************************************************************************
69
70 //*************************************************************************
71 //蜂鸣器函数
72 void beer()
73 { unsigned char j;
74 1 int i=100;
75 1 while(i--)
76 1 {
77 2 P3_0=0;
78 2 for(j=0;j<70;j++);
79 2 P3_0=1;
80 2 for(j=0;j<70;j++);
81 2 }
82 1 }
83 //************************************************************************
84
85 //**************************************************************************
86 //设置高温报警函数
87 HTemperature()
88 {
89 1 uchar htemp ;
90 1
91 1 lcd_strwdat( 0," H temp setting " ); //第一行显示高温设置
92 1 display1(I2CReadByte(1)); //读取上次设置高温值并显示
93 1 if(ENTER==0) //有键1按下
94 1 {
95 2 while(ENTER==0); //等待释放
96 2 lcd_init();
97 2 htemp=I2CReadByte(1); // 把上次设置高温值给某变量方便调整
98 2 beer(); //有键按下则蜂鸣器响一下
99 2 while(1) //在设置中循环直至设置完成
100 2 {
101 3 if(UP==0)
102 3 {
103 4 while(UP==0);
104 4 beer();
105 4 htemp++; //up按下时高温值加一
106 4 }
107 3 if(DOWN==0&&(htemp!=0)) //高温值不能小于0
108 3 {
109 4 while(DOWN==0);
110 4 beer();
111 4 htemp--; //down按下时高温值减一
112 4 }
113 3 if(flag==0) //此段功能是在设置时闪动flag值用中断改变
114 3 {
115 4 lcd_strwdat( 0," H temp setting " ); //第一行显示高温设置
116 4 display1(htemp);
117 4 }
C51 COMPILER V8.08 MAIN 01/12/2009 19:00:37 PAGE 3
118 3 else
119 3 lcd_strwdat( 0x40," " );
120 3 if(MENU==0) //MENU按下则退出设置
121 3 {
122 4 while(MENU==0);
123 4 I2CSendByte(1,htemp); //保存设置值
124 4 beer();
125 4 lcd_init(); //刷新lcd
126 4 break;
127 4 }
128 3 }
129 2 }
130 1 }
131 //*********************************************************************************
132
133 //**********************************************************************************
134 //设置低温报警函数
135 //原理与高温报警函数相同
136 LTemperature()
137 { uchar ltemp=0;
138 1 lcd_strwdat( 0," L temp setting" );
139 1 display1(I2CReadByte(2));
140 1 if(ENTER==0)
141 1 { while(ENTER==0);
142 2 lcd_init();
143 2 ltemp=I2CReadByte(2);
144 2 beer();
145 2 while(1)
146 2 {
147 3 if(UP==0)
148 3 {
149 4 while(UP==0);
150 4 beer();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -