shi_zhong.lst
来自「Keil C51单片机基础实验源程序」· LST 代码 · 共 153 行
LST
153 行
C51 COMPILER V7.06 SHI_ZHONG 11/06/2006 09:32:59 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SHI_ZHONG
OBJECT MODULE PLACED IN shi_zhong.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE shi_zhong.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //**************************************************
2
3 //程序功能:时钟,前两位显示分钟,后两位显示秒
4 //P1.7按键功能,开始计时
5 //P1.6按键功能,停止计时
6 //P1.5按键功能,清零,重新开始
7
8 //*************************************************
9
10
11 #include<AT89X52.h>
12
13 code unsigned char seg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
14 0x82,0xf8,0x80,0x90,0xff}; //共阳数码管段码
15
16 unsigned int cnt=0; //由于底下的cnt用到了4000,所以这时不能定义成char类型(最大才255)
17 unsigned char sec=0;
18 unsigned char min=0;
19 unsigned char hour=0;
20
21
22 void delay1ms()
23 {
24 1 unsigned char i;
25 1 for(i=124;i>0;i--); //延时124*8+10=1002us
26 1 }
27
28 delay10ms() //延时10ms
29 {
30 1 unsigned i,j;
31 1 for(i=0;i<50;i++)
32 1 for(j=0;j<100;j++);
33 1 }
34
35
36 void KEY(void) //按键判断子程序
37 {
38 1 if(P1_7==0) //P1.7按键功能,开始计时
39 1 {
40 2 delay10ms(); //软件去抖动
41 2 if(P1_7==0)
42 2 {
43 3 TH0=0x19; //11.0529MHZ的晶振,250us的定时中断
44 3 TL0=0x19;
45 3 TR0=1;
46 3 }
47 2 }
48 1
49 1 else if(P1_6==0) //P1.6按键功能,停止计时
50 1 {
51 2 delay10ms();
52 2 if(P1_6==0)
53 2 { TR0=0;}
54 2 }
55 1
C51 COMPILER V7.06 SHI_ZHONG 11/06/2006 09:32:59 PAGE 2
56 1 else if(P1_5==0) //P1.5按键功能,清零,重新开始
57 1 {
58 2 delay10ms();
59 2 if(P1_5==0)
60 2 {sec=0;}
61 2 }
62 1
63 1 }
64
65
66 void LED_display() //显示
67 {
68 1 P1=0xfe; //P1.0=0,选通第一位
69 1 P2=seg7code[min/10]; //显示小时的第一位
70 1 delay1ms();
71 1 P2=0xff; //消隐
72 1
73 1 P1=0xfd; //P1.1=0,选通第二位
74 1 P2=seg7code[min%10]; //显示小时的第一位
75 1 delay1ms();
76 1 P2=0xff; //消隐
77 1
78 1 P1=0xfb; //P1.2=0,选通第三位
79 1 P2=seg7code[sec/10]; //显示分的第一位
80 1 delay1ms();
81 1 P2=0xff; //消隐
82 1
83 1 P1=0xf7; //P1.3=0,选通第四位
84 1 P2=seg7code[sec%10]; //显示分的第二位
85 1 delay1ms();
86 1 P2=0xff; //消隐
87 1 }
88
89
90 void timer0 (void) interrupt 1 using 0
91 {
92 1 cnt++; //每过250us,cnt加一
93 1 if(cnt==4000) //250*4000=1s
94 1 {
95 2 cnt=0;
96 2 sec++;
97 2 if(sec==60) //60秒,重新计数,分钟加一
98 2 { sec=0;
99 3 min++;
100 3 if(min==60) //60分,重新计数,小时加一
101 3 {
102 4 min=0;
103 4 hour++;
104 4 if(hour==12) //12个小时,重新计数
105 4 {hour=0;}
106 4 }
107 3
108 3 }
109 2 }
110 1 }
111
112
113 main()
114 {
115 1 TMOD=0x02; //T0,方式2
116 1
117 1 EA=1; //开总中断
C51 COMPILER V7.06 SHI_ZHONG 11/06/2006 09:32:59 PAGE 3
118 1 ET0=1; //开定时器T0中断
119 1
120 1 while(1)
121 1 {
122 2 KEY();
123 2 LED_display();
124 2 }
125 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 224 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?