📄 hjmcu.lst
字号:
C51 COMPILER V7.00 HJMCU 06/06/2011 11:03:54 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE HJMCU
OBJECT MODULE PLACED IN HJMCU.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE HJMCU.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /**************************************************************************************************
2 *** 慧净电子1天入门、10天学会、1年精通单片机与C语言视频教程配套程序源码 ***
3 *** 实验板:HJ-1G HJ-3G 开发板 ***
4 *** MCU: STC89C52/AT89C52 部分C源码可以直接用于项目开发、欢迎复制共享、功德无量、没有版权 ***
5 *** 收集整理:慧净助学会员 部分原源来源网络,如有伤害到你的利润请来信,我们的免费助学会员会定期给你删除**
-*
6 *** 编译器:KEIL ***
7 *** 百度交流空间:http://hi.baidu.com/HJMCU WWW.HJMCU.COM ***
8 *** 论坛交流:http://bbs.hjmcu.com 欢迎来论坛一分钱不要下载配套的仿真电路 ***
9 *** 配套的硬件学习板网址:http://shop37031453.taobao.com/ ***
10 *** 日期:2008.8.8 ***
11 *** 目标:用C语言写程序就这么简单、慧争祝你1天入门、10天学会、1年精通单片机与C语言、找个好工作 ***
12 ***************************************************************************************************/
13 //DS18B20温度检测及其液晶显示
14 #include<reg51.h> //包含单片机寄存器的头文件
15 #include<intrins.h> //包含_nop_()函数定义的头文件
16 unsigned char code digit[10]={"0123456789"}; //定义字符数组显示数字
17 unsigned char code Str[]={"Test by DS18B20"}; //说明显示的是温度
18 unsigned char code Error[]={"Error!Check!"}; //说明没有检测到DS18B20
19 unsigned char code Temp[]={"Temp:"}; //说明显示的是温度
20 unsigned char code Cent[]={"Cent"}; //温度单位
21 sbit dula=P2^6
22 sbit wela=P2^7;
*** ERROR C141 IN LINE 22 OF HJMCU.C: syntax error near 'sbit', expected ';'
23 sbit JD=P0^6;
24 sbit FM=P2^3;
25 void ioin() //IO口继电器、数码管锁存函数
26 {
27 1 wela=1;
28 1 P0 = 1;
29 1 JD = 0;
30 1 wela=0;
31 1 dula=1;
32 1 P0=0;
33 1 dula=0;
34 1 }
35 /*******************************************************************************
36 以下是对液晶模块的操作程序
37 *******************************************************************************/
38 sbit RS=P3^5; //寄存器选择位,将RS位定义为P2.0引脚
39 sbit RW=P3^6; //读写选择位,将RW位定义为P2.1引脚
40 sbit E=P3^4; //使能信号位,将E位定义为P2.2引脚
41 sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚
42 /*****************************************************
43 函数功能:延时1ms
44 (3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
45 ***************************************************/
46 void delay1ms()
47 {
48 1 unsigned char i,j;
49 1 for(i=0;i<4;i++)
50 1 for(j=0;j<33;j++)
51 1 ;
52 1 }
53 /*****************************************************
C51 COMPILER V7.00 HJMCU 06/06/2011 11:03:54 PAGE 2
54 函数功能:延时若干毫秒
55 入口参数:n
56 ***************************************************/
57 void delaynms(unsigned char n)
58 {
59 1 unsigned char i;
60 1 for(i=0;i<n;i++)
61 1 delay1ms();
62 1 }
63 /*****************************************************
64 函数功能:判断液晶模块的忙碌状态
65 返回值:result。result=1,忙碌;result=0,不忙
66 ***************************************************/
67 bit BusyTest(void)
68 {
69 1 bit result;
70 1 RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态
71 1 RW=1;
72 1 E=1; //E=1,才允许读写
73 1 _nop_(); //空操作
74 1 _nop_();
75 1 _nop_();
76 1 _nop_(); //空操作四个机器周期,给硬件反应时间
77 1 result=BF; //将忙碌标志电平赋给result
78 1 E=0; //将E恢复低电平
79 1 return result;
80 1 }
81 /*****************************************************
82 函数功能:将模式设置指令或显示地址写入液晶模块
83 入口参数:dictate
84 ***************************************************/
85 void WriteInstruction (unsigned char dictate)
86 {
87 1 while(BusyTest()==1); //如果忙就等待
88 1 RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令
89 1 RW=0;
90 1 E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,
91 1 // 就是让E从0到1发生正跳变,所以应先置"0"
92 1 _nop_();
93 1 _nop_(); //空操作两个机器周期,给硬件反应时间
94 1 P0=dictate; //将数据送入P0口,即写入指令或地址
95 1 _nop_();
96 1 _nop_();
97 1 _nop_();
98 1 _nop_(); //空操作四个机器周期,给硬件反应时间
99 1 E=1; //E置高电平
100 1 _nop_();
101 1 _nop_();
102 1 _nop_();
103 1 _nop_(); //空操作四个机器周期,给硬件反应时间
104 1 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令
105 1 }
106 /*****************************************************
107 函数功能:指定字符显示的实际地址
108 入口参数:x
109 ***************************************************/
110 void WriteAddress(unsigned char x)
111 {
112 1 WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x"
113 1 }
114 /*****************************************************
115 函数功能:将数据(字符的标准ASCII码)写入液晶模块
C51 COMPILER V7.00 HJMCU 06/06/2011 11:03:54 PAGE 3
116 入口参数:y(为字符常量)
117 ***************************************************/
118 void WriteData(unsigned char y)
119 {
120 1 while(BusyTest()==1);
121 1 RS=1; //RS为高电平,RW为低电平时,可以写入数据
122 1 RW=0;
123 1 E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,
124 1 // 就是让E从0到1发生正跳变,所以应先置"0"
125 1 P0=y; //将数据送入P0口,即将数据写入液晶模块
126 1 _nop_();
127 1 _nop_();
128 1 _nop_();
129 1 _nop_(); //空操作四个机器周期,给硬件反应时间
130 1 E=1; //E置高电平
131 1 _nop_();
132 1 _nop_();
133 1 _nop_();
134 1 _nop_(); //空操作四个机器周期,给硬件反应时间
135 1 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令
136 1 }
137 /*****************************************************
138 函数功能:对LCD的显示模式进行初始化设置
139 ***************************************************/
140 void LcdInitiate(void)
141 {
142 1 delaynms(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间
143 1 WriteInstruction(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口
144 1 delaynms(5); //延时5ms ,给硬件一点反应时间
145 1 WriteInstruction(0x38);
146 1 delaynms(5); //延时5ms ,给硬件一点反应时间
147 1 WriteInstruction(0x38); //连续三次,确保初始化成功
148 1 delaynms(5); //延时5ms ,给硬件一点反应时间
149 1 WriteInstruction(0x0c); //显示模式设置:显示开,无光标,光标不闪烁
150 1 delaynms(5); //延时5ms ,给硬件一点反应时间
151 1 WriteInstruction(0x06); //显示模式设置:光标右移,字符不移
152 1 delaynms(5); //延时5ms ,给硬件一点反应时间
153 1 WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除
154 1 delaynms(5); //延时5ms ,给硬件一点反应时间
155 1
156 1 }
157 /************************************************************************
158 以下是DS18B20的操作程序
159 ************************************************************************/
160 sbit DQ=P2^2;
161 unsigned char time; //设置全局变量,专门用于严格延时
162 /*****************************************************
163 函数功能:将DS18B20传感器初始化,读取应答信号
164 出口参数:flag
165 ***************************************************/
166 bit Init_DS18B20(void)
167 {
168 1 bit flag; //储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在
169 1 DQ = 1; //先将数据线拉高
170 1 for(time=0;time<2;time++) //略微延时约6微秒
171 1 ;
172 1 DQ = 0; //再将数据线从高拉低,要求保持480~960us
173 1 for(time=0;time<200;time++) //略微延时约600微秒
174 1 ; //以向DS18B20发出一持续480~960us的低电平复位脉冲
175 1 DQ = 1; //释放数据线(将数据线拉高)
176 1 for(time=0;time<10;time++)
177 1 ; //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)
C51 COMPILER V7.00 HJMCU 06/06/2011 11:03:54 PAGE 4
178 1 flag=DQ; //让单片机检测是否输出了存在脉冲(DQ=0表示存在)
179 1 for(time=0;time<200;time++) //延时足够长时间,等待存在脉冲输出完毕
180 1 ;
181 1 return (flag); //返回检测成功标志
182 1 }
183 /*****************************************************
184 函数功能:从DS18B20读取一个字节数据
185 出口参数:dat
186 ***************************************************/
187 unsigned char ReadOneChar(void)
188 {
189 1 unsigned char i=0;
190 1 unsigned char dat; //储存读出的一个字节数据
191 1 for (i=0;i<8;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -