📄 gongcheng28.lst
字号:
C51 COMPILER V9.05 GONGCHENG28 04/01/2012 18:06:48 PAGE 1
C51 COMPILER V9.05, COMPILATION OF MODULE GONGCHENG28
OBJECT MODULE PLACED IN gongcheng28.OBJ
COMPILER INVOKED BY: D:\电路仿真\C51\BIN\C51.EXE gongcheng28.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5
6
7 sbit sck=P2^7;
8 sbit io = P2^6;
9 sbit res = P2^5;
10
11 sbit rs=P2^0; //rs1602
12 sbit rw=P2^1; //rw
13 sbit en=P2^2; //en
14
15 sbit key0=P3^0;
16 sbit key1=P3^1;
17 sbit key2=P3^2;
18 sbit key3=P3^3;
19
20 sbit beep=P3^5;
21
22 uchar time_date[7] ={12,4,1,7,17,55,30};//年,yue ,日,星期, 时,分,秒
23 uchar write_add[7] ={0x8c,0x88,0x86,0x8a,0x84,0x82,0x80}; //写的地址
24 uchar read_add[7] ={0x8d,0x89,0x87,0x8b,0x85,0x83,0x81}; //读的地址
25 uchar disp[13],dispb[8];
26 uchar nian,nian1,nian2,yue,yue1,yue2,ri,ri1,ri2,zhou1,zhou2,shi,shi1,shi2,fen1,fen2;
27 uchar an_num;
28
29
30
31 void delay(int z)
32 {
33 1 int x,y;
34 1 for(x=z;x>0;x--)
35 1 for(y=110;y>0;y--);
36 1 }
37 void write_cmd(uchar cmd) //1602
38 {
39 1 rs=0;
40 1 P0=cmd;
41 1 delay(5);
42 1 en=1;
43 1 delay(5);
44 1 en=0;
45 1 }
46 void write_date(uchar date) //1602
47 {
48 1 rs=1;
49 1 P0=date;
50 1 delay(5);
51 1 en=1;
52 1 delay(5);
53 1 en=0;
54 1 }
55 void init() //1602初始化
C51 COMPILER V9.05 GONGCHENG28 04/01/2012 18:06:48 PAGE 2
56 {
57 1 rw=0 ;
58 1 rs=0 ;
59 1 en=0;
60 1 write_cmd(0x38); //16X2
61 1 write_cmd(0x0c); //
62 1 write_cmd(0x06); //
63 1 write_cmd(0x01); //清屏
64 1 }
65
66 void write_ds1302_byte(uchar date);
67 void write_ds1302(uchar add,uchar date);
68 uchar read_ds1302(uchar add); //返回的为十六进制数
69 void set_rtc(void);
70 void read_rtc(void);
71 void time_pros(void);
72 void time_pros0(void);
73 void display1(void);
74
75
76 void write_ds1302_byte(uchar date) //单字节写
77 {
78 1 uchar i;
79 1 for(i=0;i<8;i++ )
80 1 {
81 2 sck=0;
82 2 io=date&0x01;
83 2 date=date>>1;
84 2 sck=1;
85 2 }
86 1 }
87
88 void write_ds1302(uchar add,uchar date)
89 {
90 1 res =0;
91 1 _nop_();
92 1 sck = 0;
93 1 _nop_();
94 1 res = 1;
95 1 _nop_();
96 1 write_ds1302_byte(add);
97 1 write_ds1302_byte(date);
98 1 res =0;
99 1 _nop_();
100 1 io = 1;
101 1 sck = 1;
102 1 }
103
104
105 uchar read_ds1302(uchar add)
106 {
107 1 uchar i,value;
108 1 res = 0;
109 1 _nop_();
110 1 sck = 0;
111 1 _nop_();
112 1 res = 1;
113 1 _nop_();
114 1 write_ds1302_byte(add);
115 1 for(i = 0;i<8;i++ )
116 1 {
117 2 value = value>>1; //value是字符型
C51 COMPILER V9.05 GONGCHENG28 04/01/2012 18:06:48 PAGE 3
118 2 sck = 0;
119 2 if(io == 1)
120 2 value = value|0x80;
121 2 sck = 1;
122 2 }
123 1 res = 0;
124 1 _nop_();
125 1 sck = 0;
126 1 _nop_();
127 1 sck = 1;
128 1 io = 0;
129 1 _nop_();
130 1 return value;
131 1 }
132
133
134
135 void set_rtc(void) //设置初始时间
136 {
137 1 uchar i,j;
138 1 for(i=0;i<7;i++)
139 1 {
140 2 j=time_date[i]/10; //十进制转化为十六进制
141 2 time_date[i]=time_date[i]%10;
142 2 time_date[i]=time_date[i]+j*16;
143 2 }
144 1 write_ds1302(0x8e,0x00); //去除写保护 ,0x8e是写保护寄存器的地址
145 1 for(i =0;i<7;i++)
146 1 {
147 2 write_ds1302(write_add[i],time_date[i]);
148 2 }
149 1 write_ds1302(0x8e,0x80); //加写保护
150 1 }
151
152
153 void read_rtc(void) //读出时间,存入数组中,十六进制形式
154 {
155 1 uchar i;
156 1 for(i= 0;i<7;i++)
157 1 {
158 2 time_date[i]=read_ds1302(read_add[i]);
159 2 }
160 1 }
161
162 void time_pros0(void) //把读出的时间转化十位个位
163 {
164 1 nian1=time_date[0]/16;
165 1 nian2=time_date[0]%16;
166 1 nian=nian1*10+nian2;
167 1 yue1=time_date[1]/16;
168 1 yue2=time_date[1]%16;
169 1 yue=yue1*10+yue2;
170 1 ri1=time_date[2]/16;
171 1 ri2=time_date[2]%16;
172 1 ri=ri1*10+ri2;
173 1 zhou1=time_date[3]/16;
174 1 zhou2=time_date[3]%16;
175 1 shi1=time_date[4]/16;
176 1 shi2=time_date[4]%16;
177 1 shi=shi1*10+shi2;
178 1 fen1=time_date[5]/16;
179 1 fen2=time_date[5]%16;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -