📄 lcd1602+at24c02.lst
字号:
C51 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD1602_AT24C02
OBJECT MODULE PLACED IN LCD1602+AT24C02.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil C\C51\BIN\C51.EXE LCD1602+AT24C02.C BROWSE DEBUG OBJECTEXTEND CODE LISTINCLUD
-E SYMBOLS
stmt level source
1 #include<reg52.h>
1 =1 /*--------------------------------------------------------------------------
2 =1 REG52.H
3 =1
4 =1 Header file for generic 80C52 and 80C32 microcontroller.
5 =1 Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
6 =1 All rights reserved.
7 =1 --------------------------------------------------------------------------*/
8 =1
9 =1 #ifndef __REG52_H__
10 =1 #define __REG52_H__
11 =1
12 =1 /* BYTE Registers */
13 =1 sfr P0 = 0x80;
14 =1 sfr P1 = 0x90;
15 =1 sfr P2 = 0xA0;
16 =1 sfr P3 = 0xB0;
17 =1 sfr PSW = 0xD0;
18 =1 sfr ACC = 0xE0;
19 =1 sfr B = 0xF0;
20 =1 sfr SP = 0x81;
21 =1 sfr DPL = 0x82;
22 =1 sfr DPH = 0x83;
23 =1 sfr PCON = 0x87;
24 =1 sfr TCON = 0x88;
25 =1 sfr TMOD = 0x89;
26 =1 sfr TL0 = 0x8A;
27 =1 sfr TL1 = 0x8B;
28 =1 sfr TH0 = 0x8C;
29 =1 sfr TH1 = 0x8D;
30 =1 sfr IE = 0xA8;
31 =1 sfr IP = 0xB8;
32 =1 sfr SCON = 0x98;
33 =1 sfr SBUF = 0x99;
34 =1
35 =1 /* 8052 Extensions */
36 =1 sfr T2CON = 0xC8;
37 =1 sfr RCAP2L = 0xCA;
38 =1 sfr RCAP2H = 0xCB;
39 =1 sfr TL2 = 0xCC;
40 =1 sfr TH2 = 0xCD;
41 =1
42 =1
43 =1 /* BIT Registers */
44 =1 /* PSW */
45 =1 sbit CY = PSW^7;
46 =1 sbit AC = PSW^6;
47 =1 sbit F0 = PSW^5;
48 =1 sbit RS1 = PSW^4;
49 =1 sbit RS0 = PSW^3;
50 =1 sbit OV = PSW^2;
51 =1 sbit P = PSW^0; //8052 only
52 =1
53 =1 /* TCON */
C51 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 2
54 =1 sbit TF1 = TCON^7;
55 =1 sbit TR1 = TCON^6;
56 =1 sbit TF0 = TCON^5;
57 =1 sbit TR0 = TCON^4;
58 =1 sbit IE1 = TCON^3;
59 =1 sbit IT1 = TCON^2;
60 =1 sbit IE0 = TCON^1;
61 =1 sbit IT0 = TCON^0;
62 =1
63 =1 /* IE */
64 =1 sbit EA = IE^7;
65 =1 sbit ET2 = IE^5; //8052 only
66 =1 sbit ES = IE^4;
67 =1 sbit ET1 = IE^3;
68 =1 sbit EX1 = IE^2;
69 =1 sbit ET0 = IE^1;
70 =1 sbit EX0 = IE^0;
71 =1
72 =1 /* IP */
73 =1 sbit PT2 = IP^5;
74 =1 sbit PS = IP^4;
75 =1 sbit PT1 = IP^3;
76 =1 sbit PX1 = IP^2;
77 =1 sbit PT0 = IP^1;
78 =1 sbit PX0 = IP^0;
79 =1
80 =1 /* P3 */
81 =1 sbit RD = P3^7;
82 =1 sbit WR = P3^6;
83 =1 sbit T1 = P3^5;
84 =1 sbit T0 = P3^4;
85 =1 sbit INT1 = P3^3;
86 =1 sbit INT0 = P3^2;
87 =1 sbit TXD = P3^1;
88 =1 sbit RXD = P3^0;
89 =1
90 =1 /* SCON */
91 =1 sbit SM0 = SCON^7;
92 =1 sbit SM1 = SCON^6;
93 =1 sbit SM2 = SCON^5;
94 =1 sbit REN = SCON^4;
95 =1 sbit TB8 = SCON^3;
96 =1 sbit RB8 = SCON^2;
97 =1 sbit TI = SCON^1;
98 =1 sbit RI = SCON^0;
99 =1
100 =1 /* P1 */
101 =1 sbit T2EX = P1^1; // 8052 only
102 =1 sbit T2 = P1^0; // 8052 only
103 =1
104 =1 /* T2CON */
105 =1 sbit TF2 = T2CON^7;
106 =1 sbit EXF2 = T2CON^6;
107 =1 sbit RCLK = T2CON^5;
108 =1 sbit TCLK = T2CON^4;
109 =1 sbit EXEN2 = T2CON^3;
110 =1 sbit TR2 = T2CON^2;
111 =1 sbit C_T2 = T2CON^1;
112 =1 sbit CP_RL2 = T2CON^0;
113 =1
114 =1 #endif
2 #include<intrins.h>
C51 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 3
1 =1 /*--------------------------------------------------------------------------
2 =1 INTRINS.H
3 =1
4 =1 Intrinsic functions for C51.
5 =1 Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
6 =1 All rights reserved.
7 =1 --------------------------------------------------------------------------*/
8 =1
9 =1 #ifndef __INTRINS_H__
10 =1 #define __INTRINS_H__
11 =1
12 =1 extern void _nop_ (void);
13 =1 extern bit _testbit_ (bit);
14 =1 extern unsigned char _cror_ (unsigned char, unsigned char);
15 =1 extern unsigned int _iror_ (unsigned int, unsigned char);
16 =1 extern unsigned long _lror_ (unsigned long, unsigned char);
17 =1 extern unsigned char _crol_ (unsigned char, unsigned char);
18 =1 extern unsigned int _irol_ (unsigned int, unsigned char);
19 =1 extern unsigned long _lrol_ (unsigned long, unsigned char);
20 =1 extern unsigned char _chkfloat_(float);
21 =1
22 =1 #endif
23 =1
3 #include"LCD1602.H"
1 =1 /*------------------------------------------------------------------------------*/
2 =1 //File: LCD1602_8.H
3 =1 //Date: 08-7-29
4 =1 //Time: 16:09
5 =1 //Note: LCD1602 Mini Driver.
6 =1
7 =1
8 =1
9 =1
10 =1 /*------------------------------------------------------------------------------*/
11 =1 #ifndef __LCD1602_8_H__
12 =1 #define __LCD1602_8_H__
13 =1
14 =1
15 =1
16 =1
17 =1
18 =1 /*------------------------------------------------------------------------------*/
19 =1 //LCD接口定义
20 =1 sfr io = 0x80; //P0-0x80,P1-0x90,P2-0xA0,P3-0xB0;
21 =1 sbit rs = P2^0; //LCD数据/命令选择端(H/L)
22 =1 sbit rw = P2^1; //LCD读/写选择端(H/L)
23 =1 sbit ep = P2^2; //LCD使能控制
24 =1 sbit bz = io^7; //LCD忙标志位
25 =1
26 =1
27 =1
28 =1
29 =1
30 =1 /*------------------------------------------------------------------------------*/
31 =1 //函数声明
32 =1 void lcd_busy(void); //测试LCD忙碌状态程序
33 =1 void lcd_wcmd(unsigned char cmd); //写入指令到LCD程序
34 =1 void lcd_wdat(unsigned char dat); //写入数据到LCD程序
35 =1 void lcd_pos (unsigned char x, bit y); //LCD数据指针位置程序
36 =1 void printc(unsigned char CHAR); //显示字符
37 =1 //void prints(unsigned char *string); //显示字符串
38 =1 void lcd_init(void); //LCD初始化设定程序
C51 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 4
39 =1
40 =1
41 =1
42 =1 /*------------------------------------------------------------------------------*/
43 =1 //测试LCD忙碌状态
44 =1 void lcd_busy(void)
45 =1 {
46 1 =1 do{
47 2 =1 ep = 0;
48 2 =1 rs = 0; //指令
49 2 =1 rw = 1; //读出
50 2 =1 io = 0xff;
51 2 =1 ep = 1;
52 2 =1 _nop_(); //高电平读出 1us
53 2 =1 }while(bz); //bz=1表示忙,bz=0表示空闲
54 1 =1 ep = 0;
55 1 =1 }
56 =1
57 =1
58 =1
59 =1
60 =1 /*------------------------------------------------------------------------------*/
61 =1 //写入指令到LCD
62 =1 void lcd_wcmd(unsigned char cmd)
63 =1 {
64 1 =1 lcd_busy(); //检测忙
65 1 =1 rs = 0; //指令
66 1 =1 rw = 0; //写入
67 1 =1 ep = 1;
68 1 =1 P0 = cmd; //指令
69 1 =1 ep = 0; //下降沿有效
70 1 =1 }
71 =1
72 =1
73 =1
74 =1
75 =1 /*------------------------------------------------------------------------------*/
76 =1 //写入数据函数
77 =1 void lcd_wdat(unsigned char Data)
78 =1 {
79 1 =1 lcd_busy(); //检测忙
80 1 =1 rs = 1; //数据
81 1 =1 rw = 0; //写入
82 1 =1 ep = 1;
83 1 =1 io = Data; //数据
84 1 =1 ep = 0; //下降沿有效
85 1 =1 }
86 =1
87 =1
88 =1
89 =1
90 =1 /*------------------------------------------------------------------------------*/
91 =1 //LCD数据指针位置程序
92 =1 void lcd_pos(unsigned char x, bit y)
93 =1 {
94 1 =1 if(y)lcd_wcmd(x|0xc0); //y=1,第二行显示;y=0,第一行显示 0<=x<16
95 1 =1 else lcd_wcmd(x|0x80); //数据指针=80+地址码(00H~27H,40H~67H)
96 1 =1 }
97 =1
98 =1
99 =1
100 =1
C51 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 5
101 =1 /*------------------------------------------------------------------------------*/
102 =1 //显示字符
103 =1 void printc(unsigned char CHAR)
104 =1 {
105 1 =1 lcd_wdat(CHAR);
106 1 =1 }
107 =1
108 =1
109 =1
110 =1
111 =1 /*------------------------------------------------------------------------------*/
112 =1 //显示字符串
113 =1 /*
114 =1 void prints(unsigned char *string)
115 =1 {
116 =1 unsigned char i;
117 =1 //do{lcd_wdat(string[i]);i++;}while(string[i]!='\0');//生成代码比for循环大
118 =1 for(i=0;string[i]!='\0';i++)lcd_wdat(string[i]); //有时用for循环也好哈
119 =1 }
120 =1 */
121 =1
122 =1
123 =1
124 =1 /*------------------------------------------------------------------------------*/
125 =1 //LCD初始化设定
126 =1 void lcd_init()
127 =1 {
128 1 =1 lcd_wcmd(0x38); //设置LCD为16X2显示,5X7点阵,八位数据接口
129 1 =1 lcd_wcmd(0x06); //LCD显示光标移动设置(光标地址指针加1,整屏显示不移动)
130 1 =1 lcd_wcmd(0x0c); //LCD开显示及光标设置(光标不闪烁,不显示"_")
131 1 =1 lcd_wcmd(0x01); //清除LCD的显示内容
132 1 =1 }
133 =1
134 =1
135 =1 #endif
4 #include"AT24C02.H"
1 =1 /*-----------------------------------------*/
2 =1 //File: AT24C2.H
3 =1 //Data: 2008.6.9//3:06 PM
4 =1 //Amend: 08-8-1 19:31
5 =1 //Version: Ver0.2
6 =1 //Thanks: Web
7 =1 //Code: I love C51~
8 =1
9 =1
10 =1
11 =1 /*-----------------------------------------*/
12 =1 #ifndef __AT24C02_H__
13 =1 #define __AT24C02_H__
14 =1
15 =1
16 =1
17 =1 /*-----------------------------------------*/
18 =1 #define unchar unsigned char
19 =1 #define unint unsigned int
20 =1 #define unlong unsigned long
21 =1
22 =1
23 =1
24 =1 /*-----------------------------------------*/
25 =1 #define WriteDeviceAddress 0xa0 //写
26 =1 #define ReadDeviceAddress 0xa1 //读
C51 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 6
27 =1 sbit SCL = P2^3; //串行接口定义
28 =1 sbit SDA = P2^4;
29 =1
30 =1
31 =1
32 =1 /*-----------------------------------------*/
33 =1 //函数声明
34 =1 void delay1ms(void); //延时1ms
35 =1 void Start(void); //开始总线
36 =1 void Stop(void); //结束总线
37 =1 void NoAck(void); //发送ACk0
38 =1 bit TestAck(void); //测试ACk
39 =1 void Write8Bit(unchar input); //写入8个Bit 到24C02
40 =1 void Write24C02(unchar ch,unchar address);//写入一个字到24C02中的指定地址中
41 =1 unchar Read8Bit(void); //从24C02中读出8个Bit
42 =1 unchar Read24C02(unchar address); //从24C02指定地址位置中读出1个字节
43 =1
44 =1
45 =1
46 =1 /*-----------------------------------------*/
47 =1 //延时1000us
48 =1 void delay1ms(void)
49 =1 {
50 1 =1 unsigned char i,j,k;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -