📄 luminometer.lst
字号:
C51 COMPILER V7.20 LUMINOMETER 06/15/2008 00:11:55 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE LUMINOMETER
OBJECT MODULE PLACED IN luminometer.OBJ
COMPILER INVOKED BY: D:\Program Files\KeilC\C51\BIN\C51.EXE luminometer.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <sst89x5x4.h>
2 #include <intrins.h>
3
4 sbit clk=P1^0; //AD时钟
5 sbit dout=P1^1; //AD数据
6 sbit csAd=P1^2; //AD片选
7 sbit csSeg=P1^3; //段码锁存
8 sbit csDig=P1^4; //位码锁存
9 sbit beep=P2^1; //蜂鸣器
10 sbit P22=P2^2; //测量
11 sbit P23=P2^3; //循环查看
12
13 #define STOP 0;
14 #define one() (lex[measureTime+lookUpTime]%10) ;
15 #define ten() ((lex[measureTime+lookUpTime]%100)/10) ;
16 #define hundred() ((lex[measureTime+lookUpTime]%1000)/100) ;
17 #define thousand() (lex[measureTime+lookUpTime]/1000) ;
18
19 //段码表
20 unsigned char code segCode[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,// 0--9
21 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,//带小数点0--9
22 0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; // A, b, C, d, E, F, 消隐
23 //位码表
24 unsigned char code csCode[] = {0x70,0xb0,0xd0,0xe0};
25
26
27 static unsigned char voltageTemp[5];
28 static unsigned char measureTime;
29 static char lookUpTime;
30 static unsigned char number[4];
31 static unsigned char digit;
32 static unsigned int lex[5];
33
34 static bit start; // 开始测量
35 static bit keyCurrent; //当前按键判断,为1表示邮件按下
36 static bit keyBefore; //前一次是否有键按下
37
38 void initSystem();
39 void display(unsigned char seg,unsigned char cs);
40 void adConvert();
41
42
43 void main()
44 {
45 1 initSystem();
46 1
47 1 TR0=1; //开启定时器,系统开始工作
48 1 TR1=1;
49 1
50 1 while(1)
51 1 {
52 2 do{}while(!start); //开始键按下
53 2 start=STOP;
54 2 TR0=0; //关中断以便开始AD采样
55 2 TR1=0;
C51 COMPILER V7.20 LUMINOMETER 06/15/2008 00:11:55 PAGE 2
56 2 adConvert();
57 2 number[3]=one();
58 2 number[2]=ten();
59 2 number[1]=hundred();
60 2 number[0]=thousand();
61 2 TR0=1;
62 2 TR1=1;
63 2 }
64 1 }
65
66 /**************************系统初始化***********************/
67
68 void initSystem()
69 {
70 1 start=1;
71 1 beep=0;
72 1 measureTime=0;
73 1 lookUpTime=0;
74 1 keyCurrent=0;
75 1 keyBefore=0;
76 1 digit=0;
77 1 TMOD=0X11; //T0工作在定时模式
78 1 TH0=0Xf5; //TO定时3ms做数码管扫描
79 1 TL0=0X33;
80 1 TH1=0XB7; //T1定时20ms做键盘扫描
81 1 TL1=0XFF;
82 1 IP=0X08; //T1优先级高
83 1 EA=1;
84 1 ET0=1;
85 1 ET1=1;
86 1 }
87
88 /*****************定时器T0做数码管扫描***********************/
89
90 void processT0()interrupt 1 using 0
91 {
92 1 if(digit==4) digit=0;
93 1 display(number[digit],digit);
94 1 digit++;
95 1 TH0=0Xf5; //TO定时3ms,扫描频率为12ms
96 1 TL0=0X33;
97 1 return;
98 1 }
99
100 /*******************定时器T1做键盘扫描*************************/
101
102 void processT1()interrupt 3 using 1
103 {
104 1 keyBefore=keyCurrent;
105 1 if(P22==0||P23==0)
106 1 keyCurrent=1;
107 1 else
108 1 keyCurrent=0;
109 1 if(keyCurrent==1&&keyBefore==0)
110 1 {
111 2 if(!P22)
112 2 {
113 3 start =1;
114 3 measureTime++;
115 3 if(measureTime>4) measureTime=0;
116 3 }
117 2 if(!P23)
C51 COMPILER V7.20 LUMINOMETER 06/15/2008 00:11:55 PAGE 3
118 2 {
119 3 lookUpTime--;
120 3 if((measureTime+lookUpTime)<0) lookUpTime=0;
121 3 }
122 2 }
123 1 /*
124 1 number[3]=one();
125 1 number[2]=ten();
126 1 number[1]=hundred();
127 1 number[0]=thousand(); */
128 1 TH1=0XB7; //T1定时20ms做键盘扫描
129 1 TL1=0XFF;
130 1 return;
131 1 }
132
133 /************************************************************
134 函数名:数码管显示
135 入口参数:seg 欲显示的数,如段码表所示,1~26
136 cs 欲显示的位,0~3
137
138 ************************************************************/
139
140 void display(unsigned char seg,unsigned char cs)
141 {
142 1 if(seg>26) seg=26;
143 1 P0=segCode[seg]; //将数据放在P0口
144 1 _nop_();
145 1 _nop_();
146 1 csSeg=1;
147 1 _nop_();
148 1 _nop_();
149 1 csSeg=0; //锁存数据
150 1 P2&=0x0f; //屏蔽P2口低四位
151 1 P2|=csCode[cs]; //将地址放在P2口高四位
152 1 _nop_();
153 1 _nop_();
154 1 csDig=1;
155 1 _nop_();
156 1 _nop_();
157 1 csDig=0;
158 1 }
159
160 /*****************AD转换**********************************/
161
162 void adConvert()
163 {
164 1 char i;
165 1 csAd=0;
166 1 clk=0;
167 1 for(i=7;i>=0;i--) //8个时钟读一个数据,从高位读起
168 1 {
169 2 clk=1;
170 2 if(dout) voltageTemp[measureTime]|=(1<<i);
171 2 clk=0;
172 2 }
173 1 csAd=1;
174 1 lex[measureTime]=voltageTemp[measureTime] * 5.0/256; //求光照度
175 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 442 ----
C51 COMPILER V7.20 LUMINOMETER 06/15/2008 00:11:55 PAGE 4
CONSTANT SIZE = 31 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 22 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -