📄 main.lst
字号:
16 =2 //等待时间约为(I2C_STOP_WAIT_VALUE*8)个机器周期
17 =2 //对于多数器件取值为1即可;但对于某些器件来说,较长的延时是必须的
18 =2 #define I2C_STOP_WAIT_VALUE 1
19 =2
20 =2
21 =2 //I2C总线初始化,使总线处于空闲状态
22 =2 void I2C_Init();
23 =2
24 =2
25 =2 //主机通过I2C总线向从机发送多个字节的数据
26 =2 bit I2C_Puts(unsigned char SlaveAddr, unsigned char SubAddr, unsigned char Size, char *dat);
27 =2
28 =2 bit I2C_Puts_s(unsigned char SlaveAddr, unsigned char SubAddr) ;
29 =2
30 =2 //主机通过I2C总线向从机发送1个字节的数据
31 =2 bit I2C_Put(unsigned char SlaveAddr, unsigned char SubAddr, char dat);
32 =2
33 =2
34 =2 //主机通过I2C总线从从机接收多个字节的数据
35 =2 bit I2C_Gets(unsigned char SlaveAddr, unsigned char SubAddr, unsigned char Size, char *dat);
36 =2
37 =2
38 =2 //主机通过I2C总线从从机接收1个字节的数据
39 =2 bit I2C_Get(unsigned char SlaveAddr, unsigned char SubAddr, char *dat);
40 =2
41 =2
42 =2 #endif
43 =2
15 =1 #include "key.h"
1 =2 #ifndef _KEY_H
2 =2 #define _KEY_H
3 =2
4 =2 //定义按键
5 =2 sbit KEY1 = P3^2; //按键1
6 =2 sbit KEY2 = P3^3; //按键2
7 =2
8 =2 sbit Buzzer=P2^4;//????
9 =2
10 =2 #define TemperatureMax 50
11 =2
12 =2 #define TemperatureMin 5
13 =2
14 =2 void INTInit();
C51 COMPILER V8.16 MAIN 10/04/2008 14:53:01 PAGE 6
15 =2
16 =2 #endif
17 =2
16 =1
17 =1 sbit LEDCool = P2^0; //定义LED由P0.0控制
18 =1 sbit LEDHot = P2^1; //定义LED由P0.0控制
19 =1 sbit LEDSet = P2^2; //定义LED由P0.0控制
20 =1
21 =1
22 =1 //unsigned char Temperature_Set;//设定温度
23 =1
24 =1 #endif
2
3 extern Temperature_Set;//设定温度
4 int CurrentTemp;
5 void LEDDisp(int t)
6 {
7 1 if (Temperature_Set==t/8)
8 1 {
9 2 LEDSet=0;
10 2 LEDCool=1;
11 2 LEDHot=1;
12 2 // printf("LEDSet!");
13 2 }
14 1 else if (t/8>Temperature_Set)
15 1 {
16 2 LEDSet=1;
17 2 LEDCool=0;
18 2 LEDHot=1;
19 2 // printf("LEDCool!");
20 2 }
21 1 else
22 1 {
23 2 LEDSet=1;
24 2 LEDCool=1;
25 2 LEDHot=0 ;
26 2 //printf("LEDHot!");
27 2 }
28 1 }
29
30 /*
31 T1的中断处理函数,实现led的定时刷新
32 */
33 void T1INTSVC() interrupt 3
34 {
35 1 //0123456789的数码管字型数据
36 1 code unsigned char SegTab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
37 1 //0 1 2 3 4 5 6 7 8 9 no
38 1
39 1 code unsigned char ComTab[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
40 1 static unsigned char n = 0;
41 1 unsigned char *Dispbuf=0;
42 1 TR1 = 0;
43 1 TH1 = 0xFC;
44 1 TL1 = 0x66;
45 1 TR1 = 1 ;
46 1
47 1 Dispbuf = DispTemp(CurrentTemp);
48 1
49 1
50 1 // seg--- P0
51 1 //com ---P1
C51 COMPILER V8.16 MAIN 10/04/2008 14:53:01 PAGE 7
52 1 P1=0xff;
53 1 if (n==3)
54 1 {
55 2 //P0=(SegTab[mydata]);//dot on
56 2 P0=SegTab[*(Dispbuf+n)]|0x80;
57 2 }
58 1 else
59 1 {
60 2 P0=SegTab[*(Dispbuf+n)];
61 2 }
62 1 P1=~ComTab[n];
63 1 n++;
64 1 n &= 0x07;
65 1 // }
66 1
67 1 // uchar Dispbuf[8]={0};
68 1 // disp(225);//disp temp
69 1
70 1 // DispStr(Dispbuf);
71 1
72 1 LEDDisp(CurrentTemp);
73 1 }
74
75 /*
76 函数:SysInit()
77 功能:系统初始化
78 */
79 void T1Init()
80 {
81 1 TMOD &= 0x0F;
82 1 TMOD |= 0x10; //设置T0为16位定时器
83 1 TH1 = 0xFC;
84 1 TL1 = 0x66;
85 1 TR1 = 1;
86 1 ET1 = 1;
87 1 }
88
89 void main()
90 {
91 1 unsigned char commend[]={0xac,0x02,0xee,0xa1,0x28,0x00,0xa2,0x23,0x00};
92 1 // EA = 0; //禁止总中断
93 1 //系统初始化
94 1 T0Init();
95 1 T1Init();
96 1 //UartInit();
97 1 //DispInit(); //数码管扫描显示初始化
98 1 I2C_Init(); //初始化I2C总线
99 1 INTInit();
100 1 EA=1;
101 1 //LED init
102 1 LEDCool=1;
103 1 LEDHot=1;
104 1 LEDSet=1;
105 1 // KEY1=1;
106 1 //KEY2=1;
107 1 Temperature_Set=28;
108 1 I2C_Puts(0x90, 0xac, 1, &commend[1]);
109 1 I2C_Puts_s(0x90, 0xee);
110 1 //I2C_Puts(0x90, 0xee, 0, &commend[0]);
111 1 I2C_Puts(0x90, 0xa1, 2, &commend[4]);
112 1 I2C_Puts(0x90, 0xa2, 2, &commend[7]);
113 1 Delay(50);
C51 COMPILER V8.16 MAIN 10/04/2008 14:53:01 PAGE 8
114 1 CurrentTemp=LM75A_GetTemp();
115 1 Buzzer=1;
116 1 //printf("SysInit ok!");
117 1 // int t=0;
118 1 while(1)
119 1 {
120 2
121 2 // disp(225);//disp temp
122 2
123 2 // DispStr(Dispbuf);
124 2
125 2 // LEDDisp(225) ;
126 2 PCON|=0x01;
127 2 CurrentTemp=LM75A_GetTemp();
128 2 //printf("temp test:%ud\n",LM75A_GetTemp());
129 2 // printf("temp set:%ud\n",Temperature_Set);
130 2 //test lcd
131 2 // seg--- P0
132 2 //com ---P1
133 2 // P0=8;
134 2 // P1=8;
135 2
136 2 //test led
137 2 /*
138 2 LEDCool = P2^0; //定义LED由P0.0控制
139 2 LEDHot = P2^1; //定义LED由P0.0控制
140 2 LEDSet = P2^2; //定义LED由P0.0控制
141 2 */
142 2
143 2 //LEDCool=1;
144 2 //LEDHot=0;
145 2 //LEDSet=1;
146 2
147 2 //test buzzer
148 2 //Buzzer=~Buzzer;
149 2
150 2
151 2 //LEDDisp(LM75A_GetTemp());
152 2 // uchar Dispbuf[8]={0};
153 2 // disp(Dispbuf,225);//disp temp
154 2
155 2 // DispStr(Dispbuf);
156 2 //DispStr(buf1);
157 2 // LEDDisp(225);
158 2 //disp(LM75A_GetTemp());//disp temp
159 2
160 2 //Delay(10);
161 2
162 2 //disp();//disp temp set
163 2 }
164 1
165 1 }
166
167
C51 COMPILER V8.16 MAIN 10/04/2008 14:53:01 PAGE 9
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _LEDDisp (BEGIN)
; SOURCE LINE # 5
;---- Variable 't' assigned to Register 'R2/R3' ----
; SOURCE LINE # 6
; SOURCE LINE # 7
0000 7C00 MOV R4,#00H
0002 7D08 MOV R5,#08H
0004 120000 E LCALL ?C?SIDIV
0007 EF MOV A,R7
0008 B5000B E CJNE A,Temperature_Set+01H,?C0001
000B EE MOV A,R6
000C B50007 E CJNE A,Temperature_Set,?C0001
; SOURCE LINE # 8
; SOURCE LINE # 9
000F C2A2 CLR LEDSet
; SOURCE LINE # 10
0011 D2A0 SETB LEDCool
; SOURCE LINE # 11
0013 D2A1 SETB LEDHot
; SOURCE LINE # 13
0015 22 RET
0016 ?C0001:
; SOURCE LINE # 14
0016 D3 SETB C
0017 EF MOV A,R7
0018 9500 E SUBB A,Temperature_Set+01H
001A E500 E MOV A,Temperature_Set
001C 6480 XRL A,#080H
001E F8 MOV R0,A
001F EE MOV A,R6
0020 6480 XRL A,#080H
0022 98 SUBB A,R0
0023 4007 JC ?C0003
; SOURCE LINE # 15
; SOURCE LINE # 16
0025 D2A2 SETB LEDSet
; SOURCE LINE # 17
0027 C2A0 CLR LEDCool
; SOURCE LINE # 18
0029 D2A1 SETB LEDHot
; SOURCE LINE # 20
002B 22 RET
002C ?C0003:
; SOURCE LINE # 22
; SOURCE LINE # 23
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -