📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 03/13/2008 15:39:35 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //===========================================================
2 //
3 //
4 // COPY RIGHT
5 //
6 //
7 //===========================================================
8
9 // 文件名: Main.c
10 // 创建日期: 080303
11 // 创建: 神之吻
12 // 试验难度: 入门级试验
13 // 描述: 作用:
14 // ds1302芯片的使用
15 // 现象:
16 // 八段数码管分时显示当前的时间,显示顺序为
17 // 年月日->时分秒->星期
18 // 引脚连接关系:
19 //
20 //------------------------------------------------------------
21
22
23 //********************************************************
24 //* 头文件
25 //********************************************************
26
27 #include <reg52.h>
28 #include "main.h"
29 #include "ds1302.h"
30
31 //********************************************************
32 //* 全局变量声明
33 //********************************************************
34
35 // 与八段数码管有关的表定义
36 //---------------------------------------------------
37 uint8 code sled_table[] = { // 位编码
38 0x14, // 0
39 0xD7, // 1
40 0x4C, // 2
41 0x45, // 3
42 0x87, // 4
43 0x25, // 5
44 0x24, // 6
45 0x57, // 7
46 0x04, // 8
47 0x05, // 9
48 0x06, // A
49 0xA4, // B
50 0x3C, // C
51 0xC4, // D
52 0x2C, // E
53 0x2E // F
54 };
55
C51 COMPILER V8.02 MAIN 03/13/2008 15:39:35 PAGE 2
56 uint8 code bit_table[] = { // 位选
57 0xDF, // bit0
58 0xEF, // bit1
59 0xF7, // bit2
60 0xFB, // bit3
61 0xFD, // bit4
62 0xFE, // bit5
63 };
64
65
66 //与ds1302采样芯片有关的数据结构
67 //-----------------------------------------------------
68 //时间设置缓冲区(BCD码表示)
69 //设置时间为:08年3月13日,星期四,13时31分30秒
70 uint8 code SetTimeBuf[] = {
71 0xB0, //秒:这里设为30 注意Bit7(启动位)置为1,因为初始化过程中应当禁止时钟
72 0x31, //分:这里设为31
73 0x13, //时:这里设为13 注意Bit7(AM/PM模式选择位)置为0,选择PM模式(24小时制)
74 0x13, //日:这里设为13日
75 0x03, //月:这里设为3月
76 0x04, //星期:这里设为星期四
77 0x08 //年:这里设为08年
78 };
79
80 //用于存储从ds1302读取出的当前时间
81 uint8 code CurTime[7];
82
83 //********************************************************
84 //* 函数原型
85 //********************************************************
86
87 void delay_ms(uint32 ms);
88 void Display();
89
90 //********************************************************
91 //* main函数
92 //********************************************************
93
94 main()
95 {
96 1 //设置初始时间
97 1 SetTime(SetTimeBuf);
98 1 WriteReg(0x80,SetTimeBuf[0]&0xEF); //将秒寄存器的Bit7清0,记时开始
99 1 while(TRUE)
100 1 {
101 2 ReadTime(CurTime); //读取当前时间
102 2 Display(); //将读出的时间显示在八段数码管,由于学习板上只有六位八段数码管,因此分时显示
103 2 //显示顺序为 年月日->时分秒->星期
104 2 }
105 1 }
106
107
108 //*******************************************************
109 //* Display
110 //*
111 //*功能描述:将采样结果通过八段数码管显示出来,显示方式为
112 // 依次显示年月日->时分秒->星期,如此循环往复
113 //*输入参数:无
114 //*返回值:无
115 //*******************************************************
116 void Display()
117 {
C51 COMPILER V8.02 MAIN 03/13/2008 15:39:35 PAGE 3
118 1 uint16 i;
119 1 uint8 TimeTmp;
120 1 //显示当前年月日
121 1 for(i = 0;i < 200;i ++)
122 1 {
123 2 //显示当前年
124 2 TimeTmp = (SetTimeBuf[6] >> 4); //取出当前年的十位数字BCD码
125 2 BITCHOOSE = bit_table[0]; //第一个数码管显示当前年的十位数字
126 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
127 2 TimeTmp = (SetTimeBuf[6] & 0x0F); //取出当前年的个位数字BCD码
128 2 BITCHOOSE = bit_table[1]; //第二个数码管显示当前年的个位数字
129 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
130 2 //显示当前月
131 2 TimeTmp = (SetTimeBuf[4] >> 4); //取出当前月的十位数字BCD码
132 2 BITCHOOSE = bit_table[2]; //第三个数码管显示当前月的十位数字
133 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
134 2 TimeTmp = (SetTimeBuf[4] & 0x0F); //取出当前月的个位数字BCD码
135 2 BITCHOOSE = bit_table[3]; //第四个数码管显示当前月的个位数字
136 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
137 2 //显示当前日
138 2 TimeTmp = (SetTimeBuf[3] >> 4); //取出当前日的十位数字BCD码
139 2 BITCHOOSE = bit_table[4]; //第五个数码管显示当前日的十位数字
140 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
141 2 TimeTmp = (SetTimeBuf[3] & 0x0F); //取出当前日的个位数字BCD码
142 2 BITCHOOSE = bit_table[5]; //第六个数码管显示当前日的个位数字
143 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
144 2 }
145 1 //显示当前时分秒
146 1 for(i = 0;i < 200;i ++)
147 1 {
148 2 //显示当前时
149 2 TimeTmp = (SetTimeBuf[2] >> 4); //取出当前时的十位数字BCD码
150 2 BITCHOOSE = bit_table[0]; //第一个数码管显示当前时的十位数字
151 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
152 2 TimeTmp = (SetTimeBuf[2] & 0x0F); //取出当前时的个位数字BCD码
153 2 BITCHOOSE = bit_table[1]; //第二个数码管显示当前时的个位数字
154 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
155 2 //显示当前分
156 2 TimeTmp = (SetTimeBuf[1] >> 4); //取出当前分的十位数字BCD码
157 2 BITCHOOSE = bit_table[2]; //第三个数码管显示当前分的十位数字
158 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
159 2 TimeTmp = (SetTimeBuf[1] & 0x0F); //取出当前分的个位数字BCD码
160 2 BITCHOOSE = bit_table[3]; //第四个数码管显示当前分的个位数字
161 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
162 2 //显示当前秒
163 2 TimeTmp = (SetTimeBuf[0] >> 4); //取出当前日秒的十位数字BCD码
164 2 BITCHOOSE = bit_table[4]; //第五个数码管显示当前秒的十位数字
165 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
166 2 TimeTmp = (SetTimeBuf[0] & 0x0F); //取出当前秒的个位数字BCD码
167 2 BITCHOOSE = bit_table[5]; //第六个数码管显示当前秒的个位数字
168 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
169 2 }
170 1 //显示当前星期
171 1 for(i = 0;i < 200;i ++)
172 1 {
173 2 //显示当前时
174 2 TimeTmp = (SetTimeBuf[5] >> 4); //取出当前星期的十位数字BCD码
175 2 BITCHOOSE = bit_table[0]; //第一个数码管显示当前时的十位数字
176 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
177 2 TimeTmp = (SetTimeBuf[5] & 0x0F); //取出当前星期的个位数字BCD码
178 2 BITCHOOSE = bit_table[1]; //第二个数码管显示当前时的个位数字
179 2 BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
C51 COMPILER V8.02 MAIN 03/13/2008 15:39:35 PAGE 4
180 2 }
181 1
182 1
183 1 }
184
185 //*******************************************************
186 //* delay_ms
187 //*
188 //*功能描述:ms级延时函数
189 //*输入参数:
190 //*返回值:无
191 //*******************************************************
192 void delay_ms(uint32 ms)
193 {
194 1 uint32 i, j;
195 1 for(i = 0; i < ms; i++)
196 1 for(j = 0; j < 5000; j++);
197 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 495 ----
CONSTANT SIZE = 36 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
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 + -