📄 task.lst
字号:
C51 COMPILER V8.08 TASK 11/20/2012 17:36:10 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE TASK
OBJECT MODULE PLACED IN task.OBJ
COMPILER INVOKED BY: D:\Program Files\keil_51\C51\BIN\C51.EXE task.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "NEW_8051.H"
2 #include"task.h"
3 #include <intrins.h>
4 #include"sbit.h"
5 //#include " uart.h"
6 /*****************************************************
7 4字LED点阵屏+DS1302万年历电子钟 C 程序
8
9 *******************************************************
10
11 DS1302 接线图
12
13 Vcc2 CLK I/O /RST
14
15 | | | |
16 -------------------
17 | 8 7 6 5 |
18 | DS1302 |
19 | |
20 | 1 2 3 4 |
21 -------------------
22 | | | |
23 VCC1 GND
24
25 1 脚接+5V 2,3脚32768HZ晶振 4脚接地 5脚接S51的P02 6脚接S51的P01 7接S51的P00
26 8脚接后备电源,可以接老计算机主板上的3.6V电池,也可以通过二级管隔离接一个大容量电解电容
27 电压在2.5V以上即可维持
28
29
30 595连级输出数据,138行驱动。*/
31
32 uchar Move; //时间温度变量
33 uchar Speed;
34 uchar Flicker;
35 uchar line;
36 uint zimuo;
37 uchar ucLastSec;
38 bit c_moon;
39 bit ri;
40 bit r;
41 bit zz=0;
42 bit rr;
43 bit nn;
44 bit w;
45 bit Can=1;
46 /*****不影响其他端口的扫描*************************/
47 void scan(unsigned char Value)
48 {switch(Value)
49 1 {case 15: scan0;break;
50 2 case 0: scan1;break;
51 2 case 1: scan2;break;
52 2 case 2: scan3;break;
53 2 case 3: scan4;break;
54 2 case 4: scan5;break;
55 2 case 5: scan6;break;
C51 COMPILER V8.08 TASK 11/20/2012 17:36:10 PAGE 2
56 2 case 6: scan7;break;
57 2 case 7: scan8;break;
58 2 case 8: scan9;break;
59 2 case 9:scan10;break;
60 2 case 10:scan11;break;
61 2 case 11:scan12;break;
62 2 case 12:scan13;break;
63 2 case 13:scan14;break;
64 2 case 14:scan15;break;
65 2 default:break;
66 2 }
67 1 }
68 void start(void)
69 {
70 1 Move=0;
71 1 // E=0; //595使能
72 1 zimuo=0;
73 1 //IP=0x04; //设置优先级 外部中断1为优先级
74 1 TMOD=0x21; //定时器1 0
75 1 TH1=0x00; //定时50us 晶振18.432M 定时器1方式1 16位模式初始化
76 1 TL1=0x00;
77 1 ET1=1;
78 1 //TR1=1;
79 1 TH0 = 0x92; //18.432M 18.2ms
80 1 TL0 = 0x0CD;
81 1 ET0=1;
82 1 TR0=1;
83 1 //外部中断
84 1 IT0=1; //下降沿触发中断
85 1 EX0=1; //开外中断1
86 1 // RCAP2H = 0x7D;
87 1 // RCAP2L = 0x0CB;
88 1 // ET2 = 1;
89 1 // TR2=1;
90 1 CMOD = 0x80;
91 1 CL = 0;
92 1 CH = 0;
93 1 CCON = 0x00; //清中断标志
94 1 CCAPM0 = 0x49;
95 1 CCAP0H = 0x0E2;
96 1 CCAP0L = 0x00;
97 1 CCAPM0 = 0x49; //设置PCA0为16位定时器,允许PCA模块0中断
98 1 EA=1;
99 1 ri=1;
100 1 r=1;
101 1 zz=0;
102 1 rr=1;
103 1 // P1M0=0X1C;
104 1 // P1M1=0X00;
105 1 //P3M0=0X18;
106 1 //P3M0=0X00;
107 1 }
108 /*主函数*/
109 void main()
110 {
111 1 start();
112 1 while(1) //重复(无限)循环显示
113 1 {
114 2 if(irokk==1)
115 2 {
116 3 Ircordpro();
117 3 irokk=0;
C51 COMPILER V8.08 TASK 11/20/2012 17:36:10 PAGE 3
118 3 }
119 2
120 2 if((resget==0)||(IRcord[0]==0x4a))
121 2 {
122 3 DelayMs();
123 3 if((resget==0)||(IRcord[0]==0x4a))
124 3 {
125 4 Set1302(starts_time); //初始化
126 4 W1302(0x8e,0x00); //控制命令,WP=0,写操作
127 4 W1302(0x90,0xa5); //打开充电二级管 一个二级管串联一个2K电阻
128 4 IRcord[0]=0x00;
129 4 }
130 3 }
131 2 /************************/
132 2 du1302(); //读取 秒 分 时 日 月 星期 年
133 2 if((Hour==0)&&(Cent==0)&&(Sec==48)&&(Can==1)&&( AddTime ))
134 2 {
135 3 Sec=Sec/16*10+Sec%16;
136 3 AddTime=AddTime/16*10+AddTime%16;
137 3 if( !UpdateMode )
138 3 {
139 4 AddTime=AddTime+Sec;
140 4 }
141 3 else
142 3 {
143 4 AddTime=Sec-AddTime;
144 4 Can=0;
145 4 }
146 3 W1302(0x8e,0x00);
147 3 W1302(0x80,AddTime/10*16+AddTime%10);
148 3 W1302(0x8e,0x80);
149 3 }
150 2
151 2 if((Hour==0)&&(Cent==1))
152 2 {
153 3 Can=1;
154 3 }
155 2 /****************************/
156 2 if(Sec!=ucLastSec)
157 2 {
158 3 ucLastSec=Sec;
159 3 w=~w;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -