📄 da1302.lst
字号:
C51 COMPILER V8.08 DA1302 09/16/2008 21:50:25 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE DA1302
OBJECT MODULE PLACED IN da1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE da1302.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*============================================================
2 使用1602液晶显示DS1302+c51时钟
3 [注:AT89C51使用12M晶振]
4 =============================================================*/
5
6 #include <AT89x51.h>
7 #include <string.h>
8
9 #define LCM_RW P3_1 //定义引脚
10 #define LCM_RS P3_0
11 #define LCM_E P3_2
12 #define LCM_Data P0
13 #define Busy 0x80 //用于检测LCM状态字中的Busy标识
14 #define uchar unsigned char
15
16 sbit T_CLK=P2^4;
17 sbit T_IO =P2^5;
18 sbit T_RST=P2^6;
19 sbit ACC0=ACC^0;
20 sbit ACC7=ACC^7;
21 sbit LED=P2^0; //背光灯输出 (因本实验板无此功能 所以此项功能无效)
22 sbit system=P1^1; //模式
23 sbit TimerUp=P1^2; //时间加
24 sbit TimerDown=P1^0; //时间减
25 sbit Speaker=P2^1; //蜂鸣器
26
27
28 void Set(uchar,uchar); //根据选择调整相应项目
29 void RTInputByte(uchar); //输入 1Byte */
30 uchar RTOutputByte(void); //输出 1Byte */
31 void W1302(uchar, uchar); //向DS1302写入一个字节
32 uchar R1302(uchar); //从DS1302读出一个字节
33 void Set1302(uchar * ); //设置时间
34 void KeySound(); //按键音
35 void ClockSound(); //闹铃蜂鸣声
36
37
38 uchar id,msec,model,LedTime,d;
39 bit a,b; //闪烁标志位
40
41
42 uchar inittime[7]={0x00,0x10,0x19,0x29,0x03,0x04,0x06}; //初始化后设置为:06年3月29日星期3 19点10分0秒
43 void Out_LCM(void); //显示屏幕
44 void model0(void); //显示输出
45 void model1(void);
46 void model2(void);
47 void model3(void);
48 void model4(void);
49 void model5(void);
50 void model6(void);
51
52
53 void id_case1_key(); //项目调整
54 void Modset(); //模式键处理
55
C51 COMPILER V8.08 DA1302 09/16/2008 21:50:25 PAGE 2
56 void WriteDataLCM(uchar WDLCM);
57 void WriteCommandLCM(uchar WCLCM,BuysC);
58 uchar ReadStatusLCM(void);
59 void LCMInit(void);
60 void OutputInformation(uchar X, uchar Y, uchar DData);
61 void DisplayListChar(uchar X, uchar Y, uchar code *DData);
62
63 void Delay5Ms(void);
64 void Delay400Ms(void);
65 void systemsetup(void); //进入系统设置
66
67 uchar code systemp[]={"System.setup"}; //字符串输出(系统设定)
68 uchar code TIMER[]={"Time"}; //字符串输出(时间)
69 uchar code DATE[]={"Date"}; //字符串输出(日期)
70 uchar code alarmclock[]={"Clock"}; //字符串输出(闹铃)
71 uchar code lamp[]={"Lamp"}; //字符串输出(背光灯)
72 uchar code reset[]={"Reset"}; //字符串输出(时间归零)
73 uchar code exit[]={"Exit"}; //字符串输出(退出)
74 uchar code set[]={"Set"}; //字符串输出(设置)
75 uchar code sec[]={"sec"}; //字符串输出(秒)
76 uchar code ClockSet[]={"ClockSet"}; //字符串输出(闹铃设置)
77 uchar code ClockOn[]={"ON"}; //字符串输出(ON)
78 uchar code ClockOff[]={"OFF"}; //字符串输出(OFF)
79
80 void timesetup(void); //时间设置
81 void datesetup(void); //日期设置
82 void alarmclockset(void); //闹铃设置
83 void lampsetup(void); //背光灯设置
84 void timereset(void); //时间清零
85
86 void main(void)
87 {
88 1 Speaker=1; //关闭蜂鸣器
89 1 LED=0; //打开LED ,低电平有效,外接9012驱动
90 1 Delay400Ms(); //启动等待,等LCM讲入工作状态
91 1 Delay400Ms();
92 1 LCMInit(); //LCM初始化
93 1 TMOD=0x01; //16位定时
94 1 TH0=0x3c; //50ms
95 1 TL0=0xb0;
96 1 EA=1;
97 1 TR0=1;
98 1 ET0=1;
99 1
100 1 while(1)
101 1 {
102 2 if(TimerDown==0) //左移键按下后把背光灯打开
103 2 {Delay5Ms();
104 3 if(TimerDown==0)
105 3 {KeySound(); //蜂鸣声
106 4 LED=0; //打开背光灯
107 4 LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16;} //取出背光灯时间并转换为十进制数
108 3 }
109 2 b=1; //模式键是否动作标志。为1时不动作,为0时动作。
110 2 Modset(); //调用模式键处理程序判断按键是否按下。
111 2 if(b==0)
112 2 {
113 3 KeySound(); //蜂鸣声
114 3 LED=0; //打开背光灯
115 3 systemsetup(); //进入系统设置模式
116 3 LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16; //取出背光灯时间并转换为十进制数
117 3 }
C51 COMPILER V8.08 DA1302 09/16/2008 21:50:25 PAGE 3
118 2 if((LED==0)&&LedTime==0) //延时间是否到
119 2 LED=1; //关闭背光灯
120 2 if(R1302(0xc3)==1) //闹铃是否打开,0xc3为读闹铃寄存器地址。
121 2 {if((R1302(0x85)==R1302(0xc5))&&(R1302(0x83)==R1302(0xc7))) //判断闹铃时间是否到,
122 3 ClockSound(); //发出闹铃蜂鸣声,无按键动作蜂鸣一分钟。
123 3 }
124 2 model0(); //输出显示屏幕
125 2 }
126 1 }
127
128 void KeySound() //按键音
129 {
130 1 Speaker=0; //开蜂鸣声
131 1 Delay5Ms();
132 1 Speaker=1; //关蜂鸣声
133 1 }
134 void ClockSound() //闹铃蜂鸣声
135 {
136 1 if(a==0)
137 1 {
138 2 Speaker=0; //开蜂鸣声
139 2 Delay5Ms();
140 2 Delay5Ms();
141 2 Delay5Ms();
142 2 Speaker=1; //关蜂鸣声
143 2 }
144 1 }
145
146 void Modset() //模式键处理
147 { if(system==0)
148 1 {
149 2 Delay5Ms();
150 2 if(system==0)
151 2 {while(system==0);
152 3 KeySound(); //蜂鸣声
153 3 a=0;msec=0;b=0; //a、msec为闪烁标志,按键有动作时清零,不闪烁。
154 3 } //b为模式键确认动作。其它程判断b是否为零时来确定模式键是否动作。
155 2 }
156 1 }
157
158 void systemsetup(void) //系统设置
159 {
160 1 model=1;
161 1 while(model!=0)
162 1 {
163 2 Out_LCM();
164 2 if (TimerUp==0) //设置项目左移
165 2 {Delay5Ms();
166 3 if(TimerUp==0)
167 3 {a=0;msec=0;KeySound();//蜂鸣声
168 4 if(model--==1) //6种系统设置项目
169 4 model=6;
170 4 }
171 3 while(TimerUp==0);
172 3 }
173 2 if (TimerDown==0) //设置项目右移
174 2 {
175 3 Delay5Ms();
176 3 if(TimerDown==0)
177 3 {a=0;msec=0;KeySound();//蜂鸣声
178 4 if(model++==6)
179 4 model=1;
C51 COMPILER V8.08 DA1302 09/16/2008 21:50:25 PAGE 4
180 4 }
181 3 while(TimerDown==0);
182 3 }
183 2 b=1; //模式键是否动作标志。为1时不动作,为0时动作。
184 2 Modset(); //调用模式键处理程序判断按键是否按下。
185 2 if(b==0)
186 2 {KeySound(); //蜂鸣声
187 3 switch(model) //进入进个项目设置
188 3 {
189 4 case 1:
190 4 timesetup(); break; //时间设置
191 4 case 2:
192 4 datesetup();break; //日期设置
193 4 case 3:
194 4 alarmclockset();break;//闹铃设置
195 4 case 4:
196 4 lampsetup();break; //背光灯设置
197 4 case 5:
198 4 timereset();break; //时间清零
199 4 case 6:
200 4 model=0;break; //退出系统设置
201 4 }
202 3 }
203 2 }
204 1 }
205
206
207 void timesetup() //时间调整
208 {
209 1 id=6;
210 1 while(model==1) //model为1时进入时间调整
211 1 {
212 2 b=1;
213 2 Modset();
214 2 if(b==0)
215 2 {KeySound(); //蜂鸣声
216 3 if(id++==9) //6..9为时分秒调。 .
217 3 id=6;
218 3 }
219 2 id_case1_key(); //调用按键处理
220 2 Out_LCM(); //显示输出
221 2 }
222 1 }
223 void datesetup() //对日期进行调整
224 {
225 1 id=1;
226 1 while(model==2) //model为2时进入日期调整
227 1 {b=1;
228 2 Modset(); //模式键是否动作
229 2 if(b==0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -