📄 clock2.lst
字号:
C51 COMPILER V7.02a CLOCK2 12/10/2008 16:20:49 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE CLOCK2
OBJECT MODULE PLACED IN clock2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE clock2.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <AT89X51.h>
2
3 unsigned char tc,sta=0x08; //软件延时单元,状态标志
4 bit flag1=0; //秒标志
5 unsigned char data dispbit,dispbuf[6]; //显示位,显示缓冲区
6 code unsigned char ds=20; //软件延时系数__20
7 unsigned char second,minute,hour; //秒,分,时
8
9 void delay (unsigned int count); //延时函数
10 void display(void); //显示函数
11 void key(void); //键处理函数
12 void sx(void); //送显示函数
13
14 void main(void) //主函数
15 {
16 1
17 1 TMOD=0x01; //定时器初始化
18 1 TH0=0x4C;
19 1 TL0=0x00;
20 1 IE=0x82; //开放定时器0中断
21 1 tc=ds; //软件延时初值
22 1 TR0=1; //启动定时器
23 1 P1=~sta; //初始状态
24 1
25 1 do{
26 2 key(); //键处理
27 2 display(); //显示
28 2 if(flag1==1) //有秒标志
29 2 {
30 3 flag1=0; //秒标志清零
31 3 second++; //秒加一
32 3 if (second==60)
33 3 {
34 4 second=0;
35 4 minute++; //分加一
36 4 if (minute==60)
37 4 {
38 5 hour++; //时加一
39 5 minute=0;
40 5 if (hour==24) hour=0;
41 5 }
42 4 }
43 3 sx(); //送显示
44 3 }
45 2 }while(1);
46 1 }
47
48 void timer0(void) interrupt 1 //定时器0中断服务函数
49 {
50 1 TH0=0x4C; //再送定时初值
51 1 tc--; //软件延时计数
52 1 if (tc==0) //中断20次
53 1 {
54 2 tc=ds; //再设软件延时初值
55 2 flag1=1; //建秒标志
C51 COMPILER V7.02a CLOCK2 12/10/2008 16:20:49 PAGE 2
56 2 }
57 1 }
58
59 void display(void) //显示函数
60 {
61 1 code unsigned char design[32]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,
62 1 0x01,0x09,0xFF,0x00,0x00,0x00,0x00,0x00,
63 1 0x02,0x9E,0x24,0x0C,0x98,0x48,0x40,0x1E,
64 1 0x00,0x08,0x31,0x00,0x00,0x00,0x00,0x00};
65 1 //字型码表
66 1 unsigned char i;
67 1 dispbit=0x01; //字位初值
68 1
69 1 for(i=0;i<6;i++) //扫描6位数码显示器
70 1 {
71 2 P0=design[dispbuf[i]]; //转换字型并输出
72 2 P2=dispbit; //输出字位
73 2 dispbit=dispbit+dispbit; //字位左移
74 2 delay (2); //延时
75 2 }
76 1 }
77
78 void key(void)
79 {
80 1 unsigned char keycode,k1;
81 1 k1=~(P3)&0x30; //读键
82 1 if ( k1 != 0) //有键按下
83 1 {
84 2 delay (20); //延时
85 2 keycode=~(P3)&0x30; //读键码
86 2 do //等待键释放
87 2 {
88 3 k1=~(P3)&0x30;
89 3 }
90 2 while (k1!=0);
91 2
92 2 switch (keycode)
93 2 {
94 3 case 0x10: //P3.4键,转换状态
95 3 {
96 4 sta=sta+sta;
97 4 if(sta==0x10) sta=0x01;
98 4 P1=~sta;
99 4 if(sta==0x08) IE=0x82; //开中断
100 4 else IE=0x00; //关中断
101 4 };
102 3 break;
103 3 case 0x20: //P3.5键,校时
104 3 {
105 4 switch (sta)
106 4 {
107 5 case 0x01:
108 5 {
109 6 second++;
110 6 if(second==60) second=0;
111 6 };
112 5 break;
113 5 case 0x02:
114 5 {
115 6 minute++;
116 6 if(minute==60) minute=0;
117 6 };
C51 COMPILER V7.02a CLOCK2 12/10/2008 16:20:49 PAGE 3
118 5 break;
119 5 case 0x04:
120 5 {
121 6 hour++;
122 6 if(hour==24) hour=0;
123 6 };
124 5 }
125 4 };
126 3 }
127 2 sx(); //送显示
128 2 }
129 1 }
130
131 void delay (unsigned int count)//延时函数
132 {
133 1 unsigned int i,j;
134 1 for (i=0;i<count;i++)
135 1 for (j=0;j<120;j++);
136 1 }
137
138 void sx (void) //送显示函数
139 {
140 1 dispbuf[5]=second%10; //秒个位
141 1 dispbuf[4]=second/10; //秒十位
142 1 dispbuf[3]=minute%10; //分个位
143 1 dispbuf[2]=minute/10; //分十位
144 1 dispbuf[1]=hour%10; //时个位
145 1 dispbuf[0]=hour/10; //时十位
146 1 }
147
148
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 351 ----
CONSTANT SIZE = 33 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 2
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 + -