📄 xxx.lst
字号:
C51 COMPILER V7.06 XXX 08/21/2008 19:50:23 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE XXX
OBJECT MODULE PLACED IN xxx.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE xxx.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "reg51.h"
2 #include <stdio.h>
3 #include <absacc.h>
4
5 unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
6 unsigned char sec,kk; //定义计数值,每过1秒,sec加1
7 unsigned int tcnt; //定时中断次数
8 sbit P2_1=P2^1; //
9 bit write=0; //写24C08的标志;
10 sbit gewei=P2^2; //个位选通定义
11 sbit shiwei=P2^3; //十位选通定义
12 sbit qianwei=P2^4; //千位选通定义
13 sbit wanwei=P2^5; //万位选通定义
14
15 sbit bell = P1^1;
16
17 /////////24C08读写驱动程序////////////////////
18 sbit scl=P3^7; //24c08 SCL
19 sbit sda=P3^6; //24c08 SDA
20
21 void delay1(unsigned char x)
22 { unsigned int i;
23 1 for(i=0;i<x;i++);
24 1 ;}
25 void flash()
26 { ; ; }
27 void x24c08_init() //24c08初始化子程序
28 {scl=1; flash(); sda=1; flash();}
29 //当SCL是高电平时 SDA线从高电平向低电平切换表示起始条件
30 //当SCL是高电平时 SDA线从低电平向高电平切换表示停止条件
31 void start() //启动I2C总线
32 {sda=1; flash(); scl=1; flash(); sda=0; flash(); /*scl=0; flash();*/}
33 void stop() //停止I2C总线
34 {sda=0; flash(); scl=1; flash(); sda=1; flash();}
35 ///SDA 线上的数据必须在时钟的高电平周期保持稳定
36 //数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变
37 void writex(unsigned char j) //写一个字节
38 { unsigned char i,temp;
39 1 temp=j;
40 1 for (i=0;i<8;i++)
41 1 {temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}
42 1 scl=0; flash(); /*sda=1; flash();*/ //?????
43 1 }
44 unsigned char readx() //读一个字节
45 {
46 1 unsigned char i,j,k=0;
47 1 scl=0; flash(); sda=1;
48 1 for (i=0;i<8;i++)
49 1 { flash(); scl=1; flash();
50 2 if (sda==1) j=1;
51 2 else j=0;
52 2 k=(k<<1)|j;
53 2 scl=0;}
54 1 flash(); return(k);
55 1 }
C51 COMPILER V7.06 XXX 08/21/2008 19:50:23 PAGE 2
56 //数据传输必须有响应,相关的响应时钟脉冲由主机产生
57 //在响应的时钟脉冲期间发送器释放SDA线(高)
58 //在响应的时钟脉冲期间接收器必须将SDA线拉低
59 //使它在这个时钟脉冲的高电平期间保持稳定的低电平
60 void clock() //I2C总线时钟
61 {
62 1 unsigned char i=0;
63 1 scl=1; flash();
64 1 while ((sda==1)&&(i<200))i++;
65 1 scl=0; flash();
66 1 }
67 //选择读时序
68 //开始-从器件地址-A-字节地址-A--开始-读-A-返回DATA-停止
69 ////////从24c02的地址address中读取一个字节数据/////
70 unsigned char x24c08_read(unsigned char address)
71 {
72 1 unsigned char i;
73 1 start(); writex(0xa0);//发送从机地址
74 1 clock(); writex(address);//
75 1 clock(); start();
76 1 writex(0xa1); clock();
77 1 i=readx(); stop();
78 1 delay1(10);
79 1 return(i);
80 1 }
81 //
82 //////向24c02的address地址中写入一字节数据info/////
83 void x24c08_write(unsigned char address,unsigned char info)
84 {
85 1 EA=0;
86 1 start(); writex(0xa0);
87 1 clock(); writex(address);
88 1 clock(); writex(info);
89 1 clock(); stop();
90 1 EA=1;
91 1 delay1(50);
92 1 }
93 /////////////24C08读写驱动程序完/////////////////////
94 void Delay(unsigned int tc) //延时程序
95 {
96 1 while( tc != 0 )
97 1 {unsigned int i;
98 2 for(i=0; i<100; i++);
99 2 tc--;}
100 1 }
101 void LED() //LED显示函数
102 {
103 1 shiwei=0; P0=table[sec/10]; Delay(8); shiwei=1;
104 1 gewei=0; P0=table[sec%10]; Delay(5); gewei=1;
105 1 }
106 void t0(void) interrupt 1 using 0 //定时中断服务函数
107 {
108 1 TH0=(65536-50000)/256; //对TH0 TL0赋值
109 1 TL0=(65536-50000)%256; //重装计数初值
110 1 tcnt++; //每过250ust tcnt加一
111 1 if(tcnt==20) //计满20次(1秒)时
112 1 {
113 2 tcnt=0; //重新再计
114 2 sec++;
115 2 write=1; //1秒写一次24C08
116 2 if(sec==100) //定时100秒,在从零开始计时
117 2 {sec=0;}
C51 COMPILER V7.06 XXX 08/21/2008 19:50:23 PAGE 3
118 2 }
119 1 }
120 /*
121 void main(void)
122 {
123 P2_1=0;
124 TMOD=0x01; //定时器工作在方式1
125 ET0=1; EA=1;
126 x24c08_init(); //初始化24C08
127 sec=x24c08_read(2);//读出保存的数据赋于sec
128 TH0=(65536-50000)/256; //对TH0 TL0赋值
129 TL0=(65536-50000)%256; //使定时器0.05秒中断一次
130 TR0=1; //开始计时
131 while(1)
132 {
133 LED();
134 if(write==1) //判断计时器是否计时一秒
135 {
136 write=0; //清零
137 x24c08_write(2,sec); //在24c08的地址2中写入数据sec
138 }
139 }
140 }
141 */
142
143
144 void main(void)
145 {
146 1 unsigned char i;
147 1 /*for(i=0;i<255;i++)
148 1 {
149 1 x24c08_write(i,i);
150 1 Delay(1);
151 1 }*/
152 1 // x24c08_write(33,37);
153 1
154 1 while(1)
155 1 {
156 2
157 2 for(i=0;i<256;i++)
158 2 {
159 3 P0 = x24c08_read(i);
160 3 Delay(300);
161 3 }
162 2 }
163 1 }
164
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 371 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 2
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -