📄 text1.lst
字号:
C51 COMPILER V7.20 TEXT1 07/17/2007 22:47:27 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5
6 uchar tplsb,tpmsb;
7 uint temp,tempx;
8 sbit DQ=P2^0;
9 uchar code table[1]=".";
10 uchar code table1[10]="0123456789";
11
12
13 void delay(uint t);
14 bit lcd1602_busy(void);
15 void lcd1602_wrcmd(unsigned char lcdcmd);
16 void lcd1602_wrdata(uchar lcddata);
17 void lcd1602_clear(void);
18 void lcd1602_init(void);
19 uchar keyscan(void);
20 void chuli(uchar key);
21 uchar zhuan(uchar key);
22
23
24 //数据口定义
25 #define lcd1602_bus P3
26
27 //引脚定义
28 sbit rs_1602=P2^5;
29 sbit rw_1602=P2^6;
30 sbit e_1602=P2^7;
31
32 /* 延时t毫秒 */
33 void delay(uint t)
34 {
35 1 uint i;
36 1 while(t--)
37 1 {
38 2 /* 对于11.0592M时钟,约延时1ms */
39 2 for (i=0;i<125;i++)
40 2 {}
41 2 }
42 1 }
43
44
45 /***********忙判断标志,返回一个位BF********************/
46 bit lcd1602_busy(void)
47 {
48 1 uchar busy_flag;
49 1 rs_1602=0;
50 1 rw_1602=1;
51 1 _nop_();
52 1 e_1602=1;
53 1 _nop_();
54 1 lcd1602_bus=0xff;
55 1 busy_flag=lcd1602_bus; //e在高电平时读
C51 COMPILER V7.20 TEXT1 07/17/2007 22:47:27 PAGE 2
56 1 e_1602=0;
57 1 return (bit)(busy_flag&0x80); //BF=1; BUSY 返回一个位
58 1 }
59
60 /********写命令,有两个参数,一个是要写的命令控制字,
61 第二个是用来控制是否进行忙标志的判断。
62 busyflag=1;
63 判断: 为0
64 ***************/
65 void lcd1602_wrcmd(unsigned char lcdcmd)
66 {
67 1 while(lcd1602_busy()); //等待空闲
68 1 lcd1602_bus=lcdcmd;
69 1 rs_1602=0;
70 1 rw_1602=0;
71 1 _nop_();
72 1 e_1602=1;
73 1 _nop_();
74 1 _nop_();
75 1 e_1602=0; //产生一个下沿
76 1 }
77
78
79
80 /***************向液晶写数据******************/
81 void lcd1602_wrdata(uchar lcddata)
82 {
83 1 while(lcd1602_busy()); //等待空闲
84 1 lcd1602_bus=lcddata; //在下沿的时候写数据
85 1 rs_1602=1;
86 1 rw_1602=0;
87 1 _nop_();
88 1 e_1602=1;
89 1 _nop_();
90 1 _nop_();
91 1 e_1602=0;
92 1 //lcd_bus=0xff;
93 1 }
94
95
96 /************液晶的清屏************/
97 void lcd1602_clear(void)
98 {
99 1 lcd1602_wrcmd(0x01); //液晶清屏控制字 并延时>40us
100 1 delay(100);
101 1 }
102
103 /***********1602液晶的初始化***************/
104 void lcd1602_init(void)
105 {
106 1 lcd1602_wrcmd(0x38); //功能设置-----8位数据接口,两行显示,5*7点阵字符显示
107 1 delay(100);
108 1 lcd1602_wrcmd(0x0e); //显示开关控制----显示开关开,光标开关关,闪烁开关关
109 1 delay(100);
110 1 lcd1602_wrcmd(0x06); //输入方式设置,AC自增1, S=0;
111 1 delay(100);
112 1 lcd1602_wrcmd(0x01); //清屏
113 1 delay(100);
114 1 }
115
116 /* 产生复位脉冲初始化DS18B20 */
117 void TxReset(void)
C51 COMPILER V7.20 TEXT1 07/17/2007 22:47:27 PAGE 3
118 {
119 1 uint i;
120 1 DQ = 0;
121 1
122 1 /* 拉低约900us */
123 1 i = 100;
124 1 while (i>0) i--;
125 1
126 1 DQ = 1; // 产生上升沿
127 1 i = 4;
128 1 while (i>0) i--;
129 1 }
130
131 /* 等待应答脉冲 */
132 void RxWait(void)
133 {
134 1 uint i;
135 1 while(DQ);
136 1 while(~DQ); // 检测到应答脉冲
137 1 i = 4;
138 1 while (i>0) i--;
139 1 }
140
141 /* 读取数据的一位,满足读时隙要求 */
142 bit RdBit(void)
143 {
144 1 uint i;
145 1 bit b;
146 1 DQ = 0;
147 1 i++;
148 1 DQ = 1;
149 1 i++;i++; // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效
150 1 b = DQ;
151 1 i = 8;
152 1 while(i>0) i--;
153 1 return (b);
154 1 }
155
156 /* 读取数据的一个字节 */
157 uchar RdByte(void)
158 {
159 1 uchar i,j,b;
160 1 b = 0;
161 1 for (i=1;i<=8;i++)
162 1 {
163 2 j = RdBit();
164 2 b = (j<<7)|(b>>1);
165 2 }
166 1 return(b);
167 1 }
168
169 /* 写数据的一个字节,满足写1和写0的时隙要求 */
170 void WrByte(uchar b)
171 {
172 1 uint i;
173 1 uchar j;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -