📄 xxh.lst
字号:
C51 COMPILER V7.07 XXH 01/07/2009 16:15:46 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE XXH
OBJECT MODULE PLACED IN xxh.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE xxh.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2
3 #define PORTSEG P0 // 数码管段输出
4 #define PORTDIG P2 // 数码管位输出
5
6 sbit KEY0 = P1^7;
7 sbit KEY1 = P1^6;
8
9 unsigned char i_ms,i_sec,i_min;
10 unsigned char c_disp_dat[8],i_cur_dig;
11 bit b_flag;
12
13 char code seg_7[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
14
15 void time() interrupt 1 // 10ms 到了更新时间值
16 {
17 1 TH0=0x78;
18 1 TL0=0xEC;
19 1 TR0=1;
20 1
21 1 if(i_ms++ == 100) // ms 计数到100ms
22 1 {
23 2 i_ms = 0; // ms 清零
24 2 if(i_sec++ == 60) // 秒计数加一
25 2 {
26 3 i_sec = 0; // 秒计数达到60 就清0
27 3 if(i_min++ == 60) // 分计数加一
28 3 {
29 4 i_min = 0; // 分计数达到60 就清0
30 4 }
31 3 }
32 2 }
33 1
34 1 c_disp_dat[0]=seg_7[i_min/10]; // 把要显示的分钟数的十位数段码查出来
35 1 c_disp_dat[1]=seg_7[i_min%10]; // 把要显示的分钟数的个位数段码查出来
36 1 c_disp_dat[2]=seg_7[i_sec/10]; // 把要显示的秒钟数的十位数段码查出来
37 1 c_disp_dat[3]=seg_7[i_sec%10]; // 把要显示的秒钟数的个位数段码查出来
38 1 c_disp_dat[4]=seg_7[i_ms/10]; // 把要显示的毫秒数的十位数段码查出来
39 1 c_disp_dat[5]=seg_7[i_ms%10]; // 把要显示的毫秒数的个位数段码查出来
40 1 }
41
42
43 void interact() interrupt 3 //隔一段时间切换显示一位LED,实现扫描显示
44 {
45 1 TH1=0xf6;
46 1 TL1=0x3c;
47 1 TR1=1;
48 1
49 1 PORTSEG = 0x0;
50 1 if(++i_cur_dig==6) // 共需要显示6位数字
51 1 {
52 2 PORTDIG = 0xdf;
53 2 i_cur_dig = 0;
54 2 }
55 1 else
C51 COMPILER V7.07 XXH 01/07/2009 16:15:46 PAGE 2
56 1 PORTDIG = ~((~PORTDIG)>>1); // 显示右边一位LED
57 1 PORTSEG = c_disp_dat[i_cur_dig]; // 段码输出
58 1 }
59
60 void delay(unsigned char i) // 延时程序
61 {
62 1 while(i--);
63 1 }
64
65 void main()
66 {
67 1 EA=0; //关所有中断
68 1
69 1 TMOD=0x01; // T0、T1 均为16位计数模式
70 1 TH0=0x78;
71 1 TL0=0xEC;
72 1
73 1 TH1=0xf6;
74 1 TL1=0x3c;
75 1
76 1 i_ms = i_sec = i_min = 0;
77 1 i_cur_dig = 0;
78 1 PORTDIG = 0xfe;
79 1
80 1 ET0=1; //开T0中断
81 1 TR0=1;
82 1 ET1=1; //开T1中断
83 1 TR1=1;
84 1 EA=1; //开所有中断
85 1
86 1 while(1)
87 1 {
88 2 if(KEY0 == 0) //检测是否按下 key0 按键
89 2 {
90 3 delay(100); // 消抖
91 3 if(KEY0 == 0)
92 3 {
93 4 TR0 = ~TR0; // 暂停秒表
94 4 while(KEY0 == 0) // 等待按键释放
95 4 {}
96 4 }
97 3 }
98 2 if(KEY1 == 0) //检测是否按下 key1 按键
99 2 {
100 3 delay(100); // 消抖
101 3 if(KEY1 == 0)
102 3 {
103 4 i_ms = i_sec = i_min = 0; // 清秒表计数
104 4 while(KEY0 == 0) // 等待按键释放
105 4 {}
106 4 }
107 3 }
108 2 }
109 1 }
110
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 277 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.07 XXH 01/07/2009 16:15:46 PAGE 3
DATA SIZE = 12 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -