📄 2402test.lst
字号:
C51 COMPILER V8.05a 2402TEST 07/02/2008 20:45:43 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE 2402TEST
OBJECT MODULE PLACED IN 2402test.OBJ
COMPILER INVOKED BY: D:\51单片机\Tools\Keil805\C51\BIN\C51.EXE 2402test.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************************************
2 Sun-2402C 桌面控制钟
3 应用程序 C
4
5 V0.01 2008-5-15
6 MCS-51 12MHZ C语言
7 LCM2402 89S52 DS18B20 DS1302 AT24C02 红外接收IC
8 ********************************************************************************************/
9 #include <AT89X52.h>
10 #include <string.h> // 包含头文件
11 /*******************************************************************************************/
12 typedef unsigned char uint8; // 无符号8位整型变量
13 typedef unsigned short uint16;// 无符号16位整型变量
14 typedef signed char int8; // 有符号8位整型变量
15
16 sbit LED1=P2^3; // 定义LCM2402的RS控制线
17 /*******************全局变量***************************************************************/
18 static unsigned char data IRCode[3],IRCON,IRCON2; //遥控器中断专用
19 static unsigned char data DT,menu,rom,alarm_con; //遥控寄存值/菜单值/定时器组值/报警开关选择
20 //==================LCM2402模块驱动=========================================================
21 #define LCM2402_DB0_DB7 P0 // 定义LCM2402的数据总线
22
23 sbit LCM2402_RS = P1^0; // 定义LCM2402的RS控制线
24 sbit LCM2402_RW = P1^2; // 定义LCM2402的RW控制线
25 sbit LCM2402_E = P1^1; // 定义LCM2402的E控制线
26 sbit LCM2402_Busy = P0^7; // 定义LCM2402的测忙线(与LCM2402_DB0_DB7关联)
27 /*******************定义LCM2402指令集********************************************************/
28 #define CMD_clear 0x01 // 清除屏幕
29 #define CMD_back 0x02 // DDRAM回零位
30 #define CMD_dec1 0x04 // 读入后AC(指针)减1,向左写
31 #define CMD_add1 0x06 // 读入后AC(指针)加1,向右写
32 #define CMD_dis_gb1 0x0f // 开显示_开光标_开光标闪烁
33 #define CMD_dis_gb2 0x0e // 开显示_开光标_关光标闪烁
34 #define CMD_dis_gb3 0x0c // 开显示_关光标_关光标闪烁
35 #define CMD_OFF_dis 0x08 // 关显示_关光标_关光标闪烁
36 #define CMD_set82 0x38 // 8位总线_2行显示
37 #define CMD_set81 0x30 // 8位总线_1行显示(上边行)
38 #define CMD_set42 0x28 // 4位总线_2行显示
39 #define CMD_set41 0x20 // 4位总线_1行显示(上边行)
40 #define lin_1 0x80 // 4位总线_1行显示(上边行)
41 #define lin_2 0xc0 // 4位总线_1行显示(上边行)
42 /*******************底层协议*****************************************************************
43 * 函数名称:DelayS()
44 * 功 能:延时
45 *********************************************************************************************/
46 void DelayS(unsigned int a)
47 {
48 1 unsigned char i;
49 1 while(--a!=0)
50 1 {
51 2 for(i=0;i<125;i++); //一个 ; 表示空语句,CPU空转。
52 2 } //i 从0加到125,CPU大概就耗时1毫秒
53 1 }
54
55 void DelayS250(void)
C51 COMPILER V8.05a 2402TEST 07/02/2008 20:45:43 PAGE 2
56 {
57 1 DelayS(250);
58 1 }
59 /******************底层协议*******************************************************************
60 * 函数名称:LCM2402_TestBusy()
61 * 功 能:LCM2402测忙,若LCM2402处于忙状态,本函数将继续测忙,直到LCM2402处于非忙状态。
62 *********************************************************************************************/
63 void LCM2402_TestBusy(void)
64 {
65 1 LCM2402_DB0_DB7=0xff; //设备读状态
66 1 LCM2402_RS=0;
67 1 LCM2402_RW=1;
68 1 LCM2402_E=1;
69 1 while(LCM2402_Busy); //等待LCM不忙
70 1 LCM2402_E=0;
71 1 }
72 /*******************底层协议****************************************************************
73 * 函数名称:LCM2402_WriteCMD()
74 * 功 能:向LCM2402写命令。
75 * 入口参数:LCM2402_command 要写入LCM2402的命令字节
76 * 出口参数:无
77 *******************************************************************************************/
78 void LCM2402_WriteCMD(uint8 LCM2402_command)
79 {
80 1 LCM2402_TestBusy();
81 1 LCM2402_DB0_DB7=LCM2402_command;
82 1 LCM2402_RS=0;
83 1 LCM2402_RW=0;
84 1 LCM2402_E=1;
85 1 LCM2402_E=0;
86 1 }
87 /*******************底层协议****************************************************************
88 * 函数名称:LCM2402_WriteData()
89 * 功 能:向LCM2402写数据。
90 * 入口参数:LCM2402_data 要写入LCM2402的数据字节
91 * 出口参数:无
92 ********************************************************************************************/
93 void LCM2402_WriteData(uint8 LCM2402_data)
94 {
95 1 LCM2402_TestBusy();
96 1 LCM2402_DB0_DB7=LCM2402_data;
97 1 LCM2402_RS=1;
98 1 LCM2402_RW=0;
99 1 LCM2402_E=1;
100 1 LCM2402_E=0;
101 1 }
102 /*******************************************************************************************
103 * 函数名称:LCM2402_Init()
104 * 功 能:LCM2402初始化
105 * 入口参数:无
106 * 出口参数:无
107 *******************************************************************************************/
108 void LCM2402_Init(void)
109 {
110 1 LCM2402_WriteCMD(CMD_set82); // 显示模式设置:显示2行,每个字符为5*7个像素
111 1 LCM2402_WriteCMD(CMD_clear); // 显示清屏
112 1 LCM2402_WriteCMD(CMD_back); // 数据指针指向第1行第1个字符位置
113 1 LCM2402_WriteCMD(CMD_add1); // 显示光标移动设置:文字不动,光标右移
114 1 LCM2402_WriteCMD(CMD_dis_gb3); // 显示开及光标设置:显示开,光标开,闪烁开
115 1 }
116 /******************************************************************************************
117 * 函数名称:print()
C51 COMPILER V8.05a 2402TEST 07/02/2008 20:45:43 PAGE 3
118 * 功 能:向LCM发送一个字符串,长度48字符之内。应用:print("doyoung.net");
119 * 入口参数:字符串
120 * 出口参数:无
121 *******************************************************************************************/
122 void print(uint8 a,uint8 *str)
123 {
124 1 LCM2402_WriteCMD(a);
125 1 while(*str!='\0')
126 1 {
127 2 LCM2402_WriteData(*str++);
128 2 }
129 1 *str=0;
130 1 }
131 /*******************************************************************************************
132 * 函数名称:print2()
133 * 功 能:向LCM发送一个字符串,长度48字符之内。应用:print("doyoung.net");
134 * 入口参数:字符串
135 * 出口参数:无
136 ********************设置写入地址和数据******************************************************/
137 void print2(uint8 a,uint8 t)
138 {
139 1 LCM2402_WriteCMD(a);
140 1 LCM2402_WriteData(t);
141 1 }
142 //=================================AT24C02模块驱动=========================================//
143 //应用举例//
144 //AT24C02_Write1Byte(0x02,0xaa); 向AT24C02的地址0x02写入0xaa
145 //i = AT24C02_Read1Byte(0x02); 从AT24C02的地址0x02读出数据给变量i
146 /*******************************************************************************************/
147 #define AT24C02_WriteDeviceAddress 0xa0 /* 定义器件在I2C总线中的地址 */
148 #define AT24C02_ReadDeviceAddress 0xa1
149 sbit SCL=P2^1; /* 定义位变量 */ // I2C总线的时钟信号
150 sbit SDA=P2^2; // I2C总线的数据信号
151 #define TRUE 1
152 #define FALSE 0
153 #define I2C_DelayTime 60 // 不要小于50,否则可能造成时序混乱
154 /********************************************************************************************
155 * 函数名称:I2C_Delay()
156 * 功 能:I2C总线软件延时
157 * 入口参数:count 延时参数,值越大,延时越长
158 * 出口参数:无
159 ********************************************************************************************/
160 void I2C_Delay(uint16 count)
161 {
162 1 while(count!=0)
163 1 count--;
164 1 }
165 /********************************************************************************************
166 * 函数名称:I2C_Start()
167 * 功 能:启动I2C总线
168 * 入口参数:无
169 * 出口参数:无
170 ********************************************************************************************/
171 void I2C_Start(void)
172 {
173 1 SDA=1;
174 1 SCL=1;
175 1 I2C_Delay(I2C_DelayTime);
176 1 SDA=0;
177 1 I2C_Delay(I2C_DelayTime);
178 1 SCL=0;
179 1 I2C_Delay(I2C_DelayTime);
C51 COMPILER V8.05a 2402TEST 07/02/2008 20:45:43 PAGE 4
180 1 }
181 /********************************************************************************************
182 * 函数名称:I2C_Stop()
183 * 功 能:终止I2C总线
184 * 入口参数:无
185 * 出口参数:无
186 ********************************************************************************************/
187 void I2C_Stop(void)
188 {
189 1 SDA=0;
190 1 SCL=1;
191 1 I2C_Delay(I2C_DelayTime);
192 1 SDA=1;
193 1 I2C_Delay(I2C_DelayTime);
194 1 SCL=0;
195 1 I2C_Delay(I2C_DelayTime);
196 1 }
197 /********************************************************************************************
198 * 函数名称:I2C_Send_Bit_0()
199 * 功 能:发送比特0
200 * 入口参数:无
201 * 出口参数:无
202 ********************************************************************************************/
203 void I2C_Send_Bit_0(void)
204 {
205 1 SDA=0;
206 1 SCL=1;
207 1 I2C_Delay(I2C_DelayTime);
208 1 SCL=0;
209 1 I2C_Delay(I2C_DelayTime);
210 1 }
211 /********************************************************************************************
212 * 函数名称:I2C_Send_Bit_1()
213 * 功 能:发送比特1
214 * 入口参数:无
215 * 出口参数:无
216 ********************************************************************************************/
217 void I2C_Send_Bit_1(void)
218 {
219 1 SDA=1;
220 1 SCL=1;
221 1 I2C_Delay(I2C_DelayTime);
222 1 SCL=0;
223 1 I2C_Delay(I2C_DelayTime);
224 1 }
225 /********************************************************************************************
226 * 函数名称:I2C_Check_Ack()
227 * 功 能:发送完一个字节后检验设备的应答信号
228 * 入口参数:无
229 * 出口参数:返回值为True,成功
230 * 返回值为False,失败
231 ********************************************************************************************/
232 bit I2C_Check_Ack(void)
233 {
234 1 SDA=1;
235 1 SCL=1;
236 1 I2C_Delay(I2C_DelayTime/2);
237 1 F0=SDA;
238 1 I2C_Delay(I2C_DelayTime/2);
239 1 SCL=0;
240 1 I2C_Delay(I2C_DelayTime);
241 1 if(F0==1)
C51 COMPILER V8.05a 2402TEST 07/02/2008 20:45:43 PAGE 5
242 1 return FALSE;
243 1 return TRUE;
244 1 }
245 /********************************************************************************************
246 * 函数名称:I2C_Write8Bit()
247 * 功 能:向I2C总线写入8bit数据
248 * 入口参数:I2C_data 将要写入I2C总线的8bit数据
249 * 出口参数:无
250 ********************************************************************************************/
251 void I2C_Write8Bit(uint8 I2C_data)reentrant
252 {
253 1 uint8 i;
254 1 for(i=0;i<8;i++)
255 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -