📄 ds1302.lst
字号:
C51 COMPILER V7.50 DS1302 04/30/2008 22:40:42 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1302.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <REG52.H>
2 #include <intrins.h>
3 //#include "LCD1602.h"
4 //#include "DS1302.h"
5 #define uint unsigned int
6 #define uchar unsigned char
7 sbit DS1302_CLK = P1^7; //实时时钟时钟线引脚
8 sbit DS1302_IO = P1^6; //实时时钟数据线引脚
9 sbit DS1302_RST = P1^5; //实时时钟复位线引脚
10 sbit wireless_1 = P1^1;
11 sbit wireless_2 = P1^2;
12 sbit wireless_3 = P1^3;
13 sbit wireless_4 = P1^4;
14 sbit ACC0 = ACC^0;
15 sbit ACC7 = ACC^7;
16 char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数
17 sbit Set = P2^0; //模式切换键
18 sbit Up = P2^1; //加法按钮
19 sbit Down = P2^2; //减法按钮
20 sbit out = P2^3; //立刻跳出调整模式按钮
21 sbit DQ = P1^0; //温度传送数据IO口
22 char done,count,temp,flag,up_flag,down_flag;
23 uchar temp_value; //温度值
24 uchar TempBuffer[5],week_value[2];
25
26
27 void show_time(); //液晶显示程序
28 /***********1602液晶显示部分子程序****************/
29
30 uchar ledcode[15];
31 //Port Definitions**********************************************************
32 sbit LcdRs = P2^5;
33 sbit LcdRw = P2^6;
34 sbit LcdEn = P2^7;
35 sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
36
37 //内部等待函数**************************************************************************
38 unsigned char LCD_Wait(void)
39 {
40 1 LcdRs=0;
41 1 LcdRw=1; _nop_();
42 1 LcdEn=1; _nop_();
43 1
44 1 LcdEn=0;
45 1 return DBPort;
46 1 }
47 //向LCD写入命令或数据************************************************************
48 #define LCD_COMMAND 0 // Command
49 #define LCD_DATA 1 // Data
50 #define LCD_CLEAR_SCREEN 0x01 // 清屏
51 #define LCD_HOMING 0x02 // 光标返回原点
52 void LCD_Write(bit style, unsigned char input)
53 {
54 1 LcdEn=0;
55 1 LcdRs=style;
C51 COMPILER V7.50 DS1302 04/30/2008 22:40:42 PAGE 2
56 1 LcdRw=0; _nop_();
57 1 DBPort=input; _nop_();//注意顺序
58 1 LcdEn=1; _nop_();//注意顺序
59 1 LcdEn=0; _nop_();
60 1 LCD_Wait();
61 1 }
62
63 //设置显示模式************************************************************
64 #define LCD_SHOW 0x04 //显示开
65 #define LCD_HIDE 0x00 //显示关
66
67 #define LCD_CURSOR 0x02 //显示光标
68 #define LCD_NO_CURSOR 0x00 //无光标
69
70 #define LCD_FLASH 0x01 //光标闪动
71 #define LCD_NO_FLASH 0x00 //光标不闪动
72
73 void LCD_SetDisplay(unsigned char DisplayMode)
74 {
75 1 LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
76 1 }
77
78 //设置输入模式************************************************************
79 #define LCD_AC_UP 0x02
80 #define LCD_AC_DOWN 0x00 // default
81
82 #define LCD_MOVE 0x01 // 画面可平移
83 #define LCD_NO_MOVE 0x00 //default
84
85 void LCD_SetInput(unsigned char InputMode)
86 {
87 1 LCD_Write(LCD_COMMAND, 0x04|InputMode);
88 1 }
89
90
91 sbit P30=P3^0;
92 sbit P31=P3^1;
93 sbit P32=P3^2;
94 sbit P33=P3^3;
95 sbit P34=P3^4;
96 sbit P35=P3^5;
97 sbit P36=P3^6;
98 sbit P37=P3^7;
99
100 void delay_10ms(void);
101 void keyscan(void)
102 {
103 1 //******************扫第1列************
104 1
105 1 P3=0x00;
106 1
107 1 P34=0;
108 1 if(P30==0)
109 1 {
110 2
111 2 ledcode[0]=1;
112 2
113 2 }
114 1 if(P31==0)
115 1 {
116 2 ledcode[1]=2;
117 2 }
C51 COMPILER V7.50 DS1302 04/30/2008 22:40:42 PAGE 3
118 1
119 1 if(P32==0)
120 1 {
121 2 ledcode[2]=3;
122 2 }
123 1 if(P33==0)
124 1 {
125 2 ledcode[3]=4;
126 2 }
127 1 P3=0xff;
128 1 //**************扫第2列******************
129 1 P35=0;
130 1 if(P30==0)
131 1 {
132 2
133 2 ledcode[4]=5;
134 2 }
135 1 if(P31==0)
136 1 {
137 2 ledcode[5]=6;
138 2 }
139 1
140 1 if(P32==0)
141 1 {
142 2 ledcode[6]=7;
143 2 }
144 1 if(P33==0)
145 1 {
146 2 ledcode[7]=8;
147 2 }
148 1 P1=0xff;
149 1 //***************扫第3列*********************
150 1 P36=0;
151 1 if(P30==0)
152 1 {
153 2
154 2 ledcode[8]=9;
155 2 }
156 1 if(P31==0)
157 1 {
158 2 ledcode[9]=10;
159 2 }
160 1
161 1 if(P32==0)
162 1 {
163 2 ledcode[10]=1;
164 2 }
165 1 if(P33==0)
166 1 {
167 2 ledcode[11]=3;
168 2 }
169 1 P3=0xff;
170 1 //***************扫第4列************************
171 1 show_time();
172 1
173 1 }
174
175
176
177
178 void delay_10ms(void)
179 {
C51 COMPILER V7.50 DS1302 04/30/2008 22:40:42 PAGE 4
180 1 uchar i,j;
181 1 for(i=0;i<100;i++);
182 1 for(j=0;j<80;j++);
183 1 }
184 //初始化LCD************************************************************
185 void LCD_Initial()
186 {
187 1 LcdEn=0;
188 1 LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
189 1 LCD_Write(LCD_COMMAND,0x38);
190 1 LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标
191 1 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
192 1 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动
193 1 }
194
195 //液晶字符输入的位置************************
196 void GotoXY(unsigned char x, unsigned char y)
197 {
198 1 if(y==0)
199 1 LCD_Write(LCD_COMMAND,0x80|x);
200 1 if(y==1)
201 1 LCD_Write(LCD_COMMAND,0x80|(x-0x40));
202 1 }
203
204 //将字符输出到液晶显示
205 void Print(unsigned char *str)
206 {
207 1 while(*str!='\0')
208 1 {
209 2 LCD_Write(LCD_DATA,*str);
210 2 str++;
211 2 }
212 1 }
213
214
215
216
217
218
219 /***********DS1302时钟部分子程序******************/
220 typedef struct __SYSTEMTIME__
221 {
222 unsigned char Second;
223 unsigned char Minute;
224 unsigned char Hour;
225 unsigned char Week;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -