📄 可加减计数时钟.lst
字号:
C51 COMPILER V7.10 可加减计数时钟 05/16/2008 06:28:19 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE 可加减计数时钟
OBJECT MODULE PLACED IN .\可加减计数时钟.obj
COMPILER INVOKED BY: F:\KeilC安装软件\安装\C51\BIN\C51.EXE F:\c语言练习\可加减计数时钟.c BROWSE DEBUG OBJECTEXTEND PRINT
-(.\可加减计数时钟.lst) OBJECT(.\可加减计数时钟.obj)
line level source
1 #include"reg51.h"
2 #define uchar unsigned char
3 #define uint unsigned int
4 #define Hidden 0x10
5 uchar code disptab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb}; //显示器位
6 uchar code zcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //共阴极0~9
7 0x77,0x83,0xc6,0xa1,0x86,0x84,0x00}; //字码列表
8 uchar buf[6]; //显示器及字码缓冲
9 uchar setseccount; //预置值
10 uchar seccount; //秒数值
11 uchar code th0=63266/256;
12 uchar code tl0=63266%256;
13 bit ks; //开始
14 bit jiajian; //加减计数
15 void delay(uchar del)
16 {
17 1 uchar i;
18 1 for(;del>0;del--)
19 1 for(i=0;i<125;i++)
20 1 {;}
21 1 }
22 void ajcl(uchar jz) //按键处理
23 {
24 1 if((jz&0x10)==0)
25 1 ks=1; //开始
26 1 if((jz&0x04)==0) jiajian=1; // 计数加
27 1 if((jz&0x08)==0) jiajian=0; //计数减
28 1 if((jz&0x40)==0) //十位加一
29 1 {
30 2 ks=0;
31 2 buf[4]++;
32 2 if(buf[4]>=6) buf[4]=0;
33 2 setseccount=buf[4]*10+buf[5];
34 2 seccount=setseccount;
35 2 }
36 1 if((jz&0x80)==0) //个位减一
37 1 {
38 2 ks=0;
39 2 buf[5]++;
40 2 if(buf[5]>=10) buf[5]=0;
41 2 setseccount=buf[4]*10+buf[5];
42 2 seccount=setseccount;
43 2 }
44 1 if((jz&0x20)==0) ks=0; //停止
45 1 }
46 uchar aj() //按键函数
47 { uchar jz;
48 1 uchar t;
49 1 P3|=0xfc;
50 1 jz=P3;
51 1 jz|=0x03;
52 1 if((jz|=0x03)==0xff) return(0);
53 1 delay(10);
54 1 jz=P3;
C51 COMPILER V7.10 可加减计数时钟 05/16/2008 06:28:19 PAGE 2
55 1 if((jz|=0x03)==0xff) return(0);
56 1 else
57 1 for(;;)
58 1 {
59 2 t=P3;
60 2 if((t|=0x03)==0xff)
61 2 break;
62 2 }
63 1 return(jz);
64 1 }
65 void timer0() interrupt 1
66 {
67 1 static uchar count=0; // 位计数
68 1 static uint counter=0; //秒计数 这里的 数据类型匹配
69 1 uint mz=400; //一秒计数值
70 1 uchar t; //中间变量
71 1 TH0=th0;
72 1 TL0=tl0;
73 1 t=disptab[count];
74 1 P2|=0xfc;
75 1 P2&=t;
76 1 t=buf[count];
77 1 t=zcodetab[t];
78 1 P0=t;
79 1 count++;
80 1 if(count>=6) count=0;
81 1 counter++;
82 1 if(counter>=mz)
83 1 {
84 2 counter=0;
85 2 if(ks) //这里是 预置值的关键 只有ks=1 秒计数 才开始动作
86 2 {
87 3 if(!jiajian)
88 3 if((seccount--)==0) seccount=setseccount;
89 3 if(jiajian)
90 3 if((seccount++)>=59) seccount=setseccount;
91 3
92 3 }
93 2 }
94 1 }
95 void main()
96 { uchar i,jz;
97 1 TMOD=0x01;
98 1 TH0=th0;
99 1 TL0=tl0;
100 1 EA=1;
101 1 ET0=1;
102 1 TR0=1;
103 1 for(i=0;i<5;i++) //前4位消隐 和初始第四位消隐
104 1 buf[i]=Hidden;
105 1 buf[4]=seccount/10;
106 1 buf[5]=seccount%10;
107 1 for(;;)
108 1 {
109 2 jz=aj();
110 2 if(jz)
111 2 ajcl(jz);
112 2 buf[4]=seccount/10;
113 2 buf[5]=seccount%10;
114 2 }
115 1 }
116
C51 COMPILER V7.10 可加减计数时钟 05/16/2008 06:28:19 PAGE 3
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 366 ----
CONSTANT SIZE = 25 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -