📄 yj1302b.lst
字号:
C51 COMPILER V6.23a YJ1302B 07/29/2008 18:41:53 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE YJ1302B
OBJECT MODULE PLACED IN F:\设计\编译通~1\DS1302\YJ1302B.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE F:\设计\编译通~1\DS1302\YJ1302B.C DB SB OE
stmt level source
1 //lcd显示用的
2 #include<reg51.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 sbit t_clk=P1^2;
6 sbit t_io=P1^3;
7 sbit t_rst=P1^4;
8 sbit BIT0=ACC^0;
9 sbit BIT7=ACC^7;
10 uchar time1[7];
11 void inputbyte(uchar shuju);
12
13
14 //-------------------------液晶部分
15 sbit RS=P3^0;
16 sbit RW=P3^2;
17 sbit EN=P3^4;
18
19 uchar count,shi,fen,miao;
20
21 uchar code table[]="2008 12 31week1 ";
22 uchar code table1[]=" 23:59:45 ";
23
24 void delay(uint z)
25
26 {
27 1 uint x,y;
28 1 for(x=z;x>0;x--)
29 1 for(y=120;y>0;y--);
30 1 }
31
32 void write_com(uchar com)
33 {
34 1 EN=0;
35 1 RS=0;
36 1 RW=0;
37 1 P0=com;
38 1 delay(5);
39 1 EN=1;
40 1 delay(5);
41 1 EN=0;
42 1 }
43 void write_data(uchar date)
44 {
45 1 EN=0;
46 1 RS=1;
47 1 RW=0;
48 1 P0=date;
49 1 delay(5);
50 1 EN=1;
51 1 delay(5);
52 1 EN=0;
53 1 }
54
55
C51 COMPILER V6.23a YJ1302B 07/29/2008 18:41:53 PAGE 2
56 void init()
57 {
58 1 uchar num;
59 1 EN=0;
60 1 write_com(0x38);
61 1 write_com(0x0c); //开显示
62 1 write_com(0x06);
63 1 write_com(0x01); //清零
64 1
65 1 write_com(0x80+16); //给地址
66 1 for(num=0;num<16;num++)
67 1 {
68 2 write_data(table[num]);
69 2 delay(5);
70 2 }
71 1 write_com(0x80+0x40+16);//换行给地址
72 1 for(num=0;num<16;num++)
73 1 {
74 2 write_data(table1[num]);
75 2 delay(5);
76 2 }
77 1 for (num=0;num<16;num++)
78 1 {
79 2 write_com(0x18); //0X18是左移指令 一个移一次
80 2 delay(100);
81 2 }
82 1 }
83
84
85 void write_sfm(uchar addr, uchar dat)
86 {
87 1 uchar sh,ge;
88 1 sh=dat/16;
89 1 ge=dat%16;
90 1 write_com(0x80+0x40+16+addr);
91 1 write_data(0x30+sh);
92 1 write_data(0x30+ge);
93 1 }
94 void write1_sfm(uchar addr, uchar dat)
95 {
96 1 uchar sh,ge;
97 1 sh=dat/16;
98 1 ge=dat%16;
99 1 write_com(0x80+16+addr);
100 1 write_data(0x30+sh);
101 1 write_data(0x30+ge);
102 1 }
103 //-----------------------------
104
105
106
107 void inputbyte(uchar shuju)//对ds1302输入操作
108 {
109 1 uchar i;
110 1 ACC=shuju;
111 1 t_rst=1;//启动对1302允许传送
112 1 for(i=8;i>0;i--)
113 1 {
114 2 t_io=BIT0;//准备送最低位数据
115 2 t_clk=0;
116 2 t_clk=1;//产生一个上升沿,写人数据
117 2 ACC=ACC>>1;
C51 COMPILER V6.23a YJ1302B 07/29/2008 18:41:53 PAGE 3
118 2 }
119 1 }
120 uchar outputbyte()//对ds1302进行输出操作
121 {
122 1 uchar i;
123 1 t_rst=1;//启动对1302允许传送
124 1
125 1 for(i=8;i>0;i--)
126 1 {
127 2 ACC=ACC>>1;//将接受到的数据移到最低位
128 2 t_io=1;//准备
129 2 t_clk=1;
130 2 t_clk=0;//产生一个下降沿,读出数据
131 2 BIT7=t_io;//把数据给最高位
132 2 }
133 1 return ACC;
134 1 }
135 void wr_1302(uchar addr,uchar shuju)
136 {//将指令或数据(shuju)写入对应寄存器(addr)
137 1 t_rst=0;
138 1 t_clk=0;
139 1 t_rst=1;
140 1 inputbyte(addr);//输入地址
141 1 inputbyte(shuju);//输入数据
142 1 t_rst=0;
143 1 t_io=1;
144 1 }
145 uchar re_1302(uchar addr)
146 {// 读出对应寄存器的内容
147 1 uchar dat1;
148 1 t_rst=0;
149 1 t_clk=0;
150 1 t_rst=1;
151 1 inputbyte(addr);
152 1 dat1=outputbyte();
153 1 t_rst=0;
154 1 return (dat1);
155 1 }
156
157 void get_1302(uchar time[])
158 {
159 1 uchar i;
160 1 uchar addr=0x81;
161 1 for(i=0;i<7;i++)
162 1 {
163 2 time[i]=re_1302(addr);
164 2
165 2 addr+=2;
166 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -