📄 自动充电ds1302.lst
字号:
C51 COMPILER V6.02 譥动_涞鏒S1302 03/21/2008 01:38:36 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE 譥动_涞鏒S1302
OBJECT MODULE PLACED IN C:\DOCUME~1\DAVELO~1\桌面\电子竞赛\李大伟\DS1302_7\自动充电DS1302.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE C:\DOCUME~1\DAVELO~1\桌面\电子竞赛\李大伟\DS1302_7\自动充电DS1302.C DB SB OE
stmt level source
1 #include <lcm1602.c>
2
3 #define uchar unsigned char
4
5 //---------------------------定义端口--------------------------------
6
7 sbit SCLK=P3^7; //时钟
8 sbit IO_DATA=P3^6; //数据
9 sbit RESET=P3^5; //复位
10
11 sbit ACC0=ACC^0; //定义累加器最低位
12 sbit ACC7=ACC^7; //定义累加器最高位
13
14 //--------------------------定义端口完毕-----------------------------
15
16 //---------------------------时序初始化-----------------------------
17 ds1302_init()
18 {
19 1 RESET=0;
20 1 SCLK=0;
21 1 RESET=1;
22 1 }
23 //----------------------------时序初始完毕----------------------------
24
25 ds1302_end() //写结束
26 {
27 1 RESET=0;
28 1 SCLK=1;
29 1 }
30
31 ds1302_write(uchar position) //写指令与数据函数
32 {uchar i;
33 1 ACC=position;
34 1 for(i=1;i<9;i++) //这里i不能从0开始循环,否则全刷0
35 1 {
36 2 SCLK=0; //也可以用 IO_DATA=ACC0;
37 2 IO_DATA=ACC0; // SCLK=0; 来实现,写指令时换下位置一样
38 2 SCLK=1; //时钟脉冲上升沿写入数据
39 2 ACC>>=1; //累加器值右移一位
40 2 }
41 1 }
42
43 //-------------------------------写指令-------------------------------
44 ds1302_write_command(uchar position,uchar ds1302_data)
45 {
46 1 ds1302_init();
47 1 ds1302_write(position); //先写指令,后写数据;
48 1 ds1302_write(ds1302_data);
49 1 ds1302_end();
50 1 }
51 //------------------------------写指令完毕----------------------------
52
53 //---------------------------------读数据-----------------------------
54 ds1302_read()
55 {uchar i;
C51 COMPILER V6.02 譥动_涞鏒S1302 03/21/2008 01:38:36 PAGE 2
56 1 for(i=1;i<9;i++) //这里i不能从0开始循环,否则全刷0
57 1 {
58 2 ACC>>=1; //要先把上次写的地址移走
59 2 SCLK=1;
60 2 SCLK=0;
61 2 ACC7=IO_DATA; //读数据在下降沿有效
62 2 }
63 1 return(ACC);
64 1 }
65 //--------------------------------读数据完毕--------------------------
66
67 //------------------------十六进制至十进制转换----------------------------
68 ds1302_change_16_10(uchar read_data)
69 {uchar ten,ge,sum; // 定义十六进制十位和个位和所合成十进制数
70 1 ten=read_data/16;
71 1 ge=read_data%16;
72 1 sum=ten*10+ge;
73 1 return(sum);
74 1 }
75 //-----------------------------转换完毕-----------------------------
76
77 //------------------------------读函数----------------------------
78 ds1302_read_command(uchar position)
79 {uchar readdata; //存放临时读出数据
80 1 ds1302_init();
81 1 ds1302_write(position); //先写地址
82 1 readdata=ds1302_read();
83 1 readdata=ds1302_change_16_10(readdata); //进行十六进制至十进制转换
84 1 ds1302_end();
85 1 return(readdata);
86 1 }
87 //------------------------------读完毕----------------------------
88
89 //-----------------------------显示函数-----------------------------
90 ds1302_display(uchar *display)
91 {
92 1 display_a_string(0,"20");
93 1 display_a_char(0x02,(display[6]/10)|0x30);//year
94 1 display_a_char(0x03,(display[6]%10)|0x30);
95 1 display_a_char(0x04,'-');
96 1 display_a_char(0x05,(display[4]/10)|0x30);//mon
97 1 display_a_char(0x06,(display[4]%10)|0x30);
98 1 display_a_char(0x07,'-');
99 1 display_a_char(0x08,(display[3]/10)|0x30);//date
100 1 display_a_char(0x09,(display[3]%10)|0x30);
101 1
102 1 display_a_char(0x0d,(display[5]/10)|0x30);//day
103 1 display_a_char(0x0e,(display[5]%10)|0x30);
104 1
105 1 display_a_char(0x10,(display[2]/10)+0x30);//hr
106 1 display_a_char(0x11,(display[2]%10)+0x30);
107 1 display_a_char(0x12,':');
108 1 display_a_char(0x13,(display[1]/10)+0x30);//min
109 1 display_a_char(0x14,(display[1]%10)+0x30);
110 1 display_a_char(0x15,':');
111 1 display_a_char(0x16,(display[0]/10)+0x30);//sec
112 1 display_a_char(0x17,(display[0]%10)+0x30);
113 1 }
114 //-----------------------------显示完毕-----------------------------
115 main()
116 {uchar i,position;
117 1 uchar begin[7]={0x00,0x08,0x08,0x26,0x07,0x02,0x08}; //赋初值
C51 COMPILER V6.02 譥动_涞鏒S1302 03/21/2008 01:38:36 PAGE 3
118 1 lcd_init(); //液晶初始化
119 1 //ds1302_write_command(0x80,0x80); //停止时钟震荡器 32.768M
120 1 //ds1302_write_command(0x84,0x0*); //24小时计时制;上午AM选择;
121 1 //*号表示和前面一位共5位数构成0-23小时初值
122 1 ds1302_write_command(0x90,0xa4); //涓流充电打开 TCS=1010;DS=01;RS=00;
123 1 /* ds1302_write_command(0x8e,0x00); //关闭写保护
124 1 position=0x80;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -