📄 at24c02.lst
字号:
C51 COMPILER V7.20 AT24C02 03/06/2008 00:39:00 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE AT24C02
OBJECT MODULE PLACED IN AT24C02.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AT24C02.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*****************************************************************************
2 MCS8051-III学习板演示程序
3
4 (c) Copyright 2007-2007,广州恒芯电子
5 All Rights Reserved
6 *****************************************************************************/
7
8 /*****************************************************************************
9 程序说明
10 名称: MCS8051-III学习板演示程序(AT24C02测试)
11 功能: 保存键盘值到AT24C02中并在数码管显示
12 版本:2007-07-01
13 *****************************************************************************/
14
15 /*****************************************************************************
16 硬件说明
17 单片机: 兼容MCS-51单片机/STC89C51
18 晶振频率: 12MHz
19 *****************************************************************************/
20
21 #include "regx52.h"
22
23 /****************************************************************************
24 说明: 程序预定义
25 *****************************************************************************/
26 #define LED7A_CTRL P1_7/*数码管第一位控制引脚(0为有效,1为无效)*/
27 #define LED7B_CTRL P1_6/*数码管第二位控制引脚(0为有效,1为无效)*/
28 #define LED7C_CTRL P1_5/*数码管第三位控制引脚(0为有效,1为无效)*/
29 #define LED7D_CTRL P1_4/*数码管第四位控制引脚(0为有效,1为无效)*/
30
31 #define LED7_STATUS P0/*数码管状态引脚(0为有效,1为无效)*/
32 #define KEY_STATUS P2/*键盘状态引脚*/
33
34 #define IC24X_ORDER_WRITE 0xa0/*AT24C02写指令*/
35 #define IC24X_ORDER_READ 0xa1/*AT24C02读指令*/
36
37 #define IIC_SDA P1_1/*IIC总线SDA引脚定义*/
38 #define IIC_SCL P1_0/*IIC总线SCL引脚定义*/
39 #define IIC_TLOW 10/*IIC总线等待时间*/
40
41 /****************************************************************************
42 说明: 变量定义
43 *****************************************************************************/
44 code unsigned char m_ucLedTab[]=
45 {
46 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
47 0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e, 0xff
48 };/*数码管十六进制编码表*/
49
50 unsigned char code m_ucKeyTab[]=
51 {
52 0xde, 0xe7, 0xd7, 0xb7, 0xeb, 0xdb, 0xbb, 0xed, 0xdd, 0xbd,
53 0x77, 0x7b, 0x7d, 0x7e, 0xbe, 0xee
54 };/*键盘十六进制编码表*/
55
C51 COMPILER V7.20 AT24C02 03/06/2008 00:39:00 PAGE 2
56 unsigned char m_ucLedBuf[4];/*数码管显示值缓存*/
57
58 /****************************************************************************
59 名称: KeyCheck()
60 说明: 键盘检测
61 参数: 无
62 返回: 键盘码值,若无键按下则返回16
63 *****************************************************************************/
64 unsigned char KeyCheck();
65
66 /****************************************************************************
67 名称: Led7Scan()
68 说明: 数码管动态扫描处理程序
69 参数: 无
70 返回: 无
71 *****************************************************************************/
72 void Led7Scan();
73
74 /****************************************************************************
75 说明: IIC总线处理函数
76 *****************************************************************************/
77 void IicDelay();
78 void IicStart();
79 void IicStop();
80 void IicAck();
81 void IicNAck();
82 void IicWrite(unsigned char ucData);
83 unsigned char IicRead();
84
85 /*****************************************************************************
86 名称: AT24C02WriteByte()
87 说明: AT24C02写操作
88 参数: unsigned int uiAddr 地址
89 unsigned char ucData 数据
90 返回: 无
91 *****************************************************************************/
92 void AT24C02WriteByte(unsigned int uiAddr,unsigned char ucData);
93
94 /*****************************************************************************
95 名称: AT24C02ReadByte()
96 说明: AT24C02读操作
97 参数: unsigned int uiAddr 地址
98 返回: unsigned char 数据
99 *****************************************************************************/
100 unsigned char AT24C02ReadByte(unsigned int uiAddr);
101
102
103 /*****************************************************************************
104 程序开始
105 *****************************************************************************/
106 void main()
107 {
108 1 unsigned char ucKey=0;/*键盘值*/
109 1
110 1 P1=0xf8;
111 1 IIC_SCL=0;/*IIC时钟引脚至0*/
112 1 P1_7=0;
113 1
114 1 /*T0中断设定*/
115 1 TMOD=0x01;/*使用T0:GATE=0,C/T=0(定时),M1 M0=01(工作方式1)*/
116 1 TH0=0xec;/*定时时间 50Hz/4 计算公式:10000H - (5 x 1000) = EC78H*/
117 1 TL0=0x78;
C51 COMPILER V7.20 AT24C02 03/06/2008 00:39:00 PAGE 3
118 1 ET0=1; /*允许T0中断*/
119 1 TR0=1; /*使T0工作*/
120 1
121 1 ucKey=AT24C02ReadByte(0);/*从AT24C02地址为0000H中读取键盘值*/
122 1 m_ucLedBuf[0]=ucKey;/*将键盘值放到数码管显示缓冲*/
123 1 m_ucLedBuf[1]=ucKey;
124 1 m_ucLedBuf[2]=ucKey;
125 1 m_ucLedBuf[3]=ucKey;
126 1
127 1 EA=1;/*总中断开启*/
128 1
129 1 while(1)
130 1 {
131 2 ucKey=KeyCheck();/*获得键盘值*/
132 2 if(ucKey!=16)/*判断是否有键按下,若有则将它在数码管显示出来*/
133 2 {
134 3 m_ucLedBuf[0]=ucKey;/*将键盘值放到数码管显示缓冲*/
135 3 m_ucLedBuf[1]=ucKey;
136 3 m_ucLedBuf[2]=ucKey;
137 3 m_ucLedBuf[3]=ucKey;
138 3
139 3 EA=0;
140 3 AT24C02WriteByte(0,ucKey);/*保存键盘值到AT24C02地址为0000H中*/
141 3 EA=1;
142 3 }
143 2 }
144 1 }
145
146 /*****************************************************************************
147 名称: Interrupt1Handler
148 说明: T0中断处理
149 参数: 无
150 返回 :无
151 *****************************************************************************/
152 void Interrupt1Handler() interrupt 1
153 {
154 1 Led7Scan();/*数码管动态扫描*/
155 1 TH0=0xec;/*重新设置T0定时值*/
156 1 TL0=0x78;
157 1 }
158
159 /****************************************************************************
160 名称: Led7Scan()
161 说明: 数码管动态扫描处理程序
162 参数: 无
163 返回: 无
164 *****************************************************************************/
165 void Led7Scan()
166 {
167 1 static unsigned char a=0;
168 1
169 1 switch(a) /*判断数码管动态扫描值*/
170 1 {
171 2 case 0: /*处理数码管第一位*/
172 2 LED7D_CTRL=1; /*设置数码管第四位为无效*/
173 2 LED7A_CTRL=0; /*设置数码管第一位位有效*/
174 2 break;
175 2
176 2 case 1: /*处理数码管第二位*/
177 2 LED7A_CTRL=1; /*设置数码管第一位为无效*/
178 2 LED7B_CTRL=0; /*设置数码管第二位位有效*/
179 2 break;
C51 COMPILER V7.20 AT24C02 03/06/2008 00:39:00 PAGE 4
180 2
181 2 case 2: /*处理数码管第三位*/
182 2 LED7B_CTRL=1; /*设置数码管第二位为无效*/
183 2 LED7C_CTRL=0; /*设置数码管第三位位有效*/
184 2 break;
185 2
186 2 case 3: /*处理数码管第四位*/
187 2 LED7C_CTRL=1; /*设置数码管第三位为无效*/
188 2 LED7D_CTRL=0; /*设置数码管第四位位有效*/
189 2 break;
190 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -