📄 text2.lst
字号:
C51 COMPILER V7.20 TEXT2 07/21/2007 13:47:15 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<intrins.h>
3 #define uint unsigned int
4 #define uchar unsigned char
5 //数据口定义
6 #define lcd1602_bus P3
7
8 //引脚定义
9 sbit rs_1602=P2^5;
10 sbit rw_1602=P2^6;
11 sbit e_1602=P2^7;
12
13 sbit DQ =P1^0;
14
15
16
17
18 //ASCII码表
19 /**********0---9**************/
20 unsigned int code table[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
21 /**********a---z**************/
22 unsigned int code table1[26]={0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
23 0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a};
24 /***********A---Z*************/
25 unsigned int code table2[26]={0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,
26 0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a};
27 uchar wtdg,xbz;
28
29 //基本变量定义
30 //uchar cnt;
31 // unsigned int d[3];
32 /*
33 hexstoascii2(unsigned int hex)
34 {
35 d[0]=table[hex/10];
36 hex=hex%10;
37 d[1]=table[hex];
38 }
39
40 hexstoascii3(unsigned int hex)
41 {
42 d[0]=table[hex/100];
43 hex=hex%100;
44 d[1]=table[hex/10];
45 hex=hex%10;
46 d[2]=table[hex];
47 }
48 */
49 /**********************************lcd1602******************************************/
50
51 /*********延时子程序**********/
52 void delay(uchar dy)
53 {
54 1 while(--dy);
55 1 }
C51 COMPILER V7.20 TEXT2 07/21/2007 13:47:15 PAGE 2
56
57 /***********忙判断标志,返回一个位BF********************/
58 bit lcd1602_busy(void)
59 {
60 1 uchar busy_flag;
61 1 rs_1602=0;
62 1 rw_1602=1;
63 1 _nop_();
64 1 e_1602=1;
65 1 _nop_();
66 1 lcd1602_bus=0xff;
67 1 busy_flag=lcd1602_bus; //e在高电平时读
68 1 e_1602=0;
69 1 return (bit)(busy_flag&0x80); //BF=1; BUSY 返回一个位
70 1 }
71
72
73 /********写命令,有两个参数,一个是要写的命令控制字,
74 第二个是用来控制是否进行忙标志的判断。
75 busyflag=1;
76 判断: 为0
77 ***************/
78 void lcd1602_wrcmd(unsigned char lcdcmd)
79 {
80 1 while(lcd1602_busy()); //等待空闲
81 1 lcd1602_bus=lcdcmd;
82 1 rs_1602=0;
83 1 rw_1602=0;
84 1 _nop_();
85 1 e_1602=1;
86 1 _nop_();
87 1 _nop_();
88 1 e_1602=0; //产生一个下沿
89 1 }
90
91
92
93 /***************向液晶写数据******************/
94 void lcd1602_wrdata(uchar lcddata)
95 {
96 1 while(lcd1602_busy()); //等待空闲
97 1 lcd1602_bus=lcddata; //在下沿的时候写数据
98 1 rs_1602=1;
99 1 rw_1602=0;
100 1 _nop_();
101 1 e_1602=1;
102 1 _nop_();
103 1 _nop_();
104 1 e_1602=0;
105 1 //lcd_bus=0xff;
106 1 }
107
108
109 /************液晶的清屏************/
110 void lcd1602_clear(void)
111 {
112 1 lcd1602_wrcmd(0x01); //液晶清屏控制字 并延时>40us
113 1 delay(100);
114 1 }
115
116 /***********1602液晶的初始化***************/
117 void lcd1602_init(void)
C51 COMPILER V7.20 TEXT2 07/21/2007 13:47:15 PAGE 3
118 {
119 1 lcd1602_wrcmd(0x38); //功能设置-----8位数据接口,两行显示,5*7点阵字符显示
120 1 delay(100);
121 1 lcd1602_wrcmd(0x0f); //显示开关控制----显示开关开,光标开关关,闪烁开关关
122 1 delay(100);
123 1 lcd1602_wrcmd(0x06); //输入方式设置,AC自增1, S=0;
124 1 delay(100);
125 1 lcd1602_wrcmd(0x01); //清屏
126 1 delay(100);
127 1 }
128
129
130 /**********4*4矩阵键盘****************/
131 /************
132 矩阵键盘
133 D---------P1.0
134 C---------P1.1
135 B---------P1.2
136 A---------P1.3
137 1---------P1.4
138 2---------P1.5
139 3---------P1.6
140 4---------P1.7
141 按键值的分布
142 D C B A
143 1〔15 14 13 12〕
144 2〔11 10 9 8〕
145 3〔 7 6 5 4〕
146 4〔 3 2 1 0〕
147 利用已有的那个按键程序
148 *************/
149
150 uchar getkey_ii()
151
152 {
153 1 unsigned char keycode=0xff,temp,i;
154 1 P1=0x0f;
155 1 temp=P1&0x0f;
156 1 if(temp!=0x0f) //判是否有键按下
157 1 {
158 2 // beep=0;
159 2 P1=0xef; //自第0行开始扫描输出,自列读入键值
160 2 for(i=0;i<4;i++)
161 2 {
162 3 temp=P1&0x0f;
163 3 if(temp==0x07) //判断第0列是否有键按下
164 3 {
165 4 keycode=i*4+0;
166 4 break;
167 4 }
168 3 else if(temp==0x0b)//判断第1列是否有键按下
169 3 {
170 4 keycode=i*4+1;
171 4 break;
172 4 }
173 3 else if(temp==0x0d)//判断第2列是否有键按下
174 3 {
175 4 keycode=i*4+2;
176 4 break;
177 4 }
178 3 else if(temp==0x0e)//判断第3列是否有键按下
179 3 {
C51 COMPILER V7.20 TEXT2 07/21/2007 13:47:15 PAGE 4
180 4 keycode=i*4+3;
181 4 break;
182 4 }
183 3 P1=(P1<<1)|0x1;
184 3 }
185 2
186 2 while((P1&0x0f)!=0x0f) //等待释放
187 2 {
188 3 P1=0x0f;
189 3 }
190 2 // beep=1;
191 2
192 2 }
193 1 return keycode;
194 1 }
195
196 /**********lcd1602 测试程序**********************/
197 //上电后lcd1602 显示
198 // "System of P.H.Y"
199 // " Welcome!"
200 //
201 //分别按矩阵最右下角的三个按键 分别出现下面几个显示界面:
202 // key=0 显示
203 // " 2005/7/28";
204 // " 20:27";
205 // key=1 显示
206 // "<>?+-*/()="
207 // "`-=\[]/.,;"
208 // key=2 显示
209 // "!@#$%^&*()_+|~"
210 // "!@#$%^&*()_+|~"
211
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -