📄 shiyan2.lst
字号:
C51 COMPILER V6.12 SHIYAN2 03/29/2008 16:54:09 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE SHIYAN2
OBJECT MODULE PLACED IN .\shiyan2.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE .\shiyan2.c DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 sbit DQ=P0^1;//ds18b20与单片机连接口
5 sbit RS=P0^2;
6 sbit RW=P0^3;
7 sbit EN=P0^4;
8 unsigned char code str1[]={"temperature: "};
9 unsigned char code str2[]={" "};
10 uchar data disdata[5];
11 uint tvalue;//温度值
12 uchar tflag;//温度正负标志
13 /*************************lcd1602程序**************************/
14 void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
15 {unsigned int i,j;
16 1 for(i=0;i<ms;i++)
17 1 for(j=0;j<100;j++);
18 1 }
19 void wr_com(unsigned char com)//写指令//
20 { delay1ms(1);
21 1 RS=0;
22 1 RW=0;
23 1 EN=0;
24 1 P2=com;
25 1 delay1ms(1);
26 1 EN=1;
27 1 delay1ms(1);
28 1 EN=0;
29 1 }
30 void wr_dat(unsigned char dat)//写数据//
31 { delay1ms(1);;
32 1 RS=1;
33 1 RW=0;
34 1 EN=0;
35 1 P2=dat;
36 1 delay1ms(1);
37 1 EN=1;
38 1 delay1ms(1);
39 1 EN=0;
40 1 }
41 void lcd_init()//初始化设置//
42 {delay1ms(15);
43 1 wr_com(0x38);delay1ms(5);
44 1 wr_com(0x08);delay1ms(5);
45 1 wr_com(0x01);delay1ms(5);
46 1 wr_com(0x06);delay1ms(5);
47 1 wr_com(0x0c);delay1ms(5);
48 1 }
49
50 void display(unsigned char *p)//显示//
51 {
52 1 while(*p!='\0')
53 1 {
54 2 wr_dat(*p);
55 2 p++;
C51 COMPILER V6.12 SHIYAN2 03/29/2008 16:54:09 PAGE 2
56 2 delay1ms(1);
57 2 }
58 1 }
59 init_play()//初始化显示
60 { lcd_init();
61 1 wr_com(0x80);
62 1 display(str1);
63 1 wr_com(0xc0);
64 1 display(str2);
65 1 }
66 /******************************ds1820程序***************************************/
67 void delay_18B20(unsigned int i)//延时1微秒
68 {
69 1 while(i--);
70 1 }
71 void ds1820rst()/*ds1820复位*/
72 { unsigned char x=0;
73 1 DQ = 1; //DQ复位
74 1 delay_18B20(4); //延时
75 1 DQ = 0; //DQ拉低
76 1 delay_18B20(100); //精确延时大于480us
77 1 DQ = 1; //拉高
78 1 delay_18B20(40);
79 1 }
80
81 uchar ds1820rd()/*读数据*/
82 { unsigned char i=0;
83 1 unsigned char dat = 0;
84 1 for (i=8;i>0;i--)
85 1 { DQ = 0; //给脉冲信号
86 2 dat>>=1;
87 2 DQ = 1; //给脉冲信号
88 2 if(DQ)
89 2 dat|=0x80;
90 2 delay_18B20(10);
91 2 }
92 1 return(dat);
93 1 }
94 void ds1820wr(uchar wdata)/*写数据*/
95 {unsigned char i=0;
96 1 for (i=8; i>0; i--)
97 1 { DQ = 0;
98 2 DQ = wdata&0x01;
99 2 delay_18B20(10);
100 2 DQ = 1;
101 2 wdata>>=1;
102 2 }
103 1 }
104 read_temp()/*读取温度值并转换*/
105 {uchar a,b;
106 1 ds1820rst();
107 1 ds1820wr(0xcc);//*跳过读序列号*/
108 1 ds1820wr(0x44);//*启动温度转换*/
109 1 ds1820rst();
110 1 ds1820wr(0xcc);//*跳过读序列号*/
111 1 ds1820wr(0xbe);//*读取温度*/
112 1 a=ds1820rd();
113 1 b=ds1820rd();
114 1 tvalue=b;
115 1 tvalue<<=8;
116 1 tvalue=tvalue|a;
117 1 if(tvalue<0x0fff)
C51 COMPILER V6.12 SHIYAN2 03/29/2008 16:54:09 PAGE 3
118 1 tflag=0;
119 1 else
120 1 {tvalue=~tvalue+1;
121 2 tflag=1;
122 2 }
123 1 tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
124 1 return(tvalue);
125 1 }
126 /*******************************************************************/
127 void ds1820disp()//温度值显示
128 { uchar flagdat;
129 1 disdata[0]=tvalue/1000+0x30;//百位数
130 1 disdata[1]=tvalue%1000/100+0x30;//十位数
131 1 disdata[2]=tvalue%100/10+0x30;//个位数
132 1 disdata[3]=tvalue%10+0x30;//小数位
133 1
134 1 if(tflag==0)
135 1 flagdat=0x20;//正温度不显示符号
136 1 else
137 1 flagdat=0x2d;//负温度显示负号:-
138 1 if(disdata[0]==0x30)
139 1 {disdata[0]=0x20;//如果百位为0,不显示
140 2 if(disdata[1]==0x30)
141 2 {disdata[1]=0x20;//如果百位为0,十位为0也不显示
142 3 }
143 2 }
144 1 wr_com(0xc0);
145 1 wr_dat(flagdat);//显示符号位
146 1 wr_com(0xc1);
147 1 wr_dat(disdata[0]);//显示百位
148 1 wr_com(0xc2);
149 1 wr_dat(disdata[1]);//显示十位
150 1 wr_com(0xc3);
151 1 wr_dat(disdata[2]);//显示个位
152 1 wr_com(0xc4);
153 1 wr_dat(0x2e);//显示小数点
154 1 wr_com(0xc5);
155 1 wr_dat(disdata[3]);//显示小数位
156 1 }
157 /********************主程序***********************************/
158 void main()
159 { init_play();//初始化显示
160 1 while(1)
161 1 {read_temp();//读取温度
162 2 ds1820disp();//显示
163 2 }
164 1 }
165
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 601 ----
CONSTANT SIZE = 29 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 5
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -