📄 密码锁.lst
字号:
C51 COMPILER V6.12 胈码__ 05/17/2007 10:44:51 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE 胈码__
OBJECT MODULE PLACED IN .\密码锁.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE .\密码锁.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //==================================================================
2 //工程名称:
3 //工程功能:
4 //作者:
5 //审核:
6 //版本: 0001.02.03
7 //日期:2007.04.12
8 //==================================================================
9 #include "reg51.h"
10 #include "intrins.h"
11
12 #define uchar unsigned char
13 #define uint unsigned int
14
15 //==================液晶12864 端口定义
16 sbit E=P1^0;
17 sbit RW=P1^1;
18 sbit RS=P1^2;
19 //====================================
20
21 //==================IIC 24c04 端口定义
22 sbit SDA=P1^0;
23 sbit SCL=P1^0;
24 //====================================
25
26 uchar code table1[]={"B :密码锁系统"};
27 uchar code table2[]={"作者:潘素琴"};
28 uchar code table3[]={"日期:2007.05.16"};
29
30 /*****************************/
31 /*延时子程序*/
32 /****************************/
33 void delayms (uchar k)
34 {
35 1 uchar j;
36 1 while((k--)!=0)
37 1 {
38 2 for(j=0;j<115;j++)
39 2 {;}
40 2 }
41 1 }
42
43 //=============================================================
44 //函数名称:void check_busy(void)
45 //函数功能:检测LCM是不是处于忙状态,并等待忙结束
46 //作者:
47 //日期:2007.03.31
48 //=============================================================
49 void check_busy(void)
50 {
51 1 uchar i;
52 1 RS=0;
53 1 RW=1;
54 1 E=1;
55 1 P0=0xff;
C51 COMPILER V6.12 胈码__ 05/17/2007 10:44:51 PAGE 2
56 1 while(P0&0x01);
57 1 i=6;
58 1 while(i--);
59 1 E=0;
60 1 }
61
62 //=====================================================
63
64 //======================================================
65 //函数名称:void sendorder(uchar order)
66 //函数功能:给LCM发送指令
67 //作者:
68 //日期:2007.03.31
69 //======================================================
70 void sendorder(uchar order)
71 {
72 1 uchar i,temp1=0,temp2=0;
73 1 check_busy();
74 1 RS=0;
75 1 RW=0;
76 1 for(i=0;i<8;i++)
77 1 {
78 2 temp1=order&0x01;
79 2 temp2|=temp1;
80 2 order>>=1;
81 2 temp2<<=1;
82 2 }
83 1 P0=temp2;
84 1 i=7;
85 1 while(i--);
86 1 E=1;
87 1 E=0;
88 1 }
89
90 //=====================================================
91
92 //=====================================================
93 //函数名称:void sendbyte(uchar byte)
94 //函数功能:给LCM发送数据
95 //作者:
96 //日期:2007.03.31
97 //=====================================================
98
99 void sendbyte(uchar byte)
100 {
101 1 uchar i,temp1=0,temp2=0;
102 1 check_busy();
103 1 for(i=0;i<8;i++)
104 1 {
105 2 temp1=byte&0x01;
106 2 temp2|=temp1;
107 2 byte>>=1;
108 2 temp2<<=1;
109 2 }
110 1 RS=1;
111 1 RW=0;
112 1 P0=temp2;
113 1 i=7;
114 1 while(i--);
115 1 E=1;
116 1 E=0;
117 1 }
C51 COMPILER V6.12 胈码__ 05/17/2007 10:44:51 PAGE 3
118
119 //=======================================================
120
121 /*----------------------------------------------------------------------
122 调用方式:void start_bit(void)
123 函数说明:开始位-
124 -----------------------------------------------------------------------*/
125 void start_bit(void)
126 {
127 1 SCL=1;
128 1 _nop_();
129 1 SDA=1;
130 1 _nop_();
131 1 SDA=0;
132 1 _nop_();
133 1 SCL=0;
134 1 _nop_();
135 1 }
136 /*-------------------------------------------------------------------
137 调用方式:void stop_bit(void)
138 函数说明:停止位
139 --------------------------------------------------------------------*/
140 void stop_bit(void)
141 {
142 1 SDA=0;
143 1 _nop_();
144 1 SCL=1;
145 1 _nop_();
146 1 SDA=1;
147 1 _nop_();
148 1 }
149 /*-----------------------------------------------------------------
150 调用方式:void mast_ack(void)-
151 函数说明:主答函数
152 -----------------------------------------------------------------*/
153 void mast_ack(void)
154 {
155 1 SCL=0;
156 1 _nop_();
157 1 SDA=0;
158 1 _nop_();
159 1 SCL=1;
160 1 _nop_();
161 1 SCL=0;
162 1 _nop_();
163 1 SDA=1;
164 1 _nop_();
165 1 }
166
167 /*-----------------------------------------------
168 调用方式:void ack(void)
169 函数说明:应答函数
170 -----------------------------------------------*/
171 void ack(void)
172 {
173 1 SDA=1;
174 1 SCL=0;
175 1 _nop_();
176 1 SCL=1;
177 1 _nop_();
178 1 while(SDA){;}
179 1 SCL=0;
C51 COMPILER V6.12 胈码__ 05/17/2007 10:44:51 PAGE 4
180 1 _nop_();
181 1 }
182 /*-----------------------------------------------
183 调用方式:void no_ack(void)
184 函数说明:无需应答位,在读程序中用到
185 -----------------------------------------------*/
186 void no_ack(void)
187 {
188 1 SDA=1;
189 1 _nop_();
190 1 SCL=1;
191 1 _nop_();
192 1 SCL=0;
193 1 _nop_();
194 1 }
195 /*-----------------------------------------------
196 调用方式:write_8bit(unsigned char ch)
197 函数说明:写一个字节(8位)数据
198 -----------------------------------------------*/
199 write_8bit(unsigned char ch)
200 {
201 1 unsigned char i=8;
202 1 SCL=0;
203 1 _nop_();
204 1 while(i--)
205 1 {
206 2 SDA=(bit)(ch&0x80);
207 2 _nop_();
208 2 ch<<=1;
209 2 SCL=1;
210 2 _nop_();
211 2 SCL=0;
212 2 _nop_();
213 2 }
214 1 }
215 /*----------------------------------------------
216 调用方式:unsigned char read24c16(unsigned int address)
217 函数说明:读24c16指定地址数据(字节读)
218 -----------------------------------------------*/
219 unsigned char read24c16(uchar addh)
220 {
221 1 unsigned char data rdata;
222 1 unsigned char i=8;
223 1 start_bit();
224 1 write_8bit(0xa0);
225 1 ack();
226 1 write_8bit(addh);
227 1 ack(); //伪写
228 1 start_bit();
229 1 write_8bit(0xa1);
230 1 ack();
231 1 while(i--)
232 1 {
233 2 rdata<<=1;
234 2 SCL=0;
235 2 _nop_();
236 2 SCL=1;
237 2 _nop_();
238 2 if(SDA) rdata|=0x01;
239 2 }
240 1 no_ack();
241 1 stop_bit();
C51 COMPILER V6.12 胈码__ 05/17/2007 10:44:51 PAGE 5
242 1 return(rdata);
243 1 }
244 /*-----------------------------------------------
245 调用方式:void write24c16(unsigned int address,unsigned char ddata)
246 函数说明:写数据到24c16的指定地址(字节写)
247 -----------------------------------------------*/
248 void write24c16(unsigned int addr_h,unsigned char ddata)
249 {
250 1 start_bit();
251 1 write_8bit(0xa0);
252 1 ack();
253 1 write_8bit(addr_h);
254 1 ack();
255 1 write_8bit(ddata);
256 1 ack();
257 1 stop_bit();
258 1 delayms(4);
259 1 }
260 //=======================================================================
261
262 //=======================================================================
263 //函数名:void LCD_init()
264 //函数功能:
265 //参数:
266 //作者:
267 //日期:
268 //=======================================================================
269 void LCD_init()
270 {
271 1 uchar i;
272 1 sendorder(0x30); ///功能设置 8位控制界面 基本指令
273 1 sendorder(0x0c); ///显示打开 光标关 反白显示关
274 1 sendorder(0x01); ///清除屏幕显示 将DDRAM的地址计数器清零
275 1 sendorder(0x80); ///设置DDRAM地址为0000000
276 1 for(i=0;i<14;i++)
277 1 {
278 2 sendbyte(table1[i]);
279 2 }
280 1 sendorder(0x88);
281 1 for(i=0;i<12;i++)
282 1 {
283 2 sendbyte(table2[i]);
284 2 }
285 1 sendorder(0x98);
286 1 for(i=0;i<16;i++)
287 1 {
288 2 sendbyte(table3[i]);
289 2 }
290 1 }
291 //=======================================================================
292
293 //=======================================================================
294 //函数名:
295 //函数功能:
296 //参数:
297 //作者:
298 //日期:
299 //=======================================================================
300 void main()
301 {
302 1 LCD_init();
303 1 while(1);
C51 COMPILER V6.12 胈码__ 05/17/2007 10:44:51 PAGE 6
304 1 }
305 //=======================================================================
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 403 ----
CONSTANT SIZE = 45 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -