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