📄 万年历.lst
字号:
C51 COMPILER V7.50 万年繽 11/15/2008 19:16:03 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 万年繽
OBJECT MODULE PLACED IN 万年历.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 万年历.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***************************************************************
2 系统名称:电子万年历
3 创建人:w418781840 日期:2008,7,18
4 功能描述:LCD12864串行模式显示,DS1302读取时间年月份,
5 18B20 读取温度
6 ****************************************************************/
7 #include <reg51.h>
8 #include <intrins.h>
9 #include <stdio.h>
10 #define uchar unsigned char
11 #define uint unsigned int
12 /*------------LCD12864相关声明-----------------------------*/
13 #define com 0
14 #define dat 1
15 sbit cs =P1^5;
16 sbit sid=P1^6;
17 sbit sck=P1^7;
18 uchar code TAB1[]={"欢迎使用系统"};//第一行初始化.
19 uchar code TAB2[]={"20 年 月 日"}; //第二行
20 uchar code TAB3[]={"星期 : : "}; //第三行
21 uchar code TAB4[]={"室温: ℃"}; //第四行
22 /*----------------------DS1302相关声明-------------------------*/
23 char TAB_1302[]={ 0x00,0x29,0x02, //秒:分:时.
24 0x18,0x06,0x06,0x08}; //日:月:星期:年.
25 uchar code TAB_XQ[]={"一二三四五六日"};//把DS1302数字日期转换为中文字符.
26 sbit T_CLK=P3^1; /* 实时时钟的时钟线引脚*/
27 sbit T_IO=P3^3; /* 实时时钟的数据线*/
28 sbit T_RST=P3^6; /* 实时时钟的复位线引脚*/
29 uchar bdata datbyte;
30 sbit datbyte0=datbyte^0;
31 sbit datbyte7=datbyte^7;
32 /*--------------18B20相关声明-------------------------------*/
33 uchar dis1[16];
34 sbit DQ=P1^4; /*DS18B20温度检测*/
35 /*----------键盘相关声明-------------------------------------*/
36 sbit key=P2^1; //功能键
37 sbit key1=P2^0; //只有加1键
38 uchar sum,keyflag=0; //调用时,分,秒,标志,调用键盘处理标志.
39 /*--------------以下为LCD12864相关函数--------------------------*/
40 /**************************************************************
41 函数名称:void delay1ms(uint x)
42 函数功能: 延时1MS
43 ***************************************************************/
44 void delay1ms(uint x)
45 {
46 1 uint i,j;
47 1 for(i=0;i<x;i++)
48 1 for(j=0;j<120;j++);
49 1 }
50 /**************************************************************
51 函数名称:void w_12864byte(uchar byte)
52 函数功能: 写字节
53 **************************************************************/
54 void w_12864byte(uchar byte)
55 {
C51 COMPILER V7.50 万年繽 11/15/2008 19:16:03 PAGE 2
56 1 uchar i;
57 1 for(i=0;i<8;i++)
58 1 {
59 2 sck=0;
60 2 byte<<=1;
61 2 sid=CY;
62 2 sck=1;
63 2 }
64 1 }
65 /**************************************************************
66 函数名称:uchar r_12864byte(void)
67 函数功能: 读字节
68 ***************************************************************/
69 uchar r_12864byte(void)
70 {
71 1 uchar i,temp1,temp2;
72 1 temp1 = 0;
73 1 temp2 = 0;
74 1 for(i=0;i<8;i++)
75 1 {
76 2 temp1=temp1<<1;
77 2 sck = 0;
78 2 sck = 1;
79 2 sck = 0;
80 2 if(sid) temp1++;
81 2 }
82 1 for(i=0;i<8;i++)
83 1 {
84 2 temp2=temp2<<1;
85 2 sck = 0;
86 2 sck = 1;
87 2 sck = 0;
88 2 if(sid) temp2++;
89 2 }
90 1 return ((0xf0&temp1)+(0x0f&temp2));
91 1 }
92 /**************************************************************
93 函数名称:void c_12864busy( void )
94 函数功能: 检测忙函数
95 **************************************************************/
96 void c_12864busy( void )
97 {
98 1 do
99 1 w_12864byte(0xfc); //11111,RW(1),RS(0),0
100 1 while(0x80&r_12864byte());
101 1 }
102 /**************************************************************
103 函数名称:void w_12864(bit dat_com,uchar byt)
104 函数功能: 写入函数
105 ***************************************************************/
106 void w_12864(bit dat_com,uchar byt)
107 {
108 1 uchar temp;
109 1 if(dat_com==0) //为零,写入指令
110 1 temp=0xf8; //11111,RS(0),RW(0),0
111 1 else //否则,写入数据
112 1 temp=0xfa; //11111,RS(1),RW(0),0
113 1 cs=1;
114 1 c_12864busy();
115 1 w_12864byte(temp);
116 1 w_12864byte(byt&0xf0); //写入高四位
117 1 w_12864byte(byt<<4); //写入低四位
C51 COMPILER V7.50 万年繽 11/15/2008 19:16:03 PAGE 3
118 1 cs=0;
119 1 }
120 /**************************************************************
121 函数名称:void init_12864(void)
122 函数功能:初始化12864
123 ***************************************************************/
124 void init_12864(void)
125 {
126 1 w_12864(com,0x30); //基本指令功能.
127 1 w_12864(com,0x0c); //显示打开,关光标,反白关.
128 1 w_12864(com,0x01); //清屏指令.
129 1 w_12864(com,0x06); //AC自动加一
130 1 }
131 /*----------------以下为DS1302相关函数-------------------------*/
132 /**************************************************************
133 函数名称:void w_1302byte(uchar date)
134 函数功能:写一个字节(上升沿)
135 ***************************************************************/
136 void w_1302byte(uchar date)
137 { uchar i;
138 1 datbyte=date;
139 1 for(i=0;i<8;i++)
140 1 { T_IO=datbyte0; //写最低位
141 2 T_CLK=0;
142 2 T_CLK=1;
143 2 datbyte>>=1;
144 2 }
145 1 }
146 /**************************************************************
147 函数名称:uchar r_1302byte(void)
148 函数功能:读一个字节(下降沿)
149 ***************************************************************/
150 uchar r_1302byte(void)
151 { uchar i;
152 1 datbyte=0;
153 1 for(i=0;i<8;i++)
154 1 { datbyte7=T_IO; //读最低位
155 2 T_CLK=1;
156 2 T_CLK=0;
157 2 datbyte>>=1;
158 2 }
159 1 return(datbyte);
160 1 }
161 /***************************************************************
162 函数名称:void write_1302(uchar addr,uchar date)
163 函数功能: 指定位置写数据
164 ****************************************************************/
165 void write_1302(uchar addr,uchar date)
166 { T_RST=0;
167 1 T_CLK=0;
168 1 T_RST=1;
169 1 w_1302byte(addr);
170 1 w_1302byte(date);
171 1 T_CLK=0;
172 1 T_RST=0;
173 1 }
174 /**************************************************************
175 函数名称:uchar read_1302(uchar addr)
176 函数功能: 指定位置读数据
177 ****************************************************************/
178 uchar read_1302(uchar addr)
179 { uchar dat1,dat2,temp;
C51 COMPILER V7.50 万年繽 11/15/2008 19:16:03 PAGE 4
180 1 T_RST=0;
181 1 T_CLK=0;
182 1 T_RST=1;
183 1 w_1302byte(addr);
184 1 temp=r_1302byte();
185 1 T_RST=0;
186 1 T_CLK=0;
187 1 dat1=temp/16;
188 1 dat2=temp%16;
189 1 temp=dat1*10+dat2;
190 1 return(temp);
191 1 }
192 /***************************************************************
193 函数名称:void init_1302(void)
194 函数功能: 初始化
195 *****************************************************************/
196 void init_1302(void)
197 { uchar i;
198 1 uchar addr=0x80;
199 1 write_1302(0x8e,0x00);
200 1 for(i=0;i<7;i++)
201 1 {
202 2 write_1302(addr,TAB_1302[i]);
203 2 addr+=2;
204 2 }
205 1 write_1302(0x8e,0x80);
206 1 }
207 /****************************************************************
208 函数名称:void get_1302(void)
209 功能说明:读取DS1302时钟信息.
210 *****************************************************************/
211 void get_1302(void)
212 { uchar i,addr=0x81;
213 1 for(i=0;i<7;i++)
214 1 { TAB_1302[i]=read_1302(addr);
215 2 addr+=2;
216 2 }
217 1 }
218 /*---------------以下为18B20相关函数-----------------------------*/
219 /******************************************************************
220 函数名称:void delay (uint x)
221 功能说明:若机器周期为1us,则本延时程序为延时 4*x(us)
222 ******************************************************************/
223 void delay (uint x) //本板延时8us
224 {
225 1 while (--x);
226 1 }
227
228 /*****************************************************************
229 函数名称:uchar bus_rest(void)
230 功能说明:产生单总线系统信号的总线复位信号,并返回
231 总线上是否存在单总线器件信息
232 ******************************************************************/
233 uchar bus_rest(void)
234 {
235 1 uchar presence;
236 1 DQ=0; //将DQ信号线拉低
237 1 delay(29); //持续48US
238 1 DQ=1; //释放总线
239 1 delay(3); //等待从设备将总线拉低
240 1 presence=DQ; //保存当前总线状态
241 1 delay(25); //等待总线初始化过程结束
C51 COMPILER V7.50 万年繽 11/15/2008 19:16:03 PAGE 5
242 1 return presence;//返回是否有从设备将总线拉低
243 1
244 1 }
245
246 /****************************************************************
247 函数名称:uchar r_1820BYTE(void)
248 功能说明:向单总线读取一个数据字节
249 *****************************************************************/
250 uchar r_1820BYTE(void)
251 {
252 1 uchar i=0;
253 1 uchar date = 0;
254 1 for (i=8;i>0;i--)
255 1 {
256 2 DQ = 0; // 将DQ信号线拉低启动读时隙
257 2 DQ=1;// 释放总线,等待从机动车辆返回数据位
258 2 delay(1); //越接近15us越好; 准备采样总线上的信号
259 2 date>>=1 ;
260 2 if (DQ)
261 2 date=date|0x80;
262 2 delay(6);
263 2 }
264 1 return(date);
265 1 }
266
267 /*****************************************************************
268 函数名称:void w_1280Byte(uchar bytevalue)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -