📄 yj1302a.lst
字号:
C51 COMPILER V6.23a YJ1302A 07/27/2008 09:06:24 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE YJ1302A
OBJECT MODULE PLACED IN F:\设计\编译通~1\DS1302\YJ1302A.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE F:\设计\编译通~1\DS1302\YJ1302A.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 YJ1302A 07/27/2008 09:06:24 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); //给地址
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);//换行给地址
72 1 for(num=0;num<16;num++)
73 1 {
74 2 write_data(table1[num]);
75 2 delay(5);
76 2 }
77 1 }
78
79
80 void write_sfm(uchar addr, uchar dat)
81 {
82 1 uchar sh,ge;
83 1 sh=dat/16;
84 1 ge=dat%16;
85 1 write_com(0x80+0x40+addr);
86 1 write_data(0x30+sh);
87 1 write_data(0x30+ge);
88 1 }
89 void write1_sfm(uchar addr, uchar dat)
90 {
91 1 uchar sh,ge;
92 1 sh=dat/16;
93 1 ge=dat%16;
94 1 write_com(0x80+addr);
95 1 write_data(0x30+sh);
96 1 write_data(0x30+ge);
97 1 }
98 //-----------------------------
99
100
101
102 void inputbyte(uchar shuju)//对ds1302输入操作
103 {
104 1 uchar i;
105 1 ACC=shuju;
106 1 t_rst=1;//启动对1302允许传送
107 1 for(i=8;i>0;i--)
108 1 {
109 2 t_io=BIT0;//准备送最低位数据
110 2 t_clk=0;
111 2 t_clk=1;//产生一个上升沿,写人数据
112 2 ACC=ACC>>1;
113 2 }
114 1 }
115 uchar outputbyte()//对ds1302进行输出操作
116 {
117 1 uchar i;
C51 COMPILER V6.23a YJ1302A 07/27/2008 09:06:24 PAGE 3
118 1 t_rst=1;//启动对1302允许传送
119 1
120 1 for(i=8;i>0;i--)
121 1 {
122 2 ACC=ACC>>1;//将接受到的数据移到最低位
123 2 t_io=1;//准备
124 2 t_clk=1;
125 2 t_clk=0;//产生一个下降沿,读出数据
126 2 BIT7=t_io;//把数据给最高位
127 2 }
128 1 return ACC;
129 1 }
130 void wr_1302(uchar addr,uchar shuju)
131 {//将指令或数据(shuju)写入对应寄存器(addr)
132 1 t_rst=0;
133 1 t_clk=0;
134 1 t_rst=1;
135 1 inputbyte(addr);//输入地址
136 1 inputbyte(shuju);//输入数据
137 1 t_rst=0;
138 1 t_io=1;
139 1 }
140 uchar re_1302(uchar addr)
141 {// 读出对应寄存器的内容
142 1 uchar dat1;
143 1 t_rst=0;
144 1 t_clk=0;
145 1 t_rst=1;
146 1 inputbyte(addr);
147 1 dat1=outputbyte();
148 1 t_rst=0;
149 1 return (dat1);
150 1 }
151
152 void get_1302(uchar time[])
153 {
154 1 uchar i;
155 1 uchar addr=0x81;
156 1 for(i=0;i<7;i++)
157 1 {
158 2 time[i]=re_1302(addr);
159 2
160 2 addr+=2;
161 2 }
162 1 }
163
164
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -