📄 sushe_lamp.lst
字号:
C51 COMPILER V7.06 SUSHE_LAMP 01/02/2009 13:18:11 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SUSHE_LAMP
OBJECT MODULE PLACED IN sushe_lamp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sushe_lamp.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg52.h>
2 #include<intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 sbit DQ=P3^0; //温度传感的DQ脚
6 sbit lcden=P3^1; //LCD 的E脚
7 sbit lcdrs=P3^2; //LCD的RS脚
8 sbit cro_l=P3^3; //光控中断控制脚
9 sbit cro_h=P3^4; //人体红外中断控制脚
10 sbit lamp=P3^5;
11 sbit wr=P3^6;
12 sbit rd=P3^7;
13 sbit cro_t=P1^7; //时间控制中断脚
14 bit flag_init=0;
15 uchar code ascII[]={
16 0x30,0x31,0x32,0x33,
17 0x34,0x35,0x36,0x37,
18 0x38,0x39}; //0到9的ASCII码
19 uchar code tbweek[][9]={
20 {0x4d,0x6f,0x6e,0x64,0x61,0x79},
21 {0x54,0x75,0x65,0x73,0x64,0x61,0x79},
22 {0x57,0x65,0x64,0x6e,0x65,0x73,0x64,0x61,0x79},
23 {0x54,0x68,0x75,0x72,0x73,0x64,0x61,0x79},
24 {0x46,0x72,0x69,0x64,0x61,0x79},
25 {0x53,0x64,0x74,0x75,0x72,0x64,0x61,0x79},
26 {0x53,0x75,0x6e,0x64,0x61,0x79}}; //星期一到星期天在液晶中显示用的代码
27 uint tens,units,decile,tmp,un_guang;
28 uchar time,sec,min,hour,week;
29 float tmprt;
30 void time_init();
31 void lcd_init();
32 void ADC_init();
33 void write_com(uchar com);
34 void write_data(uchar date);
35 void DS18B20_init();
36 void Readtemperature();
37 void Writeonechar(uchar dat);
38 uchar Readonechar();
39 void displaytt(uchar sec1,uchar min1,uchar hour1);
40 void displaytemp();
41 void displaywe();
42 void keyscan();
43 void delay(uint z);
44 void Delay_uS(uint tt);
45
46 void main()
47 {
48 1 lcd_init(); //液晶初始化
49 1 time_init(); //定时器初始化
50 1 DS18B20_init(); //温度传感器初始化
51 1 hour=12;
52 1 while(1)
53 1 {
54 2 Readtemperature(); //读DS18B20检测到的温度
55 2 displaytt(sec,min,hour);
C51 COMPILER V7.06 SUSHE_LAMP 01/02/2009 13:18:11 PAGE 2
56 2 keyscan();
57 2 displaytemp();
58 2 displaywe();
59 2 ADC_init();
60 2 if(un_guang>52) //(假设)夜晚光强少于150lx
61 2 cro_l=1;
62 2 else //白天光强大于150lx,AD转换后数少于52,给中断口一个电平,使进入灯灭函数
63 2 cro_l=0;
64 2 if(cro_h==1)
65 2 lamp=0;
66 2 else //人体红外检测到有低电平(没人时),控制灯灭
67 2 lamp=1;
68 2 if(hour==8) //早上八点让被睡眠开关置零的P1^7口恢复高电平,传感器开始正常工作
69 2 cro_t=1;
70 2 delay(21);
71 2 while(time>=16) //用大于等于代替等于才能进去
72 2 {
73 3 time=0;
74 3 sec++;
75 3 while(sec==60)
76 3 {
77 4 sec=0;
78 4 min++;
79 4 while(min==60)
80 4 {
81 5 min=0;
82 5 hour++;
83 5 while(hour==24)
84 5 {
85 6 sec=0;
86 6 min=0;
87 6 hour=0;
88 6 week++;
89 6 while(week==7)
90 6 week=0;
91 6 }
92 5
93 5
94 5 }
95 4
96 4 }
97 3
98 3 }
99 2
100 2 }
101 1
102 1 }
103 void lcd_init()
104 {
105 1 lcden=0; //写状态,使能为高脉冲
106 1 write_com(0x38); //显示模式设置
107 1 write_com(0x01); //显示清屏
108 1 write_com(0x0c); //开显示,光标不显示
109 1 write_com(0x06); //光标移动设置
110 1 write_com(0x80+0x00); //设置数据地址指针
111 1 }
112 void write_com(uchar com) //往LCD写指令
113 {
114 1 lcdrs=0;
115 1 P2=com;
116 1 delay(2);
117 1 lcden=1;
C51 COMPILER V7.06 SUSHE_LAMP 01/02/2009 13:18:11 PAGE 3
118 1 delay(2);
119 1 lcden=0;
120 1 }
121
122 void write_data(uchar date) //往LCD写数据
123 {
124 1 lcdrs=1;
125 1 P2=date;
126 1 delay(2);
127 1 lcden=1;
128 1 delay(2);
129 1 lcden=0;
130 1 }
131 void displaytt(uchar sec1,uchar min1,uchar hour1) //LCD时间显示
132 {
133 1 uchar s1,s2,m1,m2,h1,h2;
134 1 write_com(0x80+0x00);
135 1 s2=sec1/10;
136 1 s1=sec1%10;
137 1 m2=min1/10;
138 1 m1=min1%10;
139 1 h2=hour1/10;
140 1 h1=hour1%10;
141 1 s1=ascII[s1];
142 1 s2=ascII[s2];
143 1 m1=ascII[m1];
144 1 m2=ascII[m2];
145 1 h1=ascII[h1];
146 1 h2=ascII[h2];
147 1 write_data(h2);
148 1 delay(5);
149 1 write_data(h1);
150 1 delay(5);
151 1 write_data(0x3a);
152 1 delay(5);
153 1 write_data(m2);
154 1 delay(5);
155 1 write_data(m1);
156 1 delay(5);
157 1 write_data(0x3a);
158 1 delay(5);
159 1 write_data(s2);
160 1 delay(5);
161 1 write_data(s1);
162 1 delay(5);
163 1
164 1
165 1 }
166 void displaywe() //显示星期
167 {
168 1 uchar j,we;
169 1 write_com(0x80+0x40);
170 1 we=tbweek[week][0];
171 1 for(j=0;j<=8;j++)
172 1 {
173 2 we=tbweek[week][j];
174 2 write_data(we);
175 2 delay(2);
176 2 }
177 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -