📄 receivedata.lst
字号:
C51 COMPILER V8.02 RECEIVEDATA 12/12/2006 16:32:39 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE RECEIVEDATA
OBJECT MODULE PLACED IN Receivedata.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Receivedata.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************
2 * *
3 * ME500B片机开发系统演示程序 - 接收 DTMF 编码 *
4 * *
5 * LCD1602显示 *
6 * *
7 * 版本: V1.0 (2006/11/20) *
8 * 作者: gguoqing (Email: gguoqing@willar.com) *
9 * 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) *
10 * 时间: 2006/12/12 *
11 * *
12 *【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
13 *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
14 * *
15 ******************************************************************/
16
17 #include <reg51.h>
18 #include <intrins.h>
19
20 #define uchar unsigned char
21 #define uint unsigned int
22
23 sbit BEEP = P3^7; //蜂鸣器驱动线
24
25 sbit LCD_RS = P2^0;
26 sbit LCD_RW = P2^1;
27 sbit LCD_EN = P2^2;
28
29 sbit MT_RS = P2^3;
30 sbit MT_RW = P2^4;
31 sbit MT_CS = P2^5;
32 sbit MT_CK = P2^6;
33 sbit TEL = P2^7; //电话摘挂机控制线
34
35 bit zhenling,playflag,tel_on;
36
37 uchar dis_buf=0x00; //显示缓存
38 uchar temp,count;
39 uchar T0_Count,m;
40
41 uchar code cdis1[ ] = {" RECEIVE DTMF "};
42 uchar code cdis2[ ] = {"NUM: "};
43
44 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
45
46
47 /*************************************************************
48 * *
49 * 延时子程序 *
50 * 晶振 11.0592MHz 延时为1ms *
51 * *
52 *************************************************************/
53 void delay(uint x)
54 {
55 1 uchar j;
C51 COMPILER V8.02 RECEIVEDATA 12/12/2006 16:32:39 PAGE 2
56 1 while((x--)!=0)
57 1 {
58 2 for(j=0;j<115;j++)
59 2 {;}
60 2 }
61 1 }
62
63 /*************************************************************
64 * *
65 *检查LCD忙状态 *
66 *lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据 *
67 * *
68 *************************************************************/
69 bit lcd_busy()
70 {
71 1 bit result;
72 1 LCD_RS = 0;
73 1 LCD_RW = 1;
74 1 LCD_EN = 1;
75 1 delayNOP();
76 1 result = (bit)(P0&0x80);
77 1 LCD_EN = 0;
78 1 return(result);
79 1 }
80
81 /*************************************************************
82 * *
83 *写指令数据到LCD *
84 *RS=L,RW=L,E=高脉冲,D0-D7=指令码。 *
85 * *
86 *************************************************************/
87 void lcd_wcmd(uchar cmd)
88
89 {
90 1 while(lcd_busy());
91 1 LCD_RS = 0;
92 1 LCD_RW = 0;
93 1 LCD_EN = 0;
94 1 _nop_();
95 1 _nop_();
96 1 P0 = cmd;
97 1 delayNOP();
98 1 LCD_EN = 1;
99 1 delayNOP();
100 1 LCD_EN = 0;
101 1 }
102
103 /************************************************************
104 * *
105 *写显示数据到LCD *
106 *RS=H,RW=L,E=高脉冲,D0-D7=数据。 *
107 * *
108 ************************************************************/
109 void lcd_wdat(uchar dat)
110 {
111 1 while(lcd_busy());
112 1 LCD_RS = 1;
113 1 LCD_RW = 0;
114 1 LCD_EN = 0;
115 1 P0 = dat;
116 1 delayNOP();
117 1 LCD_EN = 1;
C51 COMPILER V8.02 RECEIVEDATA 12/12/2006 16:32:39 PAGE 3
118 1 delayNOP();
119 1 LCD_EN = 0;
120 1 }
121
122 /************************************************************
123 * *
124 * LCD初始化设定 *
125 * *
126 ************************************************************/
127 void lcd_init()
128 {
129 1 delay(15);
130 1 lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
131 1 delay(5);
132 1 lcd_wcmd(0x38);
133 1 delay(5);
134 1 lcd_wcmd(0x38);
135 1 delay(5);
136 1
137 1 lcd_wcmd(0x0c); //显示开,关光标
138 1 delay(5);
139 1 lcd_wcmd(0x06); //移动光标
140 1 delay(5);
141 1 lcd_wcmd(0x01); //清除LCD的显示内容
142 1 delay(5);
143 1 }
144
145 /************************************************************
146 * *
147 * 设定显示位置 *
148 * *
149 ************************************************************/
150
151 void lcd_pos(uchar pos)
152 {
153 1 lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
154 1 }
155
156 /************************************************************
157 * *
158 * LCD显示函数 *
159 * *
160 ************************************************************/
161 void lcd_play()
162 {
163 1 if(dis_buf>9) //转换为ASCII码
164 1 dis_buf = dis_buf+0x37;
165 1 else
166 1 dis_buf = dis_buf+0x30;
167 1
168 1 lcd_pos(0x44+T0_Count);
169 1 lcd_wdat(dis_buf); //显示编码
170 1 }
171
172 /************************************************************
173 * *
174 * 延时 x*0.14ms *
175 * *
176 ************************************************************/
177 void delay0(uchar x)
178 {
179 1 unsigned char i;
C51 COMPILER V8.02 RECEIVEDATA 12/12/2006 16:32:39 PAGE 4
180 1 while(x--)
181 1 {
182 2 for (i = 0; i<13; i++) {;}
183 2 }
184 1 }
185
186 /************************************************************
187 * *
188 * 蜂鸣器响一声 *
189 * *
190 ************************************************************/
191 void beep()
192 {
193 1 unsigned char i;
194 1 for (i=0;i<180;i++)
195 1 {
196 2 delay0(6);
197 2 BEEP=!BEEP; //BEEP取反
198 2 }
199 1 BEEP=1; //关闭蜂鸣器
200 1 delay(400); //延时
201 1 }
202
203 /*************************************************************
204 * *
205 * MT8880 写状态函数 *
206 * RS=1,RW=0,写状态寄存器 *
207 * *
208 *************************************************************/
209 void write_status(uchar value)
210 {
211 1 MT_RS =1;
212 1 MT_RW =0;
213 1 MT_CK =0;
214 1
215 1 P1 = value; //写 8880CRA和CRB.
216 1 MT_CK =1;
217 1 delayNOP();
218 1 MT_CK =0;
219 1 }
220
221 /*************************************************************
222 * *
223 * MT8880 读状态函数 *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -