?? 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 + -