📄 2051.lst
字号:
C51 COMPILER V8.02 2051 05/17/2009 11:49:10 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 2051
OBJECT MODULE PLACED IN 2051.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 2051.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.H>
2 # define disdata P1 //数
3 # define discan P3 //位
4 # define uchar unsigned char
5 # define uint unsigned int
6 sbit DQ=P3^2; // 18B20
7 sbit DIN = P1^7;
8 uint h;
9 char k;
10 uchar code ditab[16]=
11 {0X00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x07,0x08,0x09,0x09};
12 uchar code dis_7[12]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; /*共阳LED段码表*/
13 uchar code scan_con[3]={0x7f,0xfd,0xfe}; /*列扫描控制字*/
14 uchar data temp_data[2]={0x00, 0x00,}; /*读出温度暂放*/
15 uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; /*显示单元数据,共4个数据和一个运算暂用*/
16
17
18
19 /***********ds18b20延迟子函数(晶振12MHz )*******/
20 void delay_18B20(unsigned int i)
21 {
22 1 while(i--);
23 1 }
24 /**********ds18b20初始化函数******************/
25 void Init_DS18B20(void)
26 {
27 1 unsigned char x=0;
28 1 DQ = 1; //DQ复位
29 1 delay_18B20(8); //稍做延时
30 1 DQ = 0; //单片机将DQ拉低
31 1 delay_18B20(80); //精确延时 大于 480us
32 1 DQ = 1; //拉高总线
33 1 delay_18B20(14);
34 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
35 1 delay_18B20(20);
36 1 }
37 /***********ds18b20读一个字节**************/
38 unsigned char ReadOneChar(void)
39 {
40 1 unsigned char i=0;
41 1 unsigned char dat = 0;
42 1 for (i=8;i>0;i--)
43 1 {
44 2 DQ = 0; // 给脉冲信号
45 2 dat>>=1;
46 2 DQ = 1; // 给脉冲信号
47 2 if(DQ)
48 2 dat|=0x80;
49 2 delay_18B20(4);
50 2 }
51 1 return(dat);
52 1 }
53 /*************ds18b20写一个字节****************/
54 void WriteOneChar(unsigned char dat)
55 {
C51 COMPILER V8.02 2051 05/17/2009 11:49:10 PAGE 2
56 1 unsigned char i=0;
57 1 for (i=8; i>0; i--)
58 1 {
59 2 DQ = 0;
60 2 DQ = dat&0x01;
61 2 delay_18B20(5);
62 2 DQ = 1;
63 2 dat>>=1;
64 2 }
65 1 }
66
67 void temp_to_str()
68 {
69 1 unsigned char a=0;
70 1 unsigned char b=0;
71 1 unsigned char t=0;
72 1
73 1 Init_DS18B20();
74 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
75 1 WriteOneChar(0x44); // 启动温度转换
76 1
77 1 delay_18B20(100); // this message is wery important
78 1
79 1 Init_DS18B20();
80 1 WriteOneChar(0xCC); //跳过读序号列号的操作
81 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
82 1
83 1 delay_18B20(100);
84 1
85 1 a=ReadOneChar(); //读取温度值低位
86 1 b=ReadOneChar(); //读取温度值高位
87 1 temp_data[0]=b<<4;
88 1 temp_data[0]|=a>>4;
89 1 display[2]=temp_data[0]/10; //十位
90 1 display[1]=temp_data[0]%10; //个位
91 1 display[0]=ditab[(a&0x0f)<<4/10];//小数
92 1 }
93
94
95 /***************主函数***************/
96 main()
97 {
98 1 disdata=0xff; /*初始化端口*/
99 1 discan=0xff;
100 1 //for(h=0;h<4;h++){display[h]=8;}
101 1 while(1)
102 1 {
103 2 temp_to_str();
104 2
105 2 for(k=0;k<3;k++) /*4位LED扫描控制*/
106 2 {
107 3 disdata=~(dis_7[display[k]]); /*数据显示*/
108 3 if(k==1){DIN=1;} /*小数点显示*/
109 3 discan=scan_con[k]; /*位选*/
110 3 delay_18B20(90);
111 3 discan=0xff;
112 3 }
113 2 }
114 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.02 2051 05/17/2009 11:49:10 PAGE 3
CODE SIZE = 264 ----
CONSTANT SIZE = 31 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 1
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 + -