📄 lesson 8_9.lst
字号:
C51 COMPILER V8.05a LESSON_8_9 02/04/2009 22:45:08 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE LESSON_8_9
OBJECT MODULE PLACED IN lesson 8_9.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lesson 8_9.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 sbit lcdrs=P3^0;
5 sbit lcden=P3^1;
6 sbit sda=P3^7;
7 sbit sck=P3^6;
8 uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
9 void write_cmd(uchar cmd); //还要声明
10 void write_data(uchar data1);
11 void sda_0() {sda=0;;;;}
12 void sda_1() {sda=1;;;;}
13 void sck_0() {sck=0;;;;}
14 void sck_1() {sck=1;;;;}
15 void delay1() {;;;}
16 void delay(uint z)
17 {
18 1 uint x,y;
19 1 for(x=z;x>0;x--)
20 1 for(y=110;y>0;y--);
21 1 }
22
23 void init()
24 {
25 1 sda_1();
26 1 sck_1();
27 1 }
28 //+++++++++++I2C子程序++++++++++++++++
29
30 void start() //开始信号
31 {
32 1 sda_1();
33 1 sck_1();
34 1 sda_0();
35 1 }
36
37 void stop() //停止
38 {
39 1 sda_0();
40 1 sck_1();
41 1 sda_1();
42 1 }
43
44 void response() //应答
45 {
46 1 uchar i;
47 1 sck_1();
48 1 while((sda==1)&&(i<250))i++;
49 1 sck_0();
50 1 }
51
52 void write_byte(uchar date)
53 {
54 1 uchar i,temp;
55 1 temp=date;
C51 COMPILER V8.05a LESSON_8_9 02/04/2009 22:45:08 PAGE 2
56 1
57 1
58 1 for(i=0;i<8;i++)
59 1 {
60 2 temp=temp<<1;
61 2 sck_0();
62 2 sda=CY; delay1();
63 2 sck_1();
64 2 }
65 1 sck_0();
66 1 sda_1();
67 1
68 1 response();
69 1 }
70
71 uchar read_byte()
72 {
73 1 uchar i,temp;
74 1 sck_0();
75 1 sda_1();
76 1 for(i=0;i<8;i++)
77 1 {
78 2 sck_1();
79 2 temp=(temp<<1)|sda;
80 2 sck_0();
81 2 }
82 1 response();
83 1 return temp;
84 1 }
85
86
87 void write_add(uchar address,uchar data1)
88 {
89 1 start();
90 1 write_byte(0xa0);
91 1 write_byte(address);
92 1 write_byte(data1);
93 1 stop();
94 1 }
95
96 uchar read_add(uchar address)
97 {
98 1 uchar data1;
99 1 start();
100 1 write_byte(0xa0);
101 1 write_byte(address);
102 1
103 1 start();
104 1 write_byte(0xa1);
105 1 data1=read_byte();
106 1 stop();
107 1 return data1;
108 1 }
109 //------------I2C子程序-----------------
110
111 //+++++++++++1602显示子程序++++++++++++++++
112 void display(uint k)
113 {
114 1 uchar bai,shi,ge,temp;
115 1 temp=k;
116 1 bai=temp/100;
117 1 shi=temp%100/10;
C51 COMPILER V8.05a LESSON_8_9 02/04/2009 22:45:08 PAGE 3
118 1 ge=temp%10;
119 1 write_cmd(0x86);
120 1 write_data(table[bai]);
121 1 write_cmd(0x87);
122 1 write_data(table[shi]);
123 1 write_cmd(0x88);
124 1 write_data(table[ge]);
125 1 }
126
127 void initial_LCD()
128 {
129 1 lcden=0;
130 1 write_cmd(0x38); // 16X2 5X8显示
131 1 write_cmd(0x0c); //开显示 光标 闪烁
132 1 write_cmd(0x06); //地址指针自动加一,不移动
133 1 write_cmd(0x01); //清屏
134 1 write_cmd(0x80); //数据指针设置
135 1 }
136
137 void write_cmd(uchar cmd)
138 {
139 1 lcdrs=0;
140 1 P2=cmd;
141 1 delay(2);
142 1 lcden=1;
143 1 delay(5);
144 1 lcden=0;
145 1 }
146
147 void write_data(uchar data1)
148 {
149 1 lcdrs=1;
150 1 P2=data1;
151 1 delay(2);
152 1 lcden=1;
153 1 delay(5);
154 1 lcden=0;
155 1 }
156 //---------------1602显示子程序--------------
157 void main()
158 {
159 1 uchar i,j;
160 1 init();
161 1 initial_LCD();
162 1 for(i=0,j=0;i<255;i++,j++)
163 1 {
164 2 write_add(i,j);
165 2 }
166 1
167 1 delay(10);
168 1
169 1 for(i=0,j=0;i<255;i++,j++)
170 1 {
171 2 P1=read_add(i);
172 2 display(i);
173 2 delay(50);
174 2 }
175 1 while(1);
176 1 }
177
178
C51 COMPILER V8.05a LESSON_8_9 02/04/2009 22:45:08 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 412 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
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 + -