📄 text1.lst
字号:
C51 COMPILER V7.50 TEXT1 09/09/2008 14:54:33 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Text1.c DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2
3
4 #define SET 0x20
5 #define LEFT 0x10
6 #define RIGHT 0x08
7 #define UP 0x04
8 #define DOWN 0x02
9 #define OK 0x01
10 #define DoubleSET 0x20 //键值
11
12
13 unsigned char sec,min,hour;
14 unsigned char code table[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86
-,0x8E};//数码管显示0~15所需码
15
16
17 sbit Ring=P2^4;//控制声音control ring
18 sbit DAT = P2^7;
19 sbit PL = P2^6;
20 sbit CLK = P2^5;
21 sbit P23=P2^3;
22
23 unsigned char pLED; //点灯用
24 unsigned char DispBuf[6]; //数据缓存器
25 unsigned char count;
26 bit xTim,xKey,Alarm; //走时,扫描按键,闹钟的标志位
27 unsigned char KeyVal; //扫描到的键值
28
29
30
31 unsigned char EditSec,EditMin,EditHour;//设定的时间
32 unsigned char AlarmSec,AlarmMin,AlarmHour;//设定的闹钟时间
33 unsigned char SetedAlarmSec,SetedAlarmMin,SetedAlarmHour;//已设定的闹钟时间
34 unsigned char CurKey,LastKey;//当前键值与上一次的键值
35 unsigned char KeySts,SetState;//判断与切换状态所用变量
36 unsigned char KeyPressed;//判断的键值
37 unsigned char p;//控制整点报时铃响时间的变量
38
39
40
41
42
43
44
45
46
47 void TimUpdate(void)
-//走时功能模块
48 {
49 1 //主函数中使用,作为整点报时声音停止的标志位
50 1
51 1 if(++sec==60)
52 1 {
53 2 sec = 0;
C51 COMPILER V7.50 TEXT1 09/09/2008 14:54:33 PAGE 2
54 2 if(++min==60)
55 2 {
56 3 min = 0;
57 3 if(++hour == 24) hour = 0;
58 3 }
59 2 }
60 1 }
61
62
63
64
65
66
67
68
69
70
71
72
73 void DisplayTim() //将当前时间存入数据缓存器
74 {
75 1 DispBuf[0] = table[sec % 10];
76 1 DispBuf[1] = table[sec / 10];
77 1 DispBuf[2] = table[min % 10];
78 1 DispBuf[3] = table[min / 10];
79 1 DispBuf[4] = table[hour % 10];
80 1 DispBuf[5] = table[hour / 10];
81 1 }
82
83
84
85
86
87
88
89
90
91 void InitT0(void) //开启中断
92 {
93 1 pLED = 0;
94 1 xTim = 0;
95 1 count = 0;
96 1 TMOD = (TMOD & 0xF0) |0x01;
97 1 TH0 = 0xF1; // 1/240 s
98 1 TL0 = 0x00;
99 1 TR0 = 1;
100 1 ET0 = 1;
101 1 EA = 1;
102 1 }
103
104
105
106
107
108
109
110
111
112 void T0Srv(void) interrupt 1 using 1
- //中断服务程序
113 {
114 1 unsigned char i;
C51 COMPILER V7.50 TEXT1 09/09/2008 14:54:33 PAGE 3
115 1 TH0 = 0xF1; // 1/240 s
116 1 P2 =(P2&0xF8)| pLED; //控制数码管
117 1 P0 = DispBuf[pLED]; //将数据赋给P0口显示
118 1 if(++pLED==6) pLED = 0; //循环点亮六位数码管
119 1 count++; //计数
120 1 if((count&0x03)==0) // 每4次中断16ms读一次按键
121 1 {
122 2 CLK = 0;
123 2 PL = 0; // Latch Key 锁存器打开
124 2 PL = 1;
125 2 KeyVal = 0;
126 2 for(i=0;i<8;i++)
127 2 {
128 3 KeyVal <<= 1;
129 3 if(!DAT) KeyVal |= 0x01; // 低电平检测
130 3 CLK = 1;
131 3 CLK = 0;
132 3 }
133 2 KeyVal &= 0x3F;
134 2 xKey = 1; // 发信号,表示读了一次按键
135 2 }
136 1 if(count==240) // 每240次中断发秒更新标志
137 1 {
138 2 count = 0;
139 2 xTim = 1;
140 2 Ring=1;
141 2 }
142 1 }
143
144
145
146
147
148
149
150
151
152
153 void DisplayEdit() //设定时间时的显示函数
154 {
155 1 DispBuf[0] = table[EditSec % 10];
156 1 DispBuf[1] = table[EditSec / 10];
157 1 DispBuf[2] = table[EditMin % 10];
158 1 DispBuf[3] = table[EditMin / 10];
159 1 DispBuf[4] = table[EditHour % 10];
160 1 DispBuf[5] = table[EditHour / 10];
161 1 DispBuf[5-KeySts] &= 0x7F;
162 1 } // 编辑期间的显示
163
164
165
166
167 void DisplayAlarm() //设定闹钟时的显示函数
168 {
169 1 DispBuf[0] = table[AlarmSec % 10];
170 1 DispBuf[1] = table[AlarmSec / 10];
171 1 DispBuf[2] = table[AlarmMin % 10];
172 1 DispBuf[3] = table[AlarmMin / 10];
173 1 DispBuf[4] = table[AlarmHour % 10];
174 1 DispBuf[5] = table[AlarmHour / 10];
175 1 DispBuf[5-KeySts] &= 0x7F;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -