📄 clk.lst
字号:
C51 COMPILER V7.07 CLK 05/30/2006 18:51:26 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE CLK
OBJECT MODULE PLACED IN clk.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE clk.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2
3 #define IIC_WRITE 0xa0 //24C04 EEPROM 写命令和读命令
4 #define IIC_READ 0xa1
5
6 sbit P10=P1^0;
7 sbit P11=P1^1;
8 sbit P12=P1^2;
9 sbit P13=P1^3;
10 sbit P14=P1^4;
11 sbit P15=P1^5;
12
13 sbit SCL=P1^6;
14 sbit SDA=P1^7;
15
16 sbit key0=P0^0;
17 sbit key1=P0^1;
18 sbit key2=P0^2;
19 sbit key3=P0^3;
20 sbit key4=P0^4;
21
22 unsigned char led_mask=0xff,mask_temp,led_num=0;
23 //led_mask 用低六位作led标志位//led_num 闪烁间隔的中断次数
24 unsigned char key0_mark=0,key1_mark=0,key2_mark=0,key3_mark=0; //每个按键的标识
25 unsigned int key0_count=0,key1_count=0,key2_count=0,key3_count=0; //每键按下 间隔的中断数
26 unsigned int temp_count0=0,music_count=0;
27
28 bit ph=1,flash=0,clk_begin=0,clk_off=0,agenda_begin=0;
29 bit wr_mark=0,clk_save=0;
30
31 unsigned char error=0;
32
33 unsigned int n=0;
34 unsigned char sec=0,min=0,h=0,year=06,mon=05,day=24;
35 unsigned char idata led=0,led_buf[6],buf[6];
36 unsigned char idata clk1_h=12,clk1_m=00,clk1_num=1,clk1_music=1, //闹钟和议程
37 clk2_h=24,clk2_m=30,clk2_num=2,clk2_music=2,
38 agenda_year=06,agenda_mon=01,agenda_day=0,agenda_h=8,agenda_num=3;
39 unsigned char music=0;
40
41 code unsigned char led_map[]={0x3F,0x06,0x5B,0x4F,0x66,
42 0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x73 };
43 code unsigned char mon_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //闰年与非闰年
44 code unsigned char mon_day1[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
45 //延时,主要用于IIC程序
46 void delay(unsigned int n)
47 {
48 1 unsigned int i;
49 1 for (i=n;i>0;i--) {}
50 1 }
51
52 time0() interrupt 1 using 0
53 { //T0计时器中断程序 //对时分秒针计数
54 1 n++;
55 1 if(n>=5002) //5000次为1秒,5002为矫误差
C51 COMPILER V7.07 CLK 05/30/2006 18:51:26 PAGE 2
56 1 {
57 2 sec++;
58 2 n=0;
59 2 }
60 1 if(sec>=60)
61 1 {
62 2 min++;
63 2 sec=0;
64 2 clk_begin=0; //闹铃最长1 分钟
65 2 clk_off=0;
66 2 wr_mark=1;
67 2 }
68 1
69 1 if(min>=60)
70 1 {
71 2 h++;
72 2 min=0;
73 2 agenda_begin=0; //隔一小时查agenda;
74 2 }
75 1 if(h>=24)
76 1 {
77 2 h=0;
78 2 day++;
79 2 if(year%4==0)
80 2 {
81 3 if(day>mon_day1[mon])
82 3 {
83 4 day=1;
84 4 mon++;
85 4 if(mon>12)
86 4 {
87 5 mon=1;
88 5 year++;
89 5 }
90 4 }
91 3 }
92 2 else if (day>mon_day[mon])
93 2 {
94 3 day=1;
95 3 mon++;
96 3 if(mon>12)
97 3 {
98 4 mon=1;
99 4 year++;
100 4 }
101 3 }
102 2 }
103 1 }
104
105 t1display() interrupt 3 using 1 //显示数码管
106 {
107 1
108 1 TH1=0xf0; // 1/24显示 4ms中断
109 1 TL1=0X5f;
110 1
111 1 if((key3==0)&&(key0_mark!=0)&&(key0_mark!=1))
112 1 {
113 2 P2=led_buf[led]|0x80;
114 2 }
115 1 else P2=led_buf[led];
116 1 led_num++;
117 1
C51 COMPILER V7.07 CLK 05/30/2006 18:51:26 PAGE 3
118 1 switch (led)
119 1 {
120 2 case 0:
121 2 P15=0;
122 2 P10=1;
123 2 break;
124 2 case 1:
125 2 P10=0;
126 2 P11=1;
127 2 break;
128 2 case 2:
129 2 P11=0;
130 2 P12=1;
131 2 break;
132 2 case 3:
133 2 P12=0;
134 2 P13=1;
135 2 break;
136 2 case 4:
137 2 P13=0;
138 2 P14=1;
139 2 break;
140 2 case 5:
141 2 P14=0;
142 2 P15=1;
143 2 break;
144 2 default:
145 2 break;
146 2 }
147 1
148 1
149 1 if(led_num<=125&&flash) //闪烁once each 1s
150 1 P1=P1&led_mask;
151 1 if(led_num>125)
152 1 {
153 2 led_num=0;
154 2 flash=~flash;
155 2 }
156 1 //-----------------------------------查询闹钟
157 1 if(clk1_h==h&&clk1_m==min&&clk_off==0)
158 1 clk_begin=1;
159 1
160 1 if(clk2_h==h&&clk2_m==min&&clk_off==0)
161 1 clk_begin=1;
162 1
163 1 if(agenda_year==year&&agenda_mon==mon&&agenda_day==day&&agenda_h==h&&agenda_begin==0&&clk_off==0) //隔一
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -