📄 ds1302+led-c51.lst
字号:
C51 COMPILER V7.50 DS1302_LED_C51 12/16/2007 13:49:27 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DS1302_LED_C51
OBJECT MODULE PLACED IN DS1302+LED-C51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1302+LED-C51.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************
2 /* *
3 /* AOKE210E单片机开发系统演示程序 *
4 /* *
5 /* 版本: V2.0 (2007/11/20) *
6 /* 作者: 高山流水 (Email: aoke999@sohu.com) *
7 /* 网站: www.aokemcu.cn(奥科电子) *
8 /* *
9 /* *
10 /******************************************************************/
11 #include<reg51.h>
12 #include<intrins.h>
13
14 #define uchar unsigned char
15 #define uint unsigned int
16
17 sbit K1 = P3^4;
18 sbit K2 = P3^5;
19 sbit K3 = P3^6;
20 sbit K4 = P3^7;
21
22 sbit reset = P1^2;
23 sbit sclk = P1^0;
24 sbit io = P1^1;
25
26 sbit BEEP = P1^6;
27
28 sbit dula=P2^2;
29 sbit wela=P2^3;
30
31 bit flag=1,hour=0,min=0,sec=0;
32 bit year=0,month=0,day=0,week=0;
33 bit alarm_flag=0;
34 uchar timecount=0,count=0;
35
36 uchar str1[]=" - - Week: ";
37 uchar str2[]="Time: ";
38 uchar str3[]="Alarm: ";
39
40 uchar init [] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //
41 uchar init1[] ={0x00,0x00};
42 uchar init2[] ={0x00,0x00,0x00,0x26,0x11,0x01,0x07}; //
43 //秒, 分, 时, 日, 月,星期,年
44 uchar bj_time[] ={0x00,0x00,0x00};
45 //秒, 分, 时
46 uchar code mytab[8] = {0x01,0x1b,0x1d,0x19,0x1d,0x1b,0x01,0x00};//小喇叭
47
48 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码
49 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
50
51 /******************************************************************/
52
53 /******************************************************************/
54 void delay1(int ms)
55 {
C51 COMPILER V7.50 DS1302_LED_C51 12/16/2007 13:49:27 PAGE 2
56 1 unsigned char y;
57 1 while(ms--)
58 1 {
59 2 for(y = 0; y<250; y++)
60 2 {
61 3 _nop_();
62 3 _nop_();
63 3 _nop_();
64 3 _nop_();
65 3 }
66 2 }
67 1 }
68
69
70 /*********************************************************/
71 //
72 /*********************************************************/
73 void delay()
74 {
75 1 uchar j;
76 1 for(j=250;j>0;j--);
77 1 }
78
79
80 /**********************************************************/
81 //
82 /**********************************************************/
83 void write_byte(uchar inbyte)
84 {
85 1 uchar i;
86 1 for(i=0;i<8;i++)
87 1 {
88 2 sclk=0; //写的时候低电平改变数据
89 2 if(inbyte&0x01)
90 2 io=1;
91 2 else
92 2 io=0;
93 2 sclk=1; //写的时候高电平,把数据写入ds1302
94 2 _nop_();
95 2 inbyte=inbyte>>1;
96 2 }
97 1 }
98
99 /**********************************************************/
100
101 /**********************************************************/
102 uchar read_byte() //sclk的下跳沿读数据
103 {
104 1 uchar i,temp=0;
105 1 io=1; //设置为输入口
106 1 for(i=0;i<7;i++)
107 1 {
108 2 sclk=0;
109 2 if(io==1)
110 2 temp=temp|0x80;
111 2 else
112 2 temp=temp&0x7f;
113 2 sclk=1; //产生下跳沿
114 2
115 2 temp=temp>>1;
116 2 }
117 1 return (temp);
C51 COMPILER V7.50 DS1302_LED_C51 12/16/2007 13:49:27 PAGE 3
118 1 }
119
120 /**********************************************************/
121 // 往ds1302的某个地址写入数据
122 /**********************************************************/
123 void write_ds1302(uchar cmd,uchar indata)
124 {
125 1 sclk=0;
126 1 reset=1;
127 1 write_byte(cmd);
128 1 write_byte(indata);
129 1
130 1 sclk=0;
131 1 reset=0;
132 1 }
133
134 /**********************************************************/
135 // 读ds1302某地址的的数据
136 /**********************************************************/
137 uchar read_ds1302(uchar addr)
138 {
139 1 uchar backdata;
140 1 sclk=0;
141 1 reset=1;
142 1
143 1 write_byte(addr); //先写地址
144 1 backdata=read_byte(); //然后读数据
145 1
146 1 sclk=0;
147 1 reset=0;
148 1 return (backdata);
149 1 }
150
151 /**********************************************************/
152 // 设置初始时间
153 /**********************************************************/
154 void set_ds1302(uchar addr,uchar *p,uchar n) //写入n个数据
155 {
156 1 write_ds1302(0x8e,0x00); //写控制字,允许写操作
157 1 for(;n>0;n--)
158 1 {
159 2 write_ds1302(addr,*p);
160 2 p++;
161 2 addr=addr+2;
162 2 }
163 1 write_ds1302(0x8e,0x80); //写保护,不允许写
164 1 }
165
166 /**********************************************************/
167 // 读取当前时间
168 /**********************************************************/
169 void read_nowtime(uchar addr,uchar *p,uchar n)
170 {
171 1 for(;n>0;n--)
172 1 {
173 2 *p=read_ds1302(addr);
174 2 p++;
175 2 addr=addr+2;
176 2 }
177 1 }
178
179 /**********************************************************/
C51 COMPILER V7.50 DS1302_LED_C51 12/16/2007 13:49:27 PAGE 4
180 // 初始化DS1302
181 /**********************************************************/
182 void init_ds1302()
183 {
184 1 reset=0;
185 1 sclk=0;
186 1 write_ds1302(0x80,0x00);
187 1 write_ds1302(0x90,0xa6); //一个二极管+4K电阻充电
188 1 write_ds1302(0x8e,0x80); //写保护控制字,禁止写
189 1 }
190
191 /**********************************************************/
192 /* */
193 /* 蜂鸣器响一声 */
194 /* */
195 /**********************************************************/
196 void beep()
197 {
198 1 unsigned char y;
199 1 for (y=0;y<100;y++)
200 1 {
201 2 delay();
202 2 BEEP=!BEEP; //BEEP取反
203 2 }
204 1 BEEP=1; //关闭蜂鸣器
205 1 delay1(50);
206 1 }
207
208
209
210 /**********************************************************/
211 // Time0中断函数
212 /**********************************************************/
213 void Time0(void) interrupt 1 using 0
214 {
215 1 TH0=0x4c; //50ms定时
216 1 TL0=0x00;
217 1 timecount++;
218 1 if(timecount>9)
219 1 {
220 2 timecount=0;
221 2 flag=~flag;
222 2 }
223 1 }
224
225 /**********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -