?? main.lst
字號(hào):
C51 COMPILER V7.07 MAIN 07/05/2006 02:58:17 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #define uchar unsigned char //定義一下方便使用
2 #define uint unsigned int
3 #define ulong unsigned long
4 #include <reg52.h> //包括一個(gè)52標(biāo)準(zhǔn)內(nèi)核的頭文件
5
6 char code dx516[3] _at_ 0x003b;//這是為了仿真設(shè)置的
7
8 #define WriteDeviceAddress 0xa0 //定義器件在IIC總線中的地址
9 #define ReadDviceAddress 0xa1
10 sbit SCL=P2^7;
11 sbit SDA=P2^6;
12
13 sbit P10=P1^0;
14 sbit K1=P3^2;
15
16 //定時(shí)函數(shù)
17 void DelayMs(unsigned int number)
18 {
19 1 unsigned char temp;
20 1 for(;number!=0;number--)
21 1 {
22 2 for(temp=112;temp!=0;temp--) ;
23 2 }
24 1 }
25
26 //開始總線
27 void Start()
28 {
29 1 SDA=1;
30 1 SCL=1;
31 1 SDA=0;
32 1 SCL=0;
33 1 }
34
35 //結(jié)束總線
36 void Stop()
37 {
38 1 SCL=0;
39 1 SDA=0;
40 1 SCL=1;
41 1 SDA=1;
42 1 }
43
44
45 //發(fā)ACK0
46 void NoAck()
47 {
48 1 SDA=1;
49 1 SCL=1;
50 1 SCL=0;
51 1 }
52
53 //測試ACK
54 bit TestAck()
55 {
C51 COMPILER V7.07 MAIN 07/05/2006 02:58:17 PAGE 2
56 1 bit ErrorBit;
57 1 SDA=1;
58 1 SCL=1;
59 1 ErrorBit=SDA;
60 1 SCL=0;
61 1 return(ErrorBit);
62 1 }
63
64 //寫入8個(gè)bit到24c02
65 Write8Bit(unsigned char input)
66 {
67 1 unsigned char temp;
68 1 for(temp=8;temp!=0;temp--)
69 1 {
70 2 SDA=(bit)(input&0x80);
71 2 SCL=1;
72 2 SCL=0;
73 2 input=input<<1;
74 2 }
75 1 }
76
77 //寫入一個(gè)字節(jié)到24c02中
78 void Write24c02(uchar ch,uchar address)
79 {
80 1 Start();
81 1 Write8Bit(WriteDeviceAddress);
82 1 TestAck();
83 1 Write8Bit(address);
84 1 TestAck();
85 1
86 1 Write8Bit(ch);
87 1 TestAck();
88 1
89 1 Stop();
90 1 DelayMs(10);
91 1 }
92
93 //從24c02中讀出8個(gè)bit
94 uchar Read8Bit()
95 {
96 1 unsigned char temp,rbyte=0;
97 1 for(temp=8;temp!=0;temp--)
98 1 {
99 2 SCL=1;
100 2 rbyte=rbyte<<1;
101 2 rbyte=rbyte|((unsigned char)(SDA));
102 2 SCL=0;
103 2 }
104 1 return(rbyte);
105 1 }
106
107 //從24c02中讀出1個(gè)字節(jié)
108 uchar Read24c02(uchar address)
109 {
110 1 uchar ch;
111 1
112 1 Start();
113 1 Write8Bit(WriteDeviceAddress);
114 1 TestAck();
115 1 Write8Bit(address);
116 1 TestAck();
117 1 Start();
C51 COMPILER V7.07 MAIN 07/05/2006 02:58:17 PAGE 3
118 1 Write8Bit(ReadDviceAddress);
119 1 TestAck();
120 1 ch=Read8Bit();
121 1 NoAck();
122 1 Stop();
123 1 return(ch);
124 1 }
125
126 //寫入按鍵次數(shù)到24c02,并讀出來顯示在4個(gè)LED上
127
128 void main(void) // 主程序
129 {
130 1 uchar c1,c2;
131 1
132 1 while(1)
133 1 {
134 2 c1=Read24c02(0x01); //讀出24c02第一個(gè)地址數(shù)據(jù)
135 2 P1=c1; //顯示在P1口的4個(gè)LED上
136 2
137 2 if(!K1) //按鍵處理
138 2 {
139 3 c1++; //值加1
140 3 Write24c02(c1,0x01); //重新寫入24c02
141 3
142 3 while(!K1); //等待按鍵松開
143 3 for(c2=0;c2<250;c2++); //松開按鍵去抖
144 3 }
145 2 }
146 1 }
147
148 //提示,可以脫機(jī)運(yùn)行看看掉電后的數(shù)據(jù)是否還在保存.
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 195 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -