📄 lcd.lst
字号:
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
C51 COMPILER V8.16 LCD 10/04/2008 14:53:01 PAGE 6
11 =2
12 =2 #define TemperatureMin 5
13 =2
14 =2 void INTInit();
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
6 uchar buf1[8];
7
8 /*
9 函数:DispChar()
10 功能:在数码管上显示字符
11 参数:
12 x:数码管的坐标位置(0~7)
13 mydata:要显示的字符(仅限十进制数字和减号)
14 */
15 void DispChar(unsigned char x, unsigned char mydata)
16 {
17 1 //0123456789的数码管字型数据
18 1 code unsigned char SegTab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
19 1 //0 1 2 3 4 5 6 7 8 9 no
20 1
21 1 code unsigned char ComTab[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
22 1 // seg--- P0
23 1 //com ---P1
24 1
25 1 // if (x==4)
26 1 //{
27 1 // P0=(SegTab[mydata]|0x80);//dot on
28 1 // }
29 1 //else
30 1 //{
31 1 P0=~SegTab[mydata];
32 1 P1=~ComTab[x];
33 1 // }
34 1 // if ( c == '-' )
35 1 // {
36 1 // DispBuf[x] = 0x40;
37 1 // }
38 1 // else if ( ( c >= 0) && ( c <= 10 ) )
39 1 // {
40 1 // DispBuf[x] = Tab[c];
41 1 // }
42 1 }
43
44 /*
45 函数:DispStr()
46 功能:在数码管上显示字符串
47 参数:
48 *s:要显示的字符串(字符仅限十进制数字和减号)
49 */
50
51 void DispStr( unsigned char *s)
C51 COMPILER V8.16 LCD 10/04/2008 14:53:01 PAGE 7
52 {
53 1 //uchar s[8]={1,2,3,4,5,6,7,8} ;
54 1 unsigned char i;
55 1 uchar x=0;
56 1 for (i=0;i<8;i++)
57 1 {
58 2 DispChar(x,*s);
59 2 s++;
60 2 x++;
61 2 }
62 1 }
63
64 /*
65 函数:DispDotOn()
66 功能:显示指定位的小数点
67 参数:x为数码管坐标
68 */
69 //void DispDotOn(unsigned char mydata)
70 //{
71 // mydata|= 0x80;
72 //}
73
74 /*
75 函数:ByteToStr()
76 功能:字节型变量c转换为十进制字符串
77 */
78 void ByteToStr(unsigned char *s, int c )
79 {
*** WARNING C235 IN LINE 79 OF LCD.C: parameter 2: different types
80 1 uchar aa,bb,cc;
81 1 s[0]=c/100;//百位
82 1 s[1]=c%100/10;//十位
83 1 s[2]=c%100%10;//个位
84 1
85 1 aa=c/100;
86 1 // bb==c%100/10;//十位 //c/10-s[0]*10;//十位
87 1 // cc=c%100%10;//个位 //c-s[0]*10-s[1];//个位
88 1
89 1 // printf("c=%ud\n",c);
90 1 // printf("s[0]=%ud\n",s[0]);
91 1 // printf("s[1]=%ud\n",s[1]);
92 1 // printf("s[2]=%ud\n",s[2]);
93 1 }
*** WARNING C280 IN LINE 80 OF LCD.C: 'bb': unreferenced local variable
*** WARNING C280 IN LINE 80 OF LCD.C: 'cc': unreferenced local variable
94
95
96 /*
97 函数:DispTemp()
98 功能:在数码管上显示出温度值
99 参数:
100 t:补码,除以8以后才是真正温度值
101 */
102 unsigned char* DispTemp(int t)
103 {
104 1 extern Temperature_Set;//设定温度
105 1 unsigned char buf[3];
106 1 unsigned char buf1[8];
107 1
108 1 bit s; //符号位
109 1 int i; //整数部分
110 1 int d; //小数部分
C51 COMPILER V8.16 LCD 10/04/2008 14:53:01 PAGE 8
111 1 // unsigned char x; //临时变量
112 1 //分离出符号
113 1 s = 0;
114 1 if ( t < 0 )
115 1 {
116 2 s = 1;
117 2 t = -t;
118 2 }
119 1 //分离出整数和小数部分
120 1
121 1 // printf("t=%d\n",t);
122 1 i = t / 8;
123 1 d = t % 8;
124 1 d=d*125;
125 1 // printf("i=%ud\n",i);
126 1 // printf("d=%ud\n",d);
127 1 //整数部分转换成字符串
128 1 ByteToStr(buf,i);
129 1 buf1[5]=buf[0];
130 1 buf1[4]=buf[1];
131 1 buf1[3]=buf[2];
132 1 if(0==buf1[5])
133 1 {
134 2 buf1[5]=10;
135 2 }
136 1 else if((10==buf1[5])&&(0==buf1[4]))
137 1 {
138 2 buf1[4]=10;
139 2 }
140 1
141 1 ByteToStr(buf,d);
142 1 buf1[2]=buf[0];
143 1 buf1[1]=buf[1];
144 1 buf1[0]=buf[2];
145 1
146 1 //buf1[2]=0;
147 1 //buf1[1]=1;
148 1 //buf1[0]=3;
149 1 ByteToStr(buf,Temperature_Set);
150 1 buf1[7]=buf[1];
151 1 buf1[6]=buf[2];
152 1
153 1 return buf1;
154 1 // DispStr(8,buf1);
155 1 //显示小数点
156 1 // DispDotOn(4);
157 1 //x = 4 - strlen(buf);
158 1 //清除所有显示
159 1 //DispClear();
160 1 //显示符号
161 1 //if ( s ) DispChar(x,'-');
162 1 //x++;
163 1 //显示整数部分
164 1 //DispStr(x,buf);
165 1
166 1 //显示小数部分
167 1 // DispStr(5,Tab[d]);
168 1 }
169
170
171 void disp(int t)
172 {
C51 COMPILER V8.16 LCD 10/04/2008 14:53:01 PAGE 9
173 1 // const uchar Dispbuf[8]={0};
174 1 //com = 0xFF; //暂停显示
175 1 unsigned char *Dispbuf=0;
176 1 Dispbuf = DispTemp(t);
177 1 // DispStr( Dispbuf) ;
178 1 //DispTemp(buf1, t);
179 1 // Dispbuf[8]
180 1 // DispStr(Dispbuf);
181 1 //DispStr(buf1);
182 1 //DispDotOn(5);
183 1
184 1 }
185
186
187
188
C51 COMPILER V8.16 LCD 10/04/2008 14:53:01 PAGE 10
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _DispChar (BEGIN)
; SOURCE LINE # 15
;---- Variable 'mydata' assigned to Register 'R5' ----
;---- Variable 'x' assigned to Register 'R7' ----
; SOURCE LINE # 16
; SOURCE LINE # 31
0000 ED MOV A,R5
0001 900000 R MOV DPTR,#SegTab
0004 93 MOVC A,@A+DPTR
0005 F4 CPL A
0006 F580 MOV P0,A
; SOURCE LINE # 32
0008 EF MOV A,R7
0009 900000 R MOV DPTR,#ComTab
000C 93 MOVC A,@A+DPTR
000D F4 CPL A
000E F590 MOV P1,A
; SOURCE LINE # 42
0010 22 RET
; FUNCTION _DispChar (END)
; FUNCTION _DispStr (BEGIN)
; SOURCE LINE # 51
;---- Variable 's' assigned to Register 'R1/R2/R3' ----
; SOURCE LINE # 52
; SOURCE LINE # 55
;---- Variable 'x' assigned to Register 'R6' ----
0000 E4 CLR A
0001 FE MOV R6,A
; SOURCE LINE # 56
;---- Variable 'i' assigned to Register 'R4' ----
0002 FC MOV R4,A
0003 ?C0002:
; SOURCE LINE # 57
; SOURCE LINE # 58
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -