📄 lumin555.lst
字号:
C51 COMPILER V6.12 LUMIN555 09/11/2005 14:24:59 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE LUMIN555
OBJECT MODULE PLACED IN E:\C51PRJ\LUMINLED\LUMIN555.OBJ
COMPILER INVOKED BY: d:\keil\c51\BIN\C51.EXE E:\C51PRJ\LUMINLED\LUMIN555.C DB SB OE
stmt level source
1 /****************************************************************************/
2 /* */
3 /* Copyright (c) 2005, 老树工作室 */
4 /* All rights reserved. */
5 /* */
6 /* http://www.saintone.net Email:hxm0902@163.com */
7 /* QQ:112431149 Tel:010-62966630 */
8 /* */
9 /****************************************************************************/
10 /****************************************************************************/
11 /* 文件名:lumin555.c */
12 /* 版 本:Version 1.0 */
13 /* 描 述:利用光敏电阻与tlc555检测光强的代码 */
14 /* */
15 /* 作 者:spot */
16 /* 函 数: */
17 /* time0_over_int */
18 /* ext1_int_proc */
19 /* system_init */
20 /* get_lumin */
21 /* */
22 /* 历史记录: */
23 /* spot 2005-06-25 Creat Inital version. (Version 1.0) */
24 /****************************************************************************/
25
26 #include <reg52.h>
27 #include <absacc.h>
28 #include <intrins.h>
29 #include "../includes/types.h"
30
31 /* 函数声明 */
32 void time0_over_int(void); /* 定时器0中断服务程序 ,使用第1组寄存器 */
33 void ext1_int_proc(void); /* 外部中断1中断服务程序,使用第2组寄存器 */
34 void system_init(void); /* 系统上电初始化 */
35 u_char get_lumin(u_int fhz);/* 计算当前光强 */
36 extern void load_number(u_char number, bit dp);
37 extern void send_latch_clock(void);
38 extern void clear_led(void);
39 /* 声明结束 */
40
41 u_int fhz_tlc555; /* tlc555输出频率 */
42 u_char timer_count; /* 定时计数 */
43 bit timer_int; /* 定时标志 */
44
45 /* 定时器0中断服务程序 ,使用第1组寄存器 */
46 void time0_over_int(void) interrupt 1 using 1
47 {
48 1 TF0=0;
49 1 timer_int=1;
50 1 TH0 = -(46080 / 256);
51 1 TL0 = -(46080 % 256);
52 1 }
53
54 /* 外部中断1中断服务程序,使用第2组寄存器 */
55 void ext1_int_proc(void) interrupt 2 using 2
C51 COMPILER V6.12 LUMIN555 09/11/2005 14:24:59 PAGE 2
56 {
57 1 fhz_tlc555++;
58 1 }
59
60 /* 系统上电初始化 */
61 void system_init(void)
62 {
63 1 EA = 0;
64 1 timer_int = 0;
65 1 timer_count = 0;
66 1
67 1 TMOD = 0x01; /*定时器0工作于方式1*/
68 1 TCON = 0x04; /*外部中断下降沿触发*/
69 1 TH0 = -(46080 / 256); /*定时50毫秒*/
70 1 TL0 = -(46080 % 256);
71 1 PT0 = 1; /*定时器0高优先级*/
72 1 TR0 = 1; /*定时器0启动计数*/
73 1 IE = 0x86; /*定时器0,外部中断1,CPU开中断*/
74 1 }
75
76 /* 计算当前光强 */
77 u_char get_lumin(u_int fhz)
78 {
79 1 u_char lumin = 0;
80 1
81 1 if (fhz <= 2000)/* 光强为0 */
82 1 {
83 2 return 0;
84 2 }
85 1 else if ( (fhz > 2000) && (fhz <= 4770) )/* 光强为0~10 */
86 1 {
87 2 lumin = fhz / 277 - 7.2;
88 2 return lumin;
89 2 }
90 1 else if ( (fhz > 4770) && (fhz <= 5400) )/* 光强为10~20 */
91 1 {
92 2 lumin = fhz / 63 - 65.7;
93 2 return lumin;
94 2 }
95 1 else if ( (fhz > 5400) && (fhz <= 8200) )/* 光强为20~30 */
96 1 {
97 2 lumin = fhz / 280 + 0.7;
98 2 return lumin;
99 2 }
100 1 else if ( (fhz > 8200) && (fhz <= 9600) )/* 光强为30~40 */
101 1 {
102 2 lumin = fhz / 140 - 28.6;
103 2 return lumin;
104 2 }
105 1 else if ( (fhz > 9600) && (fhz <= 10100) )/* 光强为40~50 */
106 1 {
107 2 lumin = fhz / 50 - 152;
108 2 return lumin;
109 2 }
110 1 else if ( (fhz > 10100) && (fhz <= 12100) )/* 光强为50~60 */
111 1 {
112 2 lumin = fhz / 200;
113 2 return lumin;
114 2 }
115 1 else if ( (fhz > 12100) && (fhz <= 12900) )/* 光强为60~100 */
116 1 {
117 2 lumin = fhz / 20 - 546;
C51 COMPILER V6.12 LUMIN555 09/11/2005 14:24:59 PAGE 3
118 2 return lumin;
119 2 }
120 1 else if (fhz > 12900)
121 1 {
122 2 lumin = 99;
123 2 return lumin;
124 2 }
125 1 }
126
127 /* 在数码管上显示当前光强 */
128 void display_lumin(u_int current_lumin)
129 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -