📄 ds12887.lst
字号:
C51 COMPILER V7.06 DS12887 02/16/2009 11:18:07 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DS12887
OBJECT MODULE PLACED IN ds12887.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds12887.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //DS12887驱动程序 ,用串口助手调试
2 //包含头文件
3 #include<AT89X52.H>
4 #include"DS12887_1.H" //自定义得头文件
5
6 unsigned char k; //键值
7 unsigned char Set; //调整值
8
9 //====================================================================
10 #define uchar unsigned char //定义无符号字符为 uchar,方便书写
11 #define uint unsigned int
12
13 //串口部分
14 uchar temp;
15 uchar y1,y2,y3,y4,y5,y6;
16
17
18 //延时200ms 函数定义
19 void delay200ms(void)
20 {
21 1 unsigned char i,j,k;
22 1 for(i=201;i>0;i--)
23 1 for(j=32;j>0;j--)
24 1 for(k=14;k>0;k--);
25 1 }
26
27 //延时5000+0us 函数定义
28 void delay5ms(void)
29 {
30 1 unsigned char i,j;
31 1 for(i=185;i>0;i--)
32 1 for(j=12;j>0;j--);
33 1 }
34
35 //键盘扫描,修改时间
36 void Keysan(void) //P2_0切换键,P2_1数值加,P2_1数值减
37 {
38 1 if(P2_0 == 0)
39 1 {
40 2 delay5ms();
41 2 if(P2_0 == 0) k++;
42 2 if(k == 7) k = 0;
43 2 }
44 1 if(P2_1 == 0) {delay5ms(); if(P2_1 == 0) Set++;}
45 1 if(P2_2 == 0) {delay5ms(); if(P2_2 == 0) Set--;}
46 1 switch(k)
47 1 {
48 2 case 0: DS12887_SetTime(DS12887_Second, Set); if(Set > 59 || Set < 0) Set = 0; break;
49 2 case 1: DS12887_SetTime(DS12887_Minute, Set); if(Set > 59 || Set < 0) Set = 0; break;
50 2 case 2: DS12887_SetTime(DS12887_Hour , Set); if(Set > 24 || Set < 0) Set = 0; break;
51 2 case 3: DS12887_SetTime(DS12887_Day , Set); if(Set > 31 || Set < 0) Set = 0; break;
52 2 case 4: DS12887_SetTime(DS12887_Month , Set); if(Set > 12 || Set < 0) Set = 0; break;
53 2 case 5: DS12887_SetTime(DS12887_Year , Set);break;
54 2 default: break;
55 2 }
C51 COMPILER V7.06 DS12887 02/16/2009 11:18:07 PAGE 2
56 1 }
57
58 //串口中断子函数
59 void serial(void)interrupt 4 using 1
60 {
61 1 ES=0; //禁止串口中断
62 1 while(RI==0);RI=0;
63 1 temp=SBUF; //接受串口数据
64 1 if(temp=='0') //读器件指令'0'
65 1 SBUF=y1;
66 1 while(TI==0);TI=0; //将同一数据发送到串口
67 1 ES=1; //允许串口中断 */
68 1 SBUF=y2; //回传的数为十六进制数,且会省掉小数部分,因为SBUF只有八位
69 1 while(TI==0);TI=0; //将同一数据发送到串口
70 1 ES=1; //允许串口中断
71 1 SBUF=y3; //回传的数为十六进制数,且会省掉小数部分,因为SBUF只有八位
72 1 while(TI==0);TI=0; //将同一数据发送到串口
73 1 ES=1; //允许串口中断
74 1 SBUF=y4; //回传的数为十六进制数,且会省掉小数部分,因为SBUF只有八位
75 1 while(TI==0);TI=0; //将同一数据发送到串口
76 1 ES=1; //允许串口中断
77 1 SBUF=y5; //回传的数为十六进制数,且会省掉小数部分,因为SBUF只有八位
78 1 while(TI==0);TI=0; //将同一数据发送到串口
79 1 ES=1; //允许串口中断
80 1 SBUF=y6; //回传的数为十六进制数,且会省掉小数部分,因为SBUF只有八位
81 1 while(TI==0);TI=0; //将同一数据发送到串口
82 1 ES=1; //允许串口中断
83 1 }
84
85 //主函数
86 void main(void)
87 {
88 1
89 1 SYSTEMTIME CurrentTime;
90 1 DS12887_Init();
91 1 //串口初始化
92 1 TMOD=0x20; //T1工作方式2
93 1 TH1=0xfd; //串口波特率为9600
94 1 SCON=0x50; //串口工作于方式1并允许接受
95 1 TR1=1; //启动T1
96 1 ES=1; //允许串口中断
97 1 EA=1; //允许全部外设中断
98 1 //时间初始化设置 ,2009-2-16 2:00:00
99 1 DS12887_SetTime(DS12887_Second, 0); //设置秒
100 1 DS12887_SetTime(DS12887_Minute, 0); //设置分
101 1 DS12887_SetTime(DS12887_Hour, 2); //设置时
102 1 DS12887_SetTime(DS12887_Day, 16); //设置天
103 1 DS12887_SetTime(DS12887_Month, 2); //设置月
104 1 DS12887_SetTime(DS12887_Year, 9); //设置年
105 1 k = 6; //不改变时间
106 1 while(1)
107 1 {
108 2 DS12887_GetTime(&CurrentTime);
109 2 delay200ms();
110 2 Keysan();
111 2 }
112 1 }
113
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 586 ----
C51 COMPILER V7.06 DS12887 02/16/2009 11:18:07 PAGE 3
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 25
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 + -