51_LanQiaoBei/模板/蓝桥杯全模块测试例程/DS1302时钟模块/User/Listings/main.lst
2025-04-13 01:02:19 +08:00

147 lines
5.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

C51 COMPILER V9.59.0.0 MAIN 03/12/2024 11:36:11 PAGE 1
C51 COMPILER V9.59.0.0, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Objects\main.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE main.c OPTIMIZE(8,SPEED) BROWSE INCDIR(..\Driver) DEBUG OBJECTEXTEND PRI
-NT(.\Listings\main.lst) TABS(2) OBJECT(.\Objects\main.obj)
line level source
1 #include "main.h"
2 /* LED显示 */
3 uchar ucLed[8] = {0, 0, 0, 0, 0, 0, 0, 0};
4
5 /* 数码管显示 */
6 uchar Seg_Slow_Down; // 数码管减速
7 uchar Seg_Buf[8] = {10, 10, 10, 10, 10, 10, 10, 10}; // 数码管显示的值
8 uchar Seg_Pos; // 数码管指示
9 uchar Seg_Point[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // 某位是否显示小数点
10
11 /* 时间方面 */
12 uchar ucRtc[3] = {0x13, 0x59, 0x50}; // 初始化时间13:59:50
13
14 /* 键盘方面 */
15 uchar Key_Slow_Down;
16
17 bit Time_ring; // 整点报时
18 uint time_1s;
19
20 /* 键盘处理函数 */
21 void Key_Proc()
22 {
23 1 static uchar Key_Val, Key_Down, Key_Up, Key_Old;
24 1 if (Key_Slow_Down)
25 1 return;
26 1 Key_Slow_Down = 1;
27 1
28 1 Key_Val = Key_Read();
29 1 Key_Down = Key_Val & (Key_Old ^ Key_Val);
30 1 Key_Up = ~Key_Val & (Key_Old ^ Key_Val);
31 1 Key_Old = Key_Val;
32 1 }
33 /* 数码管处理函数 */
34 void Seg_Proc()
35 {
36 1 if (Seg_Slow_Down)
37 1 return;
38 1 Seg_Slow_Down = 1;
39 1 Read_Rtc(ucRtc);
40 1 Seg_Buf[0] = ucRtc[0] / 16;
41 1 Seg_Buf[1] = ucRtc[0] % 16;
42 1 Seg_Buf[2] = 11; //-
43 1 Seg_Buf[3] = ucRtc[1] / 16;
44 1 Seg_Buf[4] = ucRtc[1] % 16;
45 1 Seg_Buf[5] = 11; //-
46 1 Seg_Buf[6] = ucRtc[2] / 16;
47 1 Seg_Buf[7] = ucRtc[2] % 16;
48 1 }
49
50 /* LED处理函数 */
51 void Led_Proc()
52 {
53 1 if ((ucRtc[1]==0) && (ucRtc[2]== 0))
54 1 Time_ring = 1;
C51 COMPILER V9.59.0.0 MAIN 03/12/2024 11:36:11 PAGE 2
55 1 Relay(Time_ring);
56 1 Beep(Time_ring);
57 1 if (Time_ring)
58 1 {
59 2 memset(ucLed, 1, 4);
60 2 memset(ucLed + 4, 0, 4);
61 2 }
62 1 else
63 1 {
64 2 memset(ucLed, 0, 4);
65 2 memset(ucLed + 4, 1, 4);
66 2 }
67 1 }
68
69 /* 定时器0中断初始化 */
70 void Timer0_Init(void) // 1毫秒@12.000MHz
71 {
72 1 AUXR &= 0x7F; // 定时器时钟12T模式
73 1 TMOD &= 0xF0; // 设置定时器模式
74 1 TL0 = 0x18; // 设置定时初始值
75 1 TH0 = 0xFC; // 设置定时初始值
76 1 TF0 = 0; // 清除TF0标志
77 1 TR0 = 1; // 定时器0开始计时
78 1 ET0 = 1;
79 1 EA = 1;
80 1 }
81
82 /* 定时器0中断函数 */
83 void Timer0_ISR(void) interrupt 1
84 {
85 1 if (++Key_Slow_Down == 10)
86 1 Key_Slow_Down = 0;
87 1 if (++Seg_Slow_Down == 500)
88 1 Seg_Slow_Down = 0;
89 1 if (++Seg_Pos == 8)
90 1 Seg_Pos = 0;
91 1 if (Time_ring)
92 1 {
93 2 if (++time_1s == 1000)
94 2 {
95 3 time_1s = 0;
96 3 Time_ring = 0;
97 3 }
98 2 }
99 1 else
100 1 {
101 2 time_1s = 0;
102 2 }
103 1 Seg_Disp(Seg_Pos, Seg_Buf[Seg_Pos], Seg_Point[Seg_Pos]);
104 1 Led_Disp(Seg_Pos, ucLed[Seg_Pos]);
105 1 }
106
107 void main()
108 {
109 1 System_Init();
110 1 Timer0_Init();
111 1 Set_Rtc(ucRtc);
112 1 while (1)
113 1 {
114 2 Key_Proc();
115 2 Seg_Proc();
116 2 Led_Proc();
C51 COMPILER V9.59.0.0 MAIN 03/12/2024 11:36:11 PAGE 3
117 2 }
118 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 374 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 36 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)