📄 fff.lst
字号:
C51 COMPILER V7.06 FFF 05/01/2008 16:56:16 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE FFF
OBJECT MODULE PLACED IN fff.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE fff.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 /***************************lns主程序snl***************************/
3 #include <absacc.h> //包含头文件
4 #include <reg52.h> //包含头文件
5 /***************************数据类型定义***************************/
6 #define uchar unsigned char //数据类型定义
7 /*************************定义变量并初始化*************************/
8 uchar n=31; //定义月份天数变量并初始化
9 uchar ms=0; //定义毫秒变量并初始化
10 uchar h1=0,m1=0,s1=0; //定义计时时、分、秒变量并初始化
11 uchar h2=0,m2=1,s2=1; //定义定时时、分、秒变量并初始化
12 uchar year=7,month=9,day=8; //定义年、月、日变量并初始化
13 uchar wday=6; //定义星期变量并初始化
14 uchar *h=&h1,*m=&m1,*s=&s1; //定义显视位变量并初始化
15 uchar *p; //定义调节指针
16 uchar k1=0,k2=0,k3=0,k4=0,k5=0; //定义控制变量并初始化
17 uchar counter=0; //定义铃声节拍变量并初始化
18 uchar count=0; //定义铃声音符变量并初始化
19 sbit sound=P1^0; //定义铃声输出位
20 uchar a[8]={1,2,3,4,5,6,7}; //定义显视输出位数组并初始化
21 uchar code tt[12]={
22 0x3f,0x06,0x5b,0x4f,0x66,0x6d,
23 0x7d,0x07,0x7f,0x6f,0x40,0x00
24 }; //数码管显视代码
25 uchar code array[]={
26 0x18, 0x30, 0x1C, 0x10, 0x20, 0x40, 0x1C, 0x10,
27 0x18, 0x10, 0x20, 0x10, 0x1C, 0x10, 0x18, 0x40,
28 0x1C, 0x20, 0x20, 0x20, 0x1C, 0x20, 0x18, 0x20,
29 0x20, 0x80, 0xFF, 0x00, 0x20, 0x30, 0x1C, 0x10,
30 0x18, 0x20, 0x15, 0x20, 0x1C, 0x20, 0x20, 0x20,
31 0x26, 0x40, 0x20, 0x20, 0x2B, 0x20, 0x26, 0x20,
32 0x20, 0x20, 0x30, 0x80, 0xFF, 0x00, 0x20, 0x20,
33 0x1C, 0x10, 0x18, 0x10, 0x20, 0x20, 0x26, 0x20,
34 0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40, 0x20, 0x20,
35 0x1C, 0x10, 0x18, 0x10, 0x20, 0x20, 0x26, 0x20,
36 0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40, 0x20, 0x30,
37 0x1C, 0x10, 0x18, 0x20, 0x15, 0x20, 0x1C, 0x20,
38 0x20, 0x20, 0x26, 0x40, 0x20, 0x20, 0x2B, 0x20,
39 0x26, 0x20, 0x20, 0x20, 0x30, 0x80, 0x20, 0x30,
40 0x1C, 0x10, 0x20, 0x10, 0x1C, 0x10, 0x20, 0x20,
41 0x26, 0x20, 0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40,
42 0x20, 0x15, 0x1F, 0x05, 0x20, 0x10, 0x1C, 0x10,
43 0x20, 0x20, 0x26, 0x20, 0x2B, 0x20, 0x30, 0x20,
44 0x2B, 0x40, 0x20, 0x30, 0x1C, 0x10, 0x18, 0x20,
45 0x15, 0x20, 0x1C, 0x20, 0x20, 0x20, 0x26, 0x40,
46 0x20, 0x20, 0x2B, 0x20, 0x26, 0x20, 0x20, 0x20,
47 0x30, 0x30, 0x20, 0x30, 0x1C, 0x10, 0x18, 0x40,
48 0x1C, 0x20, 0x20, 0x20, 0x26, 0x40, 0x13, 0x60,
49 0x18, 0x20, 0x15, 0x40, 0x13, 0x40, 0x18, 0x80,
50 0x00, 0x00
51 }; //array[i]=0x00 代表歌曲演唱完毕
52 //array[i]=0xff 代表是休止符
53 /*******************************************************************
54 * 函数名称:leap()
55 * 功 能:计算二月份天数
C51 COMPILER V7.06 FFF 05/01/2008 16:56:16 PAGE 2
56 * 入口参数:year
57 * 出口参数:无
58 *******************************************************************/
59 uchar leap(uchar year) //判断是否闰年并返回二月份的天数
60 { //闰年返回29,平年返回28
61 1 year+=2000;
62 1 if(year%4==0)
63 1 {if(year%100==0)
64 2 {if(year%400==0)
65 3 return 29;
66 3 else return 28;
67 3 }
68 2 else return 29;
69 2 }
70 1 else return 28;
71 1 }
72 /*******************************************************************
73 * 函数名称:mon()
74 * 功 能:计算并返回每个月的天数
75 * 入口参数:month
76 * 出口参数:无
77 *******************************************************************/
78 uchar mon(uchar month) //计算并返回每个月的天数
79 {
80 1 switch(month)
81 1 {
82 2 case 1:
83 2 case 3:
84 2 case 5:
85 2 case 7:
86 2 case 8:
87 2 case 10:
88 2 case 12:return 31;break; //1,3,5,7,8,10,12月每月31天
89 2 case 4:
90 2 case 6:
91 2 case 9:
92 2 case 11:return 30;break; //4,6,9,11月每月30天
93 2 case 2: return leap(year);break;//返回二月份的天数
94 2 default:break;
95 2 }
96 1 }
97 /*******************************************************************
98 * 函数名称:music()
99 * 功 能:音乐节拍控制
100 * 入口参数:无
101 * 出口参数:无
102 *******************************************************************/
103 void music(void) //铃声音乐
104 {
105 1 counter++; //节拍次数计数
106 1 if(counter>=array[count+1]) //节拍次数判断
107 1 {
108 2 count+=2; //音符变换
109 2 counter=0; //清0节拍数
110 2 if(count>=192) //判断是否唱完一曲
111 2 count=0; //返回第一个音符
112 2 }
113 1 }
114 /*******************************************************************
115 * 函数名称:timer1()
116 * 功 能:音乐频率设置
117 * 入口参数:无
C51 COMPILER V7.06 FFF 05/01/2008 16:56:16 PAGE 3
118 * 出口参数:无
119 *******************************************************************/
120 void timer1(void)interrupt 1 using 1 //音调设置
121 {
122 1 sound=~sound; //铃声输出
123 1 TH0=(0xffff-30*array[count])>>8; //音频设置
124 1 TL0=(0xffff-30*array[count])&0xff;
125 1 }
126 /*******************************************************************
127 * 函数名称:timer3()
128 * 功 能:中断计时
129 * 入口参数:无
130 * 出口参数:无
131 *******************************************************************/
132 void timer3(void) interrupt 3 using 3 //计时中断
133 {
134 1 TH1=0xd8; //计数器初值重载
135 1 TL1=0xef; //定义单位节拍的延时大小为10ms
136 1
137 1 if(k5)music(); //调用闹铃音乐lns
138 1 else TR0=0; //达到所设闹铃时间长度关铃声
139 1
140 1 if(++ms==100) //计时一秒钟
141 1 {ms=0;
142 2 if(++s1==60) //计时一分钟
143 2 {s1=0;
144 3 if(++m1==60) //计时一小时
145 3 {m1=0;
146 4 if(++h1==24) //计时一天
147 4 {h1=0;
148 5
149 5 n=mon(month); //取每月的天数
150 5
151 5 if(++day>n) //计时一个月
152 5 {day=1;
153 6 if(++month>12) //计时一年
154 6 {month=1;
155 7 year++;
156 7 }
157 6 }
158 5 if(++wday>6) //星期计数
159 5 wday=0;
160 5 }
161 4 }
162 3 k5--; //闹铃时间长度倒记时
163 3 if(h1==h2&&m1==m2) //判断是否到定时时刻
164 3 {
165 4 TR0=1; //开铃声中断lns
166 4 k5=s2; //设置闹铃时间长度
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -