📄 text1.lst
字号:
C51 COMPILER V7.50 TEXT1 11/23/2007 13:33:39 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <AT89X51.H>
2 #include <intrins.h>
3 //#define unchar unsigned char
4 typedef unsigned char unchar;
5
6 unchar show[4]={1,2,3,4};
7 unchar code showtap[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71};
- //0,1,2...显示代码
8 unchar b=0;
9 sbit DQ=P2^5;
10 bit flag_1820_1;
11 bit flag_1820_2;
12 void delay_ms(unsigned char time);
13 void ledshow(void);
14 void keypress(void);
15 void init(void);
16 void gettemp();
17 void init1820(void);
18 void write1820(unchar);
19 unsigned char read1820(void);
20 void delay_us(unchar);
21 main()
22 { //unsigned char i;
23 1 //init();
24 1
25 1 while(1)
26 1 { gettemp();
27 2 ledshow();
28 2 keypress();
29 2
30 2
31 2 }
32 1 }
33
34 //****************LED显示程序**************
35 //led 是共阴的 ,P2.0,2.1,2.2,2.3分别控制1234
36 void ledshow()
37 {
38 1 unchar i,j;
39 1 j=0xf7; //位选
40 1 P0=0;
41 1 P2=0xff;
42 1 _nop_();
43 1 _nop_();
44 1 for(i=0;i<4;i++)
45 1 {
46 2 P0=showtap[show[3-i]]; //直接转换成显示的LED码
47 2 P2=j>>i;
48 2 delay_ms(2);
49 2 P2=0xff;
50 2 }
51 1
52 1 }
53 //***********************************************
54
C51 COMPILER V7.50 TEXT1 11/23/2007 13:33:39 PAGE 2
55
56 //////////*************键盘程序****************
57 void keypress()
58 {
59 1 unchar a,i,j=0xfe;
60 1 for(i=0;i<4;i++)
61 1 {
62 2 P1=(j<<i)|(j>>(8-i)); //输出扫描码
63 2 delay_ms(2);
64 2 a=P1;
65 2 if((a&0xf0)!=0xf0)
66 2 {
67 3 delay_ms(2);
68 3 a=P1;
69 3 if((a&0xf0)!=0xf0)
70 3 {
71 4 switch(~((j<<i)|(j>>(8-i))))
72 4 {
73 5 case 1: switch(~((a>>4)|0xf0))
74 5 {
75 6 case 1: show[b]=0;break;
76 6 case 2: show[b]=1;break;
77 6 case 4: show[b]=2;break;
78 6 case 8: show[b]=3;break;
79 6 }
80 5 break;
81 5 case 2: switch(~((a>>4)|0xf0))
82 5 {
83 6 case 1: show[b]=4;break;
84 6 case 2: show[b]=5;break;
85 6 case 4: show[b]=6;break;
86 6 case 8: show[b]=7;break;
87 6 }
88 5 break;
89 5 case 4: switch(~((a>>4)|0xf0))
90 5 {
91 6 case 1: show[b]=8;break;
92 6 case 2: show[b]=9;break;
93 6 case 4: show[b]=10;break;
94 6 case 8: show[b]=11;break;
95 6 }
96 5 break;
97 5 case 8: switch(~((a>>4)|0xf0))
98 5 {
99 6 case 1: show[b]=12;break;
100 6 case 2: show[b]=13;break;
101 6 case 4: show[b]=14;break;
102 6 case 8: show[b]=15;break;
103 6 }
104 5 break;
105 5
106 5 }
107 4 b++;
108 4 if(b==4)
109 4 b=0;
110 4 }
111 3 }
112 2 while((a&0xf0)!=0xf0)
113 2 {
114 3 a=P1;
115 3 }
116 2 }
C51 COMPILER V7.50 TEXT1 11/23/2007 13:33:39 PAGE 3
117 1 }
118
119 //***************************************
120 //*******************DS18B20***************
121
122 void gettemp()
123 { unsigned int tp;
124 1 init1820();
125 1 write1820(0xcc);
126 1 // delay_ms(2);
127 1 write1820(0x44);
128 1 // _nop_();
129 1 // DQ=1;
130 1 // delay_ms(250); //多个1820时要延时,单个就不用,数据手册里看
131 1 // delay_ms(250);
132 1 // delay_ms(250);
133 1 init1820();
134 1 write1820(0xcc);
135 1 write1820(0xbe);
136 1 show[0]=read1820();
137 1 show[1]=read1820();
138 1 init1820();
139 1 tp=show[1]*256+show[0];
140 1 tp=tp>>4;
141 1 show[0]=(unsigned char)(tp/10);
142 1 show[1]=(unsigned char)(tp%10);
143 1 }
144 //********************1820初始化,读和写的子程序,延时
145 //*******initial**********
146 void init1820()
147 {
148 1 DQ = 1; _nop_();
149 1 DQ = 0; //拉低数据线,准备Reset OneWire Bus;
150 1 delay_us(125); //延时510us,Reset One-Wire Bus.
151 1 delay_us(125);
152 1
153 1 DQ = 1; //提升数据线;
154 1 delay_us(15); //延时35us;
155 1
156 1 while(DQ) //等待Slave 器件Ack 信号;
157 1 { _nop_(); }
158 1 delay_us(60); //延时125us;
159 1 DQ = 1; //提升数据线,准备数据传输;
160 1 }
161
162 //******write********
163 void write1820(unchar a)
164 {
165 1 unchar i;
166 1 for(i=0;i<8;i++)
167 1 {if(a & 0x01) //低位在前;
168 2 {DQ = 0; //结束Recovery time;
169 3 _nop_();_nop_();_nop_();
170 3 DQ = 1; } //发送数据;
171 2 else
172 2 DQ = 0; //结束Rec time;
173 2 _nop_();_nop_();_nop_();
174 2 //DQ = 0; } //发送数据;
175 2 delay_us(30); //等待Slave Device采样;
176 2 DQ = 1; //Recovery;
177 2 _nop_(); //Recovery Time Start;
178 2 a >>= 1;
C51 COMPILER V7.50 TEXT1 11/23/2007 13:33:39 PAGE 4
179 2 }
180 1
181 1 }
182
183 //*******read************
184 unsigned char read1820(void)
185 {
186 1 unsigned char i;
187 1 unsigned char tmp=0;
188 1 DQ = 1; _nop_(); //准备读;
189 1 for(i=0;i<8;i++)
190 1 {
191 2 tmp >>= 1; //低位先发;
192 2 DQ = 0; //Read init;
193 2 _nop_(); //2ms;
194 2 DQ = 1; //必须写1,否则读出来的将是不预期的数据;
195 2 delay_us(2); //延时9us;
196 2 _nop_();
197 2 if(DQ) //在12us处读取数据;
198 2 tmp |= 0x80;
199 2 delay_us(30); //延时55us;
200 2 DQ = 1; _nop_(); //恢复One Wire Bus;
201 2 }
202 1 return tmp; }
203 //**************************延时程序,一个是1us的延时。一个是1ms的延时 **************
204 void delay_us(unchar a)//when crystal is 12M ,a*2+5 us ,子程序调用要5us,while 就等于DJNZ指令
205 {
206 1 while(--a);
207 1 }
208 void delay_ms(unchar a)
209 {
210 1 unchar i,j;
211 1 for(i=0;i<a;i++)
212 1 for(j=0;j<200;j++)
213 1 {
214 2 _nop_();
215 2 _nop_();
216 2 }
217 1 }
218 //**********************************************************
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 730 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 8
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -