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

152 lines
5.2 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:42:30 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] = {5, 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 Uart_Slow_Down;
13 uchar Uart_Buf[20]; // 串口接收到的数据
14 uchar Uart_Rx_Index; // 串口接收到的数据的指针
15
16 /* 键盘方面 */
17 uchar Key_Slow_Down;
18
19 /* 数据 */
20 uchar input_data;
21 bit down_flag;
22 /* 键盘处理函数 */
23 void Key_Proc()
24 {
25 1 static uchar Key_Val, Key_Down, Key_Up, Key_Old;
26 1 if (Key_Slow_Down)
27 1 return;
28 1 Key_Slow_Down = 1;
29 1
30 1 Key_Val = Key_Read();
31 1 Key_Down = Key_Val & (Key_Old ^ Key_Val);
32 1 Key_Up = ~Key_Val & (Key_Old ^ Key_Val);
33 1 Key_Old = Key_Val;
34 1 if (Key_Down != 0)
35 1 {
36 2 input_data = Key_Down;
37 2 down_flag = 1;
38 2 }
39 1 }
40 /* 数码管处理函数 */
41 void Seg_Proc()
42 {
43 1 if (Seg_Slow_Down)
44 1 return;
45 1 Seg_Slow_Down = 1;
46 1 }
47
48 /* LED处理函数 */
49 void Led_Proc()
50 {
51 1 }
52
53 /* 串口处理函数 */
54 void Uart_Proc()
C51 COMPILER V9.59.0.0 MAIN 03/12/2024 11:42:30 PAGE 2
55 {
56 1 if (Uart_Slow_Down)
57 1 return;
58 1 Uart_Slow_Down = 1;
59 1 if (down_flag)
60 1 {
61 2 printf(" You pressed it %bu", input_data);
62 2 down_flag = 0;
63 2 }
64 1 if (Uart_Buf[0] == 'O' && Uart_Buf[1] == 'K')
65 1 {
66 2 // 执行相关函数
67 2 printf("hello");
68 2 memset(Uart_Buf, 0, 20);
69 2 Uart_Rx_Index = 0;
70 2 }
71 1 }
72
73 /* 定时器0中断初始化 */
74 void Timer0_Init(void) // 1毫秒@12.000MHz
75 {
76 1 AUXR &= 0x7F; // 定时器时钟12T模式
77 1 TMOD &= 0xF0; // 设置定时器模式
78 1 TL0 = 0x18; // 设置定时初始值
79 1 TH0 = 0xFC; // 设置定时初始值
80 1 TF0 = 0; // 清除TF0标志
81 1 TR0 = 1; // 定时器0开始计时
82 1 ET0 = 1;
83 1 EA = 1;
84 1 }
85
86 /* 定时器0中断函数 */
87 void Timer0_ISR(void) interrupt 1
88 {
89 1 if (++Key_Slow_Down == 10)
90 1 Key_Slow_Down = 0;
91 1 if (++Seg_Slow_Down == 500)
92 1 Seg_Slow_Down = 0;
93 1 if (++Uart_Slow_Down == 200)
94 1 Uart_Slow_Down = 0;
95 1 if (++Seg_Pos == 8)
96 1 Seg_Pos = 0;
97 1 Seg_Disp(Seg_Pos, Seg_Buf[Seg_Pos], Seg_Point[Seg_Pos]);
98 1 Led_Disp(Seg_Pos, ucLed[Seg_Pos]);
99 1 }
100
101 /* 串口中断服务函数 */
102 void Uart_ISR(void) interrupt 4
103 {
104 1 if (RI == 1) // 串口接收到数据
105 1 {
106 2 Uart_Buf[Uart_Rx_Index] = SBUF;
107 2 Uart_Rx_Index++;
108 2 RI = 0;
109 2 }
110 1 }
111 void main()
112 {
113 1 System_Init();
114 1 Timer0_Init();
115 1 Uart1_Init();
116 1 while (1)
C51 COMPILER V9.59.0.0 MAIN 03/12/2024 11:42:30 PAGE 3
117 1 {
118 2 Key_Proc();
119 2 Seg_Proc();
120 2 Uart_Proc();
121 2 Led_Proc();
122 2 }
123 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 316 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 54 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)