📄 fyd.lst
字号:
C51 COMPILER V7.50 FYD 08/01/2008 14:37:53 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE FYD
OBJECT MODULE PLACED IN FYD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE FYD.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include <intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5
6 sbit CS = P2^0;//指令数据控制端
7 sbit SID = P2^1;//R/W读写控制端
8 sbit CLK = P2^2;//使能端
9
10 //sbit DQ = P3^7;//DS18B20数据总线
11 sbit DQ = P3^0;//DS18B20数据总线
12 sbit buzzer= P1^5;//报警器接口
13 sbit set = P2^3;//时间调整键
14 sbit ret = P2^4;//定时按键
15 sbit add = P2^5;//加一键
16 sbit dec = P2^6;//减一键
17 sbit led1 = P1^2;//指示灯
18
19 uchar ms50=0,second=0,minite=0,hour=12;//实际时间存放变量
20 uchar hh =0,ff=0,KT=0;//设定时间变量
21 uint tvalue;//温度值
22 bit tflag;//温度正负标志
23 uint n=0;
24 uchar T[8]={0x3a,0,0,0,0,0x2e,0,0x43};//温度存放缓冲区
25 uchar sheding[8]={0x3a,0,0,0x3a,0,0,0x20,0x20};//设定时间存放数组
26 /*************************************************************************************************/
27
28 /*****************************初始化子程序******************************/
29 uchar code huanyinghuamian[]={"欢迎来到诚信院@"};
30 uchar code word[] ={"时钟温度显示系统"};
31 uchar code guanggao[] ={"嵌入式爱好者协会"};
32 uchar code tegong[] ={"嵌协特工队制作!!"};
33 //uchar code huanyinghuamian2[]={"Welcome to here!"};
34 //uchar code huanyinghuamian3[]={"We'll be friend!"};
35 /***********************************************************************/
36 uchar code numble[16]={"当前时间 "};
37 uchar code name[16] ={"当前温度 "};
38 //uchar code zhifu[]={"女人只能呵护与爱"};
39 uchar code zhifu[] ={"设定时间 "};
40 /************************温度测试模块***********************/
41 /***********ds18b20延迟子函数(晶振12MHz )*******/
42
43 /******************************ds1820程序***************************************/
44 void delay_18B20(unsigned int i)//延时1微秒
45 {
46 1 while(i--);
47 1 }
48
49
50 void ds1820rst()/*ds1820复位*/
51 { unsigned char x=0;
52 1 DQ = 1; //DQ复位
53 1 delay_18B20(4); //延时
54 1 DQ = 0; //DQ拉低
55 1 delay_18B20(100); //精确延时大于480us
C51 COMPILER V7.50 FYD 08/01/2008 14:37:53 PAGE 2
56 1 DQ = 1; //拉高
57 1 delay_18B20(40);
58 1 }
59
60
61 uchar ds1820rd()/*读数据*/
62 { unsigned char i=0;
63 1 unsigned char dat = 0;
64 1 for (i=8;i>0;i--)
65 1 { DQ = 0; //给脉冲信号
66 2 dat>>=1;
67 2 DQ = 1; //给脉冲信号
68 2 if(DQ)
69 2 dat|=0x80;
70 2 delay_18B20(10);
71 2 }
72 1 return(dat);
73 1 }
74
75
76 void ds1820wr(uchar wdata)/*写数据*/
77 {
78 1 unsigned char i=0;
79 1 for (i=8; i>0; i--)
80 1 { DQ = 0;
81 2 DQ = wdata&0x01;
82 2 delay_18B20(10);
83 2 DQ = 1;
84 2 wdata>>=1;
85 2 }
86 1 }
87
88
89
90 read_temp()/*读取温度值并转换*/
91 {
92 1 uchar a,b;
93 1 ds1820rst();
94 1 ds1820wr(0xcc);//*跳过读序列号*/
95 1 ds1820wr(0x44);//*启动温度转换*/
96 1 ds1820rst();
97 1 ds1820wr(0xcc);//*跳过读序列号*/
98 1 ds1820wr(0xbe);//*读取温度*/
99 1 a=ds1820rd();
100 1 b=ds1820rd();
101 1 tvalue=b;
102 1 tvalue<<=8;
103 1 tvalue=tvalue|a;
104 1 if(tvalue<0x0fff)
105 1 tflag=0;
106 1 else
107 1 {tvalue=~tvalue+1;
108 2 tflag=1;}
109 1
110 1 tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
111 1 return(tvalue);
112 1 }
113 /*****************************************************************/
114 /***************************液晶显示模块**************************/
115 /*****************************延时子程序**************************/
116 void delay( uint t )
117 {
C51 COMPILER V7.50 FYD 08/01/2008 14:37:53 PAGE 3
118 1 uint i;
119 1 while( t-- )
120 1 for(i=0;i<120;i++);
121 1 }
122
123 /*****************************写液晶子程序******************************/
124 /************************************************************************
125 说明:word:要写的内容 dat:1为数据 0为指令
126 *************************************************************************/
127 void Writelcd(uchar word,uchar dat)
128 {
129 1 uchar lcddat[3];
130 1 uchar i,j,k;
131 1 lcddat[0] = ( 0xf8+(dat<<1) );//第一个字节
132 1 lcddat[1] = ( word&0xf0 ) ; //第二个字节 内容的高四位+0000
133 1 lcddat[2] = ( (word<<4)&0xf0 ) ;//第三个字节 内容的第四位+0000
134 1 CS = 0;
135 1 CS = 1;
136 1 CLK = 0;
137 1 for(i=0;i<3;i++)
138 1 {
139 2 j = lcddat[i];
140 2 for(k=0;k<8;k++)
141 2 {
142 3 if( (j<<k)&0x80 )
143 3 SID = 1;
144 3 else
145 3 SID = 0;
146 3 /**时钟下降沿写入数据**/
147 3 CLK = 1;
148 3 CLK = 0;
149 3 }
150 2 }
151 1 }
152
153 void Serial_int(void)
154 {
155 1 CS =1;
156 1 SID =0;
157 1 CLK =0;
158 1 Writelcd( 0x30,0 );//功能设置,一次送8位数据,基本指令集
159 1 // delay( 50 );
160 1 Writelcd( 0x30,0 );//功能设置,一次送8位数据,基本指令集
161 1 // delay( 40 );
162 1 Writelcd( 0x0c,0 );//0000,1100 整体显示,游标off,游标位置off
163 1 // delay( 50 );
164 1 Writelcd( 0x01,0 );//0000,0001 清DDRAM
165 1 // delay( 10000 );
166 1 Writelcd( 0x02,0 );//0000,0010 DDRAM地址归位
167 1 // delay( 50 );
168 1
169 1 // delay( 50 );
170 1 Writelcd( 0x80,0 );//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC//
171 1 // delay( 150 );
172 1 Writelcd( 0x06,0 );
173 1 }
174
175 /***********************按键处理程序模块****************************/
176 void key_set()
177 {
178 1 if(set==0)
179 1 {
C51 COMPILER V7.50 FYD 08/01/2008 14:37:53 PAGE 4
180 2 delay(10);
181 2 if(set==0)
182 2 n++;
183 2 if(n>=6)
184 2 n=0;
185 2 }
186 1 while(set==0);
187 1 if((n>=1)&&(n<=5))
188 1 KT=1;
189 1 else
190 1 KT=0;
191 1 }
192
193
194 void key_ret()
195 {
196 1 if(ret==0)
197 1 {
198 2 hh=0;
199 2 ff=0;
200 2 //ss=0;
201 2 }
202 1 while(ret==0);
203 1 }
204
205 void key_add()
206 {
207 1 if(add==0)
208 1 {
209 2 delay(10);
210 2 switch(n)
211 2 {
212 3 //case 0:break;
213 3 case 1:hour++;if(hour>=24)hour=0;break;
214 3 case 2:minite++;if(minite>=60)minite=0;break;
215 3 case 3:second++;if(second>=60)second=0;break;
216 3 case 4:hh++;if(hh>=24)hh=0;break;
217 3 case 5:ff++;if(ff>=60)ff=0;break;
218 3 //case 6:ss++;if(ss>=60)ss=0;break;
219 3 default:break;
220 3 }
221 2 }
222 1 while(add==0);
223 1 }
224
225 void key_dec()
226 {
227 1 if(dec==0)
228 1 {
229 2 delay(10);
230 2 switch(n)
231 2 {
232 3 //case 0:break;
233 3 case 1:hour--; if(hour<=0) hour=23;break;
234 3 case 2:minite--;if(minite<=0)minite=59;break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -