📄 text.lst
字号:
C51 COMPILER V8.02 TEXT 04/04/2007 18:33:49 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEXT
OBJECT MODULE PLACED IN Text.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************
2 基于isd1420语音芯片的温度报警
3
4 功能:利用ds18b20检测当前温度,通过和设定参数的比较,给ISD1420发出
5 报警脉冲,通过功率放大器LM386 驱动喇叭报警。
6 日期:2007.3.20
7
8 注: isd1420的报警采用延时方式(isd1420的延时报警取决于录音时间的长短)
9
10 问题:1.isd1420会偶然的触发非正常的报警?
11 2.系统在上电时偶尔会进入非正常的状态?
12 3.由于proteus软件中没有isd1420这个模型,故给出一个可以代替仿真的图纸。
13
14 作者:王蔚 陕西理工学院电工电子实验中心创新试验室 qq :284997953
15
16 ********************************************************************/
17
18 #include<reg51.h>
19 #include<intrins.h>
20 #include <absacc.h>
21
22 #define uchar unsigned char
23 #define uint unsigned int
24 #define PLAYE_ADDR XBYTE[0XBFFF] //语音报警地址
25
26 #define BUSY 0x80 //lcd忙检测标志
27 #define DATAPORT P0
28
29 sbit P1_0=P1^4; //时钟调整
30 sbit P1_1=P1^5; //时钟加
31 sbit P1_2=P1^6; //时钟减
32
33 sbit RED_ALARM=P1^0; //红色指示灯
34 sbit WRITE_ALARM=P1^1; //白色指示灯
35 sbit GREEN_ALARM=P1^2; //绿色指示灯
36
37 sbit DQ = P3^7; //定义ds18b20通信端口
38 sbit LCM_RS=P2^0; //数据/命令端
39 sbit LCM_RW=P2^1; //读/写选择端
40 sbit LCM_EN=P2^2; //LCD使能信号
41 sbit RECLED_EOC=P3^5; //ISD1420放音结束查询标志
42
43
44 unsigned char seconde=0; //定义并初始化时钟变量
45 unsigned char minite=0;
46 unsigned char hour=12;
47 unsigned char mstcnt=0;
48 unsigned char temp1,temp2,temp3;
49 unsigned char runtime; //系统运行总时间
50 unsigned char t;
51 unsigned int temp;
52
53 uchar code str0[]={"--- : : ---of"};
54 uchar code str1[]={"temp: . C------"};
55
C51 COMPILER V8.02 TEXT 04/04/2007 18:33:49 PAGE 2
56 void delay_LCM(uint); //LCD延时子程序
57 void initLCM( void); //LCD初始化子程序
58 void lcd_wait(void); //LCD检测忙子程序
59 void WriteCommandLCM(uchar WCLCM,uchar BusyC); //写指令到ICM子函数
60 void WriteDataLCM(uchar WDLCM); //写数据到LCM子函数
61 void DisplayOneChar(uchar X,uchar Y,uchar DData); //显示指定坐标的一个字符子函数
62 void DisplayListChar(uchar X,uchar Y,uchar code *DData); //显示指定坐标的一串字符子函数
63
64 void init_timer0(void); //定时器初始化
65 void displayfun1(void);
66
67 void delay_18B20(unsigned int i);
68 void Init_DS18B20(void) ;
69 uchar ReadOneChar(void);
70 void WriteOneChar(unsigned char dat);
71 void ReadTemperature(void);
72 void playalarm(void);
73
74 /*********延时K*1ms,12.000mhz**********/
75
76 void delay_LCM(uint k)
77 {
78 1 uint i,j;
79 1 for(i=0;i<k;i++)
80 1 {
81 2 for(j=0;j<60;j++)
82 2 {;}
83 2 }
84 1 }
85 /**********写指令到ICM子函数************/
86
87 void WriteCommandLCM(uchar WCLCM,uchar BusyC)
88 {
89 1 if(BusyC)lcd_wait();
90 1 DATAPORT=WCLCM;
91 1 LCM_RS=0; // 选中指令寄存器
92 1 LCM_RW=0; // 写模式
93 1 LCM_EN=1;
94 1 _nop_();
95 1 _nop_();
96 1 _nop_();
97 1 LCM_EN=0;
98 1 }
99
100 /**********写数据到LCM子函数************/
101
102 void WriteDataLCM(uchar WDLCM)
103 {
104 1 lcd_wait( ); //检测忙信号
105 1 DATAPORT=WDLCM;
106 1 LCM_RS=1; // 选中数据寄存器
107 1 LCM_RW=0; // 写模式
108 1 LCM_EN=1;
109 1 _nop_();
110 1 _nop_();
111 1 _nop_();
112 1 LCM_EN=0;
113 1 }
114
115 /***********lcm内部等待函数*************/
116
117 void lcd_wait(void)
C51 COMPILER V8.02 TEXT 04/04/2007 18:33:49 PAGE 3
118 {
119 1 DATAPORT=0xff;
120 1 LCM_EN=1;
121 1 LCM_RS=0;
122 1 LCM_RW=1;
123 1 _nop_();
124 1 _nop_();
125 1 _nop_();
126 1 while(DATAPORT&BUSY)
127 1 {
128 2 LCM_EN=0;
129 2 _nop_();
130 2 _nop_();
131 2 LCM_EN=1;
132 2 _nop_();
133 2 _nop_();
134 2 }
135 1 LCM_EN=0;
136 1
137 1 }
138
139 /**********LCM初始化子函数***********/
140
141 void initLCM( )
142 {
143 1 DATAPORT=0;
144 1 delay_LCM(15);
145 1 WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
146 1 delay_LCM(5);
147 1 WriteCommandLCM(0x38,0);
148 1 delay_LCM(5);
149 1 WriteCommandLCM(0x38,0);
150 1 delay_LCM(5);
151 1
152 1 WriteCommandLCM(0x38,1); //8bit数据传送,2行显示,5*7字型,检测忙信号
153 1 WriteCommandLCM(0x08,1); //关闭显示,检测忙信号
154 1 WriteCommandLCM(0x01,1); //清屏,检测忙信号
155 1 WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号
156 1 WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
157 1 }
158
159 /****************显示指定坐标的一个字符子函数*************/
160
161 void DisplayOneChar(uchar X,uchar Y,uchar DData)
162 {
163 1 Y&=1;
164 1 X&=15;
165 1 if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40
166 1 X|=0x80; //指令码为地址码+0X80
167 1 WriteCommandLCM(X,0);
168 1 WriteDataLCM(DData);
169 1 }
170
171 /***********显示指定坐标的一串字符子函数***********/
172
173 void DisplayListChar(uchar X,uchar Y,uchar code *DData)
174 {
175 1 uchar ListLength=0;
176 1 Y&=0x01;
177 1 X&=0x0f;
178 1 while(X<16)
179 1 {
C51 COMPILER V8.02 TEXT 04/04/2007 18:33:49 PAGE 4
180 2 DisplayOneChar(X,Y,DData[ListLength]);
181 2 ListLength++;
182 2 X++;
183 2 }
184 1 }
185
186 /***********ds18b20延迟子函数(晶振12MHz )*******/
187
188 void delay_18B20(unsigned int i)
189 {
190 1 while(i--);
191 1 }
192
193 /**********ds18b20初始化函数**********************/
194
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -