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)