📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 03/15/2006 19:40:58 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE MAIN.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <AT89X52.H>
2 #include <stdio.h>
3 #include <absacc.h>
4 unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
5 0x6d,0x7d,0x07, 0x7f,0x6f,};
6 unsigned char sec; //定义计数值,每过1秒,sec加1
7 unsigned int tcnt; //定时中断次数
8 bit write=0; //写24C08的标志;
9 sbit gewei=P2^0; //个位选通定义
10 sbit shiwei=P2^1; //十位选通定义
11 /////////24C08读写驱动程序////////////////////
12 sbit scl=P3^4; //24c08 SCL
13 sbit sda=P3^5; //24c08 SDA
14 void delay1(unsigned char x)
15 { unsigned int i;
16 1 for(i=0;i<x;i++);
17 1 ;}
18 void flash()
19 { ; ; }
20 void x24c08_init() //24c08初始化子程序
21 {scl=1; flash(); sda=1; flash();}
22 void start() //启动I2C总线
23 {sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();}
24 void stop() //停止I2C总线
25 {sda=0; flash(); scl=1; flash(); sda=1; flash();}
26 void writex(unsigned char j) //写一个字节
27 { unsigned char i,temp;
28 1 temp=j;
29 1 for (i=0;i<8;i++)
30 1 {temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}
31 1 scl=0; flash(); sda=1; flash();
32 1 }
33 unsigned char readx() //读一个字节
34 {
35 1 unsigned char i,j,k=0;
36 1 scl=0; flash(); sda=1;
37 1 for (i=0;i<8;i++)
38 1 { flash(); scl=1; flash();
39 2 if (sda==1) j=1;
40 2 else j=0;
41 2 k=(k<<1)|j;
42 2 scl=0;}
43 1 flash(); return(k);
44 1 }
45 void clock() //I2C总线时钟
46 {
47 1 unsigned char i=0;
48 1 scl=1; flash();
49 1 while ((sda==1)&&(i<255))i++;
50 1 scl=0; flash();
51 1 }
52 ////////从24c02的地址address中读取一个字节数据/////
53 unsigned char x24c08_read(unsigned char address)
54 {
55 1 unsigned char i;
C51 COMPILER V7.06 MAIN 03/15/2006 19:40:58 PAGE 2
56 1 start(); writex(0xa0);
57 1 clock(); writex(address);
58 1 clock(); start();
59 1 writex(0xa1); clock();
60 1 i=readx(); stop();
61 1 delay1(10);
62 1 return(i);
63 1 }
64 //////向24c02的address地址中写入一字节数据info/////
65 void x24c08_write(unsigned char address,unsigned char info)
66 {
67 1 EA=0;
68 1 start(); writex(0xa0);
69 1 clock(); writex(address);
70 1 clock(); writex(info);
71 1 clock(); stop();
72 1 EA=1;
73 1 delay1(50);
74 1 }
75 /////////////24C08读写驱动程序完/////////////////////
76 void Delay(unsigned int tc) //延时程序
77 {
78 1 while( tc != 0 )
79 1 {unsigned int i;
80 2 for(i=0; i<100; i++);
81 2 tc--;}
82 1 }
83 void LED() //LED显示函数
84 {
85 1 shiwei=0; P0=table[sec/10]; Delay(8); shiwei=1;
86 1 gewei=0; P0=table[sec%10]; Delay(5); gewei=1;
87 1 }
88 void t0(void) interrupt 1 using 0 //定时中断服务函数
89 {
90 1 TH0=(65536-50000)/256; //对TH0 TL0赋值
91 1 TL0=(65536-50000)%256; //重装计数初值
92 1 tcnt++; //每过250ust tcnt加一
93 1 if(tcnt==20) //计满20次(1秒)时
94 1 {
95 2 tcnt=0; //重新再计
96 2 sec++;
97 2 write=1; //1秒写一次24C08
98 2 if(sec==100) //定时100秒,在从零开始计时
99 2 {sec=0;}
100 2 }
101 1 }
102 void main(void)
103 {
104 1 TMOD=0x01; //定时器工作在方式1
105 1 ET0=1; EA=1;
106 1 x24c08_init(); //初始化24C08
107 1 sec=x24c08_read(2);//读出保存的数据赋于sec
108 1 TH0=(65536-50000)/256; //对TH0 TL0赋值
109 1 TL0=(65536-50000)%256; //使定时器0.05秒中断一次
110 1 TR0=1; //开始计时
111 1 while(1)
112 1 {
113 2 LED();
114 2 if(write==1) //判断计时器是否计时一秒
115 2 {
116 3 write=0; //清零
117 3 x24c08_write(2,sec); //在24c08的地址2中写入数据sec
C51 COMPILER V7.06 MAIN 03/15/2006 19:40:58 PAGE 3
118 3 }
119 2 }
120 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 397 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 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 + -