📄 timer05.lst
字号:
C51 COMPILER V8.05a TIMER05 02/08/2009 08:16:07 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE TIMER05
OBJECT MODULE PLACED IN timer05.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE timer05.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /*
3 * Copyright (c) 2005, Owen Studio
4 * All rights reserved.
5 *
6 * 文件名称:MyBoard.c
7 * 当前版本:Version 1.0
8 *
9 * 本程序为通过调试的源程序
10 *
11 * 功能描述:上电后系统等待用户输入登陆密码,用户可查询储存在24C02中的登陆密码(A键),也可修改登陆密码(B键),
12 * 当输入登陆密码后按D键,如果密码正确则进入系统。进入系统后6个数码管开始计时,同时循环播放4首音乐,发光二
13 * 极管也按预定流水灯程序循环闪动。此时按1-9键则播放第1-9首音乐。按0键则停止播放。按D键开始/停止音乐自动播
14 * 放。按*键开始/停止流水灯自动演示。按#键切换流水灯方案臘键则跳到下一首音乐,按A键、B键、C键则分别对时、分
15 * 、秒进行调节。
16 * 另外本程序集成了与PC通信的串口服务程序,所有按键的功能也可以通过PC机的控制软件实现。状态也可以反馈到此
17 * 控制软件上。
18 *
19 * 资源配置:Timer0用于为系统提供时基;Timer1用于音乐播放;Timer2用于串口波特率发生器。
20 * 3个中断源,其中两个为Timer0和Timer1中断,另一个为串口中断,主要完成与PC机的通信。
21 */
22 /*************************************************************************/
23 //////////////////////////Beginning of Program/////////////////////////////
24 /*************************************************************************/
25 #include <reg52.h>
26 #include <intrins.h>
27
28 #define uchar unsigned char
29 #define uint unsigned int
30
31
32 #define SCAN_CYCLE 500
33 sbit P3_3=P3^3;
34 sbit P3_7=P3^7;
35 static const char c_keyCode[16]={0x01,0x02,0x03,0x0a, /*键盘1,2,3,A*/
36 0x04,0x05,0x06,0x0b, /*键盘4,5,6,B*/
37 0x07,0x08,0x09,0x0c, /*键盘7,8,9,C*/
38 0x0e,0x00,0x0f,0x0d}; /*键盘*,0,#,D*/
39 /*************************************************************************/
40 /*System Variables*/
41
42 uchar hour=10;min=0;sec=0;
43 uchar DisplayArray[6];
44
45
46 uchar Int0Flag,TH0Global,TL0Global;
47 uchar modifyTimeFlag=0;
48 /*System Variables Over*/
49 /*************************************************************************/
50 /*System Functions*/
51
52 void MainSystem(void); /*系统主程序*/
53 void ScrShift(uchar keyIndex); /*六位数码管顺序左移*/
54 void Delay (uint value); /*10us延时*/
55 void ModifyTime(void); /*调整时间*/
C51 COMPILER V8.05a TIMER05 02/08/2009 08:16:07 PAGE 2
56 void ScanSeg7(); /*数码管扫描显示*/
57 /*System Functions Over*/
58 /*************************************************************************/
59 /*************************************************************************/
60 /*************************************************************************/
61 void main(void) /*主程序入口*/
62 {
63 1 TMOD=0x11; /*Timer0工作在案MODE1,16位定时器,Timer1工作在MODE2,自动重新装载模式*/
64 1 /*| 定时器1 | 定时器1 |*/
65 1 /*| GATE|C/T| M1 | M0 | GATE|C/T| M1 | M0 |*/
66 1 TH0=(65536-SCAN_CYCLE)/256; /*设定Timer0每隔SCAN_CYCLEu中断一次*/
67 1 TL0=(65536-SCAN_CYCLE)%256;
68 1 TR0=1; /*启动TEMER0*/
69 1
70 1 IE=0x9a; /*使能总中断、Timer0,1中断、外部中断1,2*/
71 1 /*| EA| - | ET2| ES | ET1| EX1| ET0| EX0|*/
72 1 IP=0x12; /*优先Timer0中断*/
73 1 /*| - | - | PT2| PS | PT1| PX1| PT0| PX0|*/
74 1
75 1 P3_3=1; /*关喇叭*/
76 1 P2=0x00; /*点亮8个发光二极管*/
77 1
78 1 }
79 /*************************************************************************/
80
81 /*************************************************************************/
82 void MainSystem(void) /*系统主程序*/
83 {
84 1
85 1
86 1
87 1 if(modifyTimeFlag==1)
88 1 {
89 2 ModifyTime(); /*根据新秒值调整时间*/
90 2 modifyTimeFlag=0;
91 2 }
92 1 }
93 /*************************************************************************/
94
95 /*************************************************************************/
96
97 /*************************************************************************/
98 /*************************************************************************/
99
100 /*************************************************************************/
101 void ScrShift(uchar keyIndex) /*六位数码管顺序左移*/
102 {
103 1 uchar i;
104 1 for(i=5;i>0;i--)
105 1 {
106 2 DisplayArray[i]=DisplayArray[i-1];
107 2 }
108 1 DisplayArray[0]=c_keyCode[0x0d];
109 1 }
*** WARNING C280 IN LINE 101 OF TIMER05.C: 'keyIndex': unreferenced local variable
110 /*************************************************************************/
111 /*************************************************************************/
112
113 /*************************************************************************/
114
115 /*************************************************************************/
116
C51 COMPILER V8.05a TIMER05 02/08/2009 08:16:07 PAGE 3
117 /*************************************************************************/
118 void Delay (unsigned int value) /*10us延时*/
119 {
120 1 while (value!=0)
121 1 {
122 2 value--;
123 2 }
124 1 }
125 /*************************************************************************/
126 void ModifyTime(void) /*调整时间*/
127 {
128 1 uchar ucharTemp;
129 1 ucharTemp=sec;
130 1 sec%=60; /*秒除60取余数为sec*/
131 1 min+=ucharTemp/60; /*分加上秒的进位先暂存于min*/
132 1 ucharTemp=min;
133 1 min%=60; /*分再除60取余数为min*/
134 1 hour=(hour+ucharTemp/60)%24; /*时加上分的进位除24取余数为hour时*/
135 1 DisplayArray[0]=(sec%10); /*将时间存入显示缓冲区*/
136 1 DisplayArray[1]=(sec/10);
137 1 DisplayArray[2]=(min%10);
138 1 DisplayArray[3]=(min/10);
139 1 DisplayArray[4]=(hour%10);
140 1 DisplayArray[5]=(hour/10);
141 1 }
142 /*************************************************************************/
143 void ScanSeg7() /*数码管扫描显示*/
144 {
145 1 static uchar s_scanCounter;
146 1 s_scanCounter++;
147 1 if(s_scanCounter>5) s_scanCounter=0; /*ptr1>5表示6个数码管都已经扫描过*/
148 1 P0=s_scanCounter|(DisplayArray[s_scanCounter]<<4);
149 1 }
150 /*************************************************************************/
151
152 /*************************************************************************/
153
154 /*************************************************************************/
155
156 /*************************************************************************/
157
158 /*************************************************************************/
159
160 /*************************************************************************/
161
162 /*************************************************************************/
163
164 /*************************************************************************/
165
166 /*************************************************************************/
167 void Timer0Int() interrupt 1 using 2 /*每隔SCAN_CYCLEus中断扫描一次数码管*/
168 {
169 1 TH0=(65536-SCAN_CYCLE)/256; /*设定Timer0每隔SCAN_CYCLEu中断一次*/
170 1 TL0=(65536-SCAN_CYCLE)%256;
171 1
172 1 ScanSeg7();
173 1 ScrShift();
*** WARNING C209 IN LINE 173 OF TIMER05.C: '_ScrShift': too few actual parameters
174 1
175 1 }
176 /*************************************************************************/
177
C51 COMPILER V8.05a TIMER05 02/08/2009 08:16:07 PAGE 4
178 /*************************************************************************/
179 /////////////////////////////End of Program////////////////////////////////
180 /*************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 250 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 32 1
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -