📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 06/06/2007 14:25:55 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <absacc.h>
3 #define uint unsigned int
4 #define uchar unsigned char
5 //
6 #define DPSEC 0 //Clock[DPSEC]数组的元素0,存放时钟时间 DPSEC:Second
7 #define DPMIN 1 //Clock[DPMIN]数组的元素1,存放时钟时间 DPMIN:minute
8 #define DPHOUR 2 //Clock[DPHOUR]数组的元素2,存放时钟时间 DPHOUR:hour
9 #define WHMILSEC 0 //Watch[WHMILSEC]数组的元素0,存放秒表时间 WHMILSEC:milliSecond
10 #define WHSEC 1 //Watch[WHSEC]数组的元素1,存放秒表时间 WHSEC:Second
11
12 #define KEYMIN 14 //按键号:分钟加一
13 #define KEYHOUR 13 //按键号:小时加一
14 #define KEYSTARPRESS 11 //按键号:秒表启动/停止
15
16 #define CLOCKMODE 0 //时钟模式
17
18 //定义管脚
19 sbit K0=P1^0; //时钟分钟调整键
20 sbit K1=P1^1; //时钟小时调整键
21 sbit K2=P1^2; //秒表启动停止键
22 sbit K4=P3^2; //时钟/秒表状态切换键
23 sbit BELL=P1^7; //响闹输出端
24 uchar data ClockMode=CLOCKMODE; //时钟/秒表模式标记位-CLOCKMODE:时钟 1:秒表
25 uchar data SwitchClockMode=0; //时钟/秒表状态切换标记-0:没有发生过切换1:发生过切换
26 uchar data DecSec=0; //秒的分频位
27 uchar data Refersh=6; //数码管个数
28 uchar data Clock[3]={0,0,0}; //存放时钟时间(依次是秒,分,时)
29 uchar data Watch[2]={0,0}; //存放秒表时间(依次是百分秒,秒,分)
30 uchar data Buffer[6]={0,0,0,0,0,0}; //显示缓冲区(依次从低位到高位,共6位数码管)
31 uchar code TABLE[]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98,0xbf};
32 //共阳数码管显示"0"-"9","-"
33 /*------声明区--------*/
34 void delay(); //显示延时函数
35 void addTime(uchar mode); //调整时间时加1子函数
36 uchar key(); //按键函数
37 void bell(void); //闹铃函数
38 void clockDisplay( uchar ClockMode ); //显示函数
39
40 void main(void) //主函数体
41 {
42 1 uchar data keyLockFlag=0; //按键延迟锁标记位,1:表示锁定
43 1 uchar data keyLock=0; //
44 1 uchar data keyValue; //键值暂存
45 1 uchar data startWatch=1; //秒表状态
46 1 EA=1;EX0=1;ET0=1;ET1=1;ET2=1; //开总中断源,开外部中断1,开Timer0,Timer1中断
47 1 IT0=1; //下降沿触发
48 1 TMOD=0x11; //T1方式1计数,T0方式1计时
49 1 TH0=0X54;TL0=0; //初始化计数器0初值
50 1 TH1=0X10;TL1=0; //初始化计数器1初值
51 1 TH1=0;TL1=0; //初始化计数器1初值
52 1 TR0=1;TR1=0;TR2=1; //启动定时器
53 1
54 1 while(1) //主循环
55 1 {
C51 COMPILER V7.50 MAIN 06/06/2007 14:25:55 PAGE 2
56 2 //-----------时钟模式------------//
57 2 while( ClockMode == CLOCKMODE ) //如果选择时钟模式
58 2 {
59 3 if( SwitchClockMode == 1 ) //如果时钟/秒表状态切换
60 3 {
61 4 clockDisplay( CLOCKMODE ); //显示
62 4 SwitchClockMode=0; //清除切换标记位
63 4 }
64 3
65 3 keyValue=key();
66 3 switch(keyValue) //按键跳转
67 3 {
68 4 case KEYMIN: //时钟按键分调整程序
69 4 {
70 5 keyLockFlag=1; //按键调节时钟后,时钟不是立刻走时,而是等待2秒钟
71 5 TR0=0; //关闭定时器,时钟停止运行
72 5 addTime(keyValue); //调用调节时钟加1函数
73 5 delay();delay();delay();
74 5 } break;
75 4 case KEYHOUR: //时钟按键小时调整程序
76 4 {
77 5 keyLockFlag=1;
78 5 TR0=0;
79 5 addTime(keyValue); //调用调节时钟加1函数
80 5 delay();delay();delay();
81 5 } break;
82 4 default :break;
83 4 }
84 3 if(keyLockFlag == 1) //按键延迟锁延迟约两秒
85 3 {
86 4 if(++keyLock == 20 )
87 4 {
88 5 keyLockFlag=0;keyLock=0;
89 5 TR0=1; //时钟设置完毕开始运行
90 5 }
91 4 }
92 3 clockDisplay( ClockMode ); //刷新时钟显示
93 3
94 3 }
95 2
96 2 //-----------秒表模式------------//
97 2 while( ClockMode != CLOCKMODE ) //如果选择秒表模式
98 2 {
99 3 if( SwitchClockMode == 1 ) //如果时钟/秒表状态切换
100 3 {
101 4 Buffer[0]=0; //显示'-'
102 4 Buffer[1]=0;
103 4 Buffer[2]=0;
104 4 Buffer[3]=0;
105 4 Buffer[4]=10;
106 4 Buffer[5]=10;
107 4 Watch[WHMILSEC]=0; //
108 4 Watch[WHSEC]=0; //预置秒表值
109 4
110 4 TR1=0;
111 4 SwitchClockMode=0; //清除切换标记位
112 4 }
113 3
114 3 keyValue=key();
115 3 if( keyValue == KEYSTARPRESS ) //如果秒表启动停止按键按下
116 3 {
117 4 if( startWatch == 0 )
C51 COMPILER V7.50 MAIN 06/06/2007 14:25:55 PAGE 3
118 4 {
119 5 TR1=1; //启动定时器
120 5 startWatch=1;
121 5 }
122 4 else
123 4 {
124 5 TR1=0;
125 5 startWatch=0;
126 5 }
127 4 delay();delay();delay();delay();delay();delay();
128 4 }
129 3
130 3 clockDisplay( ClockMode ); //显示
131 3 }
132 2 }
133 1 }
134 void time0(void) interrupt 1 using 2
135 {
136 1 TH0=0X112;
137 1 TL0=0x30; //计时器放入预置时间,大概10毫秒
138 1 DecSec++;
139 1 if(DecSec==16)
140 1 { DecSec=0;
141 2 Clock[DPSEC]++; //秒位加1
142 2 if(Clock[DPSEC]==60) //1分钟到
143 2 {
144 3 Clock[DPSEC]=0; //秒位清0
145 3 Clock[DPMIN]++; //分位加1
146 3 if(Clock[DPMIN]==60) //1小时到
147 3 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -