?? 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 + -