📄 tm24cl02.lst
字号:
1: #include"lcd.h"
2: #include"pic18fxx2.h"
3:
4: //#define uchar unsigned char
5: //#define uint unsigned int
6: //#define ulong unsigned long
7: //void delay2(uchar delay_temp); //长延时
8: //void delaym(uchar delaym_temp); //短延时
9: //void sta(void);//启动IIC总线
10: //void stop(void);//停止IIC总线数据传送
11: //void mack(void);//发送应答位
12: //void mnack(void);//发送非应答位
13: //uchar cack(void);//应答位检查
14: //void wrbyt(uchar date_24c02);//向SDA线上发送一个数据字节
15: //uchar rdbyt(void);//从SDA线上读取一个数据字节
16: unsigned int ii;
17:
18: void delay2(uchar delay_temp)//延时子程序
19: {
20: uchar i,j;
21: for(i=0;i<delay_temp;i++)
22: {
23: for(j=0;j<200;j++);
24: }
25: }
26:
27: void delaym(uchar delaym_temp)//延时子程序
28: {
29: uchar i;
30: for(i=0;i<delaym_temp;i++);
31: }
32:
33: void sta(void)//启动IIC总线
34: {
35: slk=0;
36: sda=1;
37: slk=1;
38: delaym(1);
39: sda=0;
40: delaym(1);
41: slk=0;
42: }
43:
44: void stop(void)//停止IIC总线数据传送
45: {
46: slk=0;
47: sda=0;
48: slk=1;
49: delaym(1);
50: sda=1;
51: delaym(1);
52: slk=0;
53: }
54:
55: /*
56: void mack(void)//发送应答位
57: {
58: at24c02_sda=0;
59: at24c02_scl=1;
60: delaym(1);
61: at24c02_scl=0;
62: at24c02_sda=1;
63: }
64: */
65:
66: uchar cack(void)//应答位检查
67: {
68: uchar i;
69: i=0x00;
70: sda=1;
71: slk=1;
72: if(sda==1)i=0xff;
73: slk=0;
74: return i;
75: }
76:
77: void mnack(void)//发送非应答位
78: {
79: sda=1;
80: slk=1;
81: delaym(1);
82: slk=0;
83: sda=0;
84: }
85:
86: void wrbyt(uchar w24)//向SDA线上发送一个数据字节
87: {
88: uchar i,j;
89: j=0x80;
90: for(i=0;i<8;i++)
91: {
92: if((w24&j)==0)
93: {
94: sda=0;
95: slk=1;
96: delaym(1);
97: slk=0;
98: }
99: else
100: {
101: sda=1;
102: slk=1;
103: delaym(1);
104: slk=0;
105: sda=0;
106: }
107: j=j>>1;
108: }
109: }
110:
111: unsigned char rd() //从SDA线上读取一个数据字节
112: {
113: uchar i,j;
114: j=0x00;
115: for(i=0;i<8;i++)
116: {
117: sda=1;
118: slk=1;
119: if(sda==0)
120: {
121: j=j&0xfe;
122: }
123: else
124: {
125: j=j|0x01;
126: }
127: if(i!=7)j=j<<1;
128: slk=0;
129: }
130: return j;
131: }
132:
133: uchar wr(unsigned char dd)
134: {
135: uchar m;
136: for(ii=0;ii<2;ii++)//写入0x55
137: {
138: sta();
139: wrbyt(0xa0);//写24C02
140: if(cack()!=0)break;
141: wrbyt((uchar)ii);//地址
142: //wrbyt(0x00);
143: if(cack()!=0)break;
144: wrbyt(dd);//写数据
145: if(cack()!=0)break;
146: stop();
147: delay2(20);//停止到启动信号之间需要延时
148: }
149: for(ii=0;ii<2;ii++)//读出并校验0x55
150: {
151: sta();
152: wrbyt(0xa0);
153: if(cack()!=0)break;
154: wrbyt((uchar)ii);//地址
155: //wrbyt(0x00);
156: if(cack()!=0)break;
157: sta();
158: wrbyt(0xa1);//读24C02
159: if(cack()!=0)break;
160: m=rd();
161: if(m==dd)break;
162: //delaym(1);// if(temp_1!=dd)break;
163: mnack();
164: stop();
165: delay2(20);
166: }
167: return m;
168: }
169:
170:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -