📄 +
字号:
C51 COMPILER V7.50 DAS1302 05/16/2010 10:01:11 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DAS1302
OBJECT MODULE PLACED IN DAS1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DAS1302.C BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /************************************************************************/
3 // huaqinMCU DS1302 实验程序 数码管显示 时钟设置说明
4 // "8键"为时钟设置、时分切换、保存 "0键"为加 "4键"为减
5 /************************************************************************/
6 #include <reg52.h>
7 #define uchar unsigned char
8 #define uint unsigned int
9 //===以下IO定义请根据您硬件的连接修改===
10 sbit T_RST=P3^5;//ds1302-5
11 sbit T_IO=P3^4;//ds1302-6
12 sbit T_CLK=P3^6;//ds1302-7
13 sbit ACC0=ACC^0;
14 sbit ACC7=ACC^7;//累加器A 51单片机原理中有介绍
15 sbit up=P3^1;
16 sbit down=P3^2;
17 sbit set=P3^0;
18 uchar a,b,clock_ss,clock_sg,clock_fs,clock_fg,clock_ms,clock_mg;
19 int hour,mie,sei;
20 uchar clk_time[3]; //秒,分,时寄存器初始值
21 code uchar ledmap[]={
22 0x3f,0x06,0x5b,0x4f,
23 0x66,0x6d,0x7d,0x07,
24 0x7f,0x6f,0x40};
25 //数码管段码
26
27 /******************DS1302:写入操作(上升沿)*********************/
28 void write_byte(uchar da)
29 {
30 1 uchar i;
31 1 ACC=da;
32 1 for(i=8;i>0;i--)
33 1 {
34 2 T_IO=ACC0;
35 2 T_CLK=0;
36 2 T_CLK=1;
37 2 ACC=ACC>>1;
38 2 }
39 1 }
40
41 /******************DS1302:读取操作(下降沿)*****************/
42 uchar read_byte(void)
43 {
44 1 uchar i;
45 1 for(i=0;i<8;i++)
46 1 {
47 2 ACC=ACC>>1;
48 2 T_CLK = 1;
49 2 T_CLK = 0;
50 2 ACC7 = T_IO;
51 2 }
52 1 return(ACC);
53 1
54 1 }
55
C51 COMPILER V7.50 DAS1302 05/16/2010 10:01:11 PAGE 2
56 /******************DS1302:写入数据(先送地址,再写数据)***************************/
57 void write_1302(uchar addr,uchar da)
58 {
59 1 T_RST=0; //停止工作
60 1 T_CLK=0;
61 1 T_RST=1; //重新工作
62 1 write_byte(addr); //写入地址
63 1
64 1 write_byte(da);
65 1 T_RST=0;
66 1 T_CLK=1;
67 1 }
68
69 /******************DS1302:读取数据(先送地址,再读数据)**************************/
70 uchar read_1302(uchar addr)
71 {
72 1 uchar temp;
73 1 T_RST=0; //停止工作
74 1 T_CLK=0;
75 1 T_RST=1; //重新工作
76 1 write_byte(addr); //写入地址
77 1 temp=read_byte();
78 1 T_RST=0;
79 1 T_CLK=1; //停止工作
80 1 return(temp);
81 1 }
82 /***********************延时程序=a*1ms**************************************/
83 void delay(uchar a)
84 {
85 1 uchar i;
86 1 while(a-- !=0)
87 1 { // led_disp();
88 2 for(i=0;i<125;i++);
89 2 }
90 1 }
91 /***********************显示程序**********************************************/
92
93 /* DS1302秒,分,时寄存器是BCD码形式: 用16求商和余进行"高4位"和"低4位"分离 */
94 /****************************************************************************/
95 void led_disp()
96 { uchar cant1,cant2;
97 1 if(b==0)
98 1 {
99 2 cant1=0;cant2=0;
100 2 clock_ms=clk_time[0]/ 16; clock_mg=clk_time[0]%16;
101 2
102 2 clock_fs=clk_time[1]/ 16; clock_fg=clk_time[1]%16;
103 2 mie=clock_fs*10+ clock_fg;
104 2 clock_ss=clk_time[2]/ 16; clock_sg=clk_time[2]%16;//BCD*to*10
105 2 hour=clock_ss*10+ clock_sg; //用16求商和余进行"高4位"和"低4位"分离
106 2 }
107 1
108 1 if(b==1)
109 1 {
110 2 cant1++;
111 2 cant2=0;
112 2 clock_ss=hour/ 10; clock_sg=hour%10;
113 2
114 2 clock_fs=mie/ 10; clock_fg=mie%10;
115 2
116 2 clock_ms=sei/10; clock_mg=sei%10;
117 2 }
C51 COMPILER V7.50 DAS1302 05/16/2010 10:01:11 PAGE 3
118 1 if(b==2)
119 1 { cant1=0;
120 2 cant2++;
121 2 clock_ss=hour/ 10; clock_sg=hour%10;
122 2
123 2 clock_fs=mie/ 10; clock_fg=mie%10;
124 2
125 2 clock_ms=sei/10; clock_mg=sei%10;
126 2 }
127 1
128 1
129 1 if(cant1<=3)
130 1 {
131 2 P2=0;
132 2 P0=ledmap[clock_ss];
133 2 delay(1);
134 2 P0=0X00;
135 2 P2=1;
136 2 P0=ledmap[clock_sg];//时个位
137 2 delay(1);P0=0X00;}
138 1 if(cant1==5)
139 1 cant1=0;
140 1 P2=2;
141 1 P0=ledmap[10];//显示"-"数组里的 0x40
142 1 delay(1);
143 1 P0=0X00;
144 1
145 1 if(cant2<=3)
146 1 {
147 2 P2=3;
148 2 P0=ledmap[clock_fs];//分十位
149 2 delay(1);
150 2 P0=0X00;
151 2 P2=4;
152 2 P0=ledmap[clock_fg];//时个位
153 2 delay(1);P0=0X00;
154 2 }
155 1 if(cant2==5)
156 1 cant2=0;
157 1 P2=5;
158 1 P0=ledmap[10];//显示"-"数组里的 0x40
159 1 delay(1);
160 1 P0=0X00;
161 1
162 1 P2=6;
163 1 P0=ledmap[clock_ms];//秒十位
164 1 delay(1);
165 1 P0=0X00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -