📄 bo hao.lst
字号:
C51 COMPILER V8.02 BO_HAO 12/11/2006 11:06:57 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE BO_HAO
OBJECT MODULE PLACED IN bo hao.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE bo hao.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************/
2 /* */
3 /* ME500B片机开发系统演示程序 - 电话拨号器 */
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/10 */
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 uchar dis_buf=0x00; //显示缓存
25 uchar dis_buf1[ ] = {0x00,0x00,0x00,0x00,0x00,0x00,
26 0x00,0x00,0x00,0x00,0x00,0x00};
27 //电话号码存储单元
28 uchar temp,m;
29 uchar key,keynum; //键顺序吗
30
31 sbit LCD_RS = P2^0;
32 sbit LCD_RW = P2^1;
33 sbit LCD_EN = P2^2;
34
35 sbit MT_RS = P2^3;
36 sbit MT_RW = P2^4;
37 sbit MT_CS = P2^5;
38 sbit MT_CK = P2^6;
39 sbit TEL = P2^7; //电话摘挂机控制线
40
41 uchar code cdis1[ ] = {"TELEPHONE DIALER"};
42 uchar code cdis2[ ] = {"TEL: "};
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 { uchar j;
55 1 while((x--)!=0)
C51 COMPILER V8.02 BO_HAO 12/11/2006 11:06:57 PAGE 2
56 1 {
57 2 for(j=0;j<115;j++)
58 2 {;}
59 2 }
60 1 }
61
62 /*************************************************************
63 * *
64 *检查LCD忙状态 *
65 *lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据 *
66 * *
67 *************************************************************/
68 bit lcd_busy()
69 {
70 1 bit result;
71 1 LCD_RS = 0;
72 1 LCD_RW = 1;
73 1 LCD_EN = 1;
74 1 delayNOP();
75 1 result = (bit)(P0&0x80);
76 1 LCD_EN = 0;
77 1 return(result);
78 1 }
79
80 /*************************************************************
81 * *
82 *写指令数据到LCD *
83 *RS=L,RW=L,E=高脉冲,D0-D7=指令码。 *
84 * *
85 *************************************************************/
86 void lcd_wcmd(uchar cmd)
87
88 {
89 1 while(lcd_busy());
90 1 LCD_RS = 0;
91 1 LCD_RW = 0;
92 1 LCD_EN = 0;
93 1 _nop_();
94 1 _nop_();
95 1 P0 = cmd;
96 1 delayNOP();
97 1 LCD_EN = 1;
98 1 delayNOP();
99 1 LCD_EN = 0;
100 1 }
101
102 /************************************************************
103 * *
104 *写显示数据到LCD *
105 *RS=H,RW=L,E=高脉冲,D0-D7=数据。 *
106 * *
107 ************************************************************/
108 void lcd_wdat(uchar dat)
109 {
110 1 while(lcd_busy());
111 1 LCD_RS = 1;
112 1 LCD_RW = 0;
113 1 LCD_EN = 0;
114 1 P0 = dat;
115 1 delayNOP();
116 1 LCD_EN = 1;
117 1 delayNOP();
C51 COMPILER V8.02 BO_HAO 12/11/2006 11:06:57 PAGE 3
118 1 LCD_EN = 0;
119 1 }
120
121 /************************************************************
122 * *
123 * LCD初始化设定 *
124 * *
125 ************************************************************/
126 void lcd_init()
127 {
128 1 delay(15);
129 1 lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
130 1 delay(5);
131 1 lcd_wcmd(0x38);
132 1 delay(5);
133 1 lcd_wcmd(0x38);
134 1 delay(5);
135 1
136 1 lcd_wcmd(0x0c); //显示开,关光标
137 1 delay(5);
138 1 lcd_wcmd(0x06); //移动光标
139 1 delay(5);
140 1 lcd_wcmd(0x01); //清除LCD的显示内容
141 1 delay(5);
142 1 }
143
144 /************************************************************
145 * *
146 * 设定显示位置 *
147 * *
148 ************************************************************/
149
150 void lcd_pos(uchar pos)
151 {
152 1 lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
153 1 }
154
155 /************************************************************
156 * *
157 * 矩阵键盘扫描函数 *
158 * 键值保存在key *
159 * *
160 ************************************************************/
161 uchar keyscan(void)
162 {
163 1 P1=0x0F; //低四位输入
164 1 delay(1);
165 1 temp=P1; //读P1口
166 1 temp=temp&0x0F;
167 1 temp=~(temp|0xF0);
168 1 if(temp==1)
169 1 key=0;
170 1 else if(temp==2)
171 1 key=1;
172 1 else if(temp==4)
173 1 key=2;
174 1 else if(temp==8)
175 1 key=3;
176 1 else
177 1 key=16;
178 1
179 1 P1=0xF0; //高四位输入
C51 COMPILER V8.02 BO_HAO 12/11/2006 11:06:57 PAGE 4
180 1 delay(1);
181 1 temp=P1; //读P1口
182 1 temp=temp&0xF0;
183 1 temp=~((temp>>4)|0xF0);
184 1 if(temp==1)
185 1 key=key+0;
186 1 else if(temp==2)
187 1 key=key+4;
188 1 else if(temp==4)
189 1 key=key+8;
190 1 else if(temp==8)
191 1 key=key+12;
192 1 else
193 1 key=16;
194 1
195 1 return(key);
196 1 }
197
198 /************************************************************
199 * *
200 * 延时 x*0.14ms *
201 * *
202 ************************************************************/
203 void delay0(uchar x)
204 {
205 1 unsigned char i;
206 1 while(x--)
207 1 {
208 2 for (i = 0; i<13; i++) {}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -