📄 ds12cr887mnl.lst
字号:
C51 COMPILER V8.05a DS12CR887MNL 04/15/2009 21:34:52 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE DS12CR887MNL
OBJECT MODULE PLACED IN DS12CR887mnl.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS12CR887mnl.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*-----------------------------------------------------------------------------
2 电子智能时钟源wj
3 单片机:STC89C52RC
4 晶振:12MHz
5 时钟芯片:DS12CR887+5
6 液晶屏:LCM-12864-ST7920
7 时间:2009.04.16
8 LCM12864使用并口连接方式
9 -----------------------------------------------------------------------------*/
10 /*头文件---------------------------------------------------------------------*/
11 #include <reg52.h>
12 #include <string.h>
13 #include "DS12CR887mnl.h"
14
15 /*定义全局变量---------------------------------------------------------------*/
16 uchar sec,min,hour, day, date, month,year;
17 //秒,分,小时,星期,日期,月, 年
18 bit w = 0; //调时标志位
19
20 /*延时程序-------------------------------------------------------------------*/
21 //延时函数 1MS/次
22 void DelayM(uint a)
23 {
24 1 uchar i;
25 1 while( --a != 0)
26 1 {
27 2 for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。
28 2 } //i 从0加到125,CPU大概就耗时1毫秒
29 1 }
30
31 //延时函数
32 void Delay(int num)
33 {
34 1 while(num--);
35 1 }
36
37 /*DS12CR887驱动程序----------------------------------------------------------*/
38 //往DS12CR887写数据函数
39 void ds_write(uchar add,uchar date)
40 {
41 1 DS_CS=0;
42 1 DS_DS=1;
43 1 DS_RW=1;
44 1 DS_AS=1;
45 1 Ds_Bus=add;
46 1 DS_AS=0;
47 1 DS_RW=0;
48 1 Ds_Bus=date;
49 1 DS_RW=1;
50 1 DS_AS=1;
51 1 DS_CS=1;
52 1 }
53
54 //读取DS12CR887的数据
55 uchar ds_read(uchar add)
C51 COMPILER V8.05a DS12CR887MNL 04/15/2009 21:34:52 PAGE 2
56 {
57 1 uchar z;
58 1 DS_CS=0;
59 1 DS_RW=1;
60 1 DS_DS=1;
61 1 DS_AS=1;
62 1 Ds_Bus=add;
63 1 DS_AS=0;
64 1 DS_DS=0;
65 1 Ds_Bus=0xff;
66 1 z=Ds_Bus;
67 1 DS_DS=1;
68 1 DS_AS=1;
69 1 DS_CS=1;
70 1 return z;
71 1 }
72
73 //DS12CR887初始化
74 void ds_int()
75 {
76 1 DS_AS=0;
77 1 DS_DS=0;
78 1 DS_RW=0;
79 1 ds_write(0x0a,0x20);//DS12CR887寄存器A功能设置,开启时钟振荡器
80 1 }
81
82 /*12864液晶显示屏并口驱动程序------------------------------------------------*/
83
84 //检查忙位(底层)
85 void chk_busy()
86 {
87 1 LCM_RS=0;
88 1 LCM_RW=1;
89 1 LCM_EN=1;
90 1 Lcd_Bus=0xff;
91 1 while((Lcd_Bus&0x80)==0x80);
92 1 LCM_EN=0;
93 1 }
94
95 //写指令到LCD(底层)
96 void write_com(uchar cmdcode)
97 {
98 1 chk_busy();
99 1 LCM_RS=0;
100 1 LCM_RW=0;
101 1 LCM_EN=1;
102 1 Lcd_Bus=cmdcode;
103 1 LCM_EN=0;
104 1 }
105
106 //写数据到LCD(底层)
107 void write_data(uchar Dispdata)
108 {
109 1 chk_busy();
110 1 LCM_RS=1;
111 1 LCM_RW=0;
112 1 LCM_EN=1;
113 1 Lcd_Bus=Dispdata;
114 1 LCM_EN=0;
115 1 }
116
117 //初始化LCD屏(被调用层)
C51 COMPILER V8.05a DS12CR887MNL 04/15/2009 21:34:52 PAGE 3
118 void lcm_init()
119 {
120 1 LCM_PSB=1; //如果液晶屏的PSB在电路板中接了高电平的,这里可以屏蔽
121 1 LCM_RST=1; //如果液晶屏的RST在电路板中接了高电平的,这里可以屏蔽
122 1 write_com(0x30); //选择8bit数据流
123 1 write_com(0x0c); //开显示(无游标、不反白)
124 1 write_com(0x01); //清除显示,并且设定地址指针为00H
125 1 }
126
127 //向LCM发送一个字符串,长度64字符之内。(被调用层)
128 //应用:lcm_w_word("您好!");
129 void lcm_w_word(uchar *s)
130 {
131 1 while(*s>0)
132 1 {
133 2 write_data(*s);
134 2 s++;
135 2 }
136 1 }
137
138 //写指令或数据(被调用层)
139 void lcm_w_test(bit i,uchar word)
140 {
141 1 if(i == 0)
142 1 {
143 2 write_com(word);//写指令或数据(0,指令)
144 2 }
145 1 else
146 1 {
147 2 write_data(word);//写指令或数据(1,数据)
148 2 }
149 1 }
150
151 //清屏函数
152 void lcm_clr(void)
153 {
154 1 lcm_w_test(0,0x01);
155 1 }
156
157 /*DS18B20驱动程序------------------------------------------------------------*/
158 //初始化ds1820函数
159 void Init_DS18B20(void)
160 {
161 1 uchar x=0;
162 1 DQ = 1; //DQ复位
163 1 Delay(8); //稍做延时
164 1 DQ = 0; //单片机将DQ拉低
165 1 Delay(80); //精确延时 大于 480us
166 1 DQ = 1; //拉高总线
167 1 Delay(14);
168 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
169 1 Delay(20);
170 1 }
171
172 //读一个字节函数
173 uchar ReadOneChar(void)
174 {
175 1 uchar i=0;
176 1 uchar dat = 0;
177 1 for (i=8;i>0;i--)
178 1 {
179 2 DQ = 0; // 给脉冲信号
C51 COMPILER V8.05a DS12CR887MNL 04/15/2009 21:34:52 PAGE 4
180 2 dat>>=1;
181 2 DQ = 1; // 给脉冲信号
182 2 if(DQ)
183 2 dat|=0x80;
184 2 Delay(4);
185 2 }
186 1 return(dat);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -