📄 a.lst
字号:
C51 COMPILER V7.20 A 04/25/2008 11:14:09 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE A
OBJECT MODULE PLACED IN a.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE a.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*-------------说明--------------------------*/
2 //P0液晶数据
3 //P1矩阵键盘
4 //P2液晶功能端
5 /*-----------------------------------------------*/
6 #include <stdio.h>
7 #include <reg51.h>
8 #include<absacc.h>
9 #include<intrins.h>
10 unsigned char k=' ';
11
12 sbit rs = P1^0; //1=数据; 0=指令;
13 sbit rw = P1^1; //1=读; 0=写;
14 sbit e = P1^2; //1=使能;
15
16 #define PA XBYTE[0x1FFC]
17 #define PB XBYTE[0x1FFD]
18 #define PC XBYTE[0x1800]
19 #define COM XBYTE[0x1C00]
20 #define LCD XBYTE[0x2FFF]
21 #define unchar unsigned char
22 #define unint unsigned int
23
24
25
26
27 /*-------------键盘去抖动延时--------------------------*/
28 void delay1(void)
29 {
30 1 unsigned char i;
31 1 for(i=0;i<200;i++)
32 1 {}
33 1 }
34
35 /*-------------键盘扫描--------------------------*/
36 unsigned char keyscan(void)
37 {
38 1 unsigned char code_h;
39 1 unsigned char code_l;
40 1 COM=0x88;
41 1 PC=0xF0;
42 1 if((PC&0xF0)!=0xf0)
43 1 {
44 2 delay1();
45 2 if((PC&0xF0)!=0xf0)
46 2 {
47 3 code_h=0xfe;
48 3 while((code_h&0x10)!=0)
49 3 {
50 4 PC=code_h;
51 4 if((PC&0xF0)!=0xf0)
52 4 {
53 5 code_l=(PC&0xf0)|0x0f;
54 5 return((~code_h)+(~code_l));
55 5 }
C51 COMPILER V7.20 A 04/25/2008 11:14:09 PAGE 2
56 4 else
57 4 code_h=(code_h<<1)|0x01;
58 4 }
59 3 }
60 2 }
61 1 return(0);
62 1 }
63 /*-------------键盘数字识别--------------------------*/
64 unsigned char identify(void)
65 {
66 1 unsigned char a;
67 1 a=keyscan();
68 1 switch(a)
69 1 {
70 2 case 0x11:k='1';break;
71 2 case 0x21:k='5';break;
72 2 case 0x41:k='9';break;
73 2 case 0x81:k='C';break;
74 2 case 0x12:k='2';break;
75 2 case 0x22:k='6';break;
76 2 case 0x42:k='0';break;
77 2 case 0x82:k='D';break;
78 2 case 0x14:k='3';break;
79 2 case 0x24:k='7';break;
80 2 case 0x44:k='A';break;
81 2 case 0x84:k='E';break;
82 2 case 0x18:k='4';break;
83 2 case 0x28:k='8';break;
84 2 case 0x48:k='B';break;
85 2 case 0x88:k='F';break;
86 2 default:break;
87 2 }
88 1 return(k);
89 1 }
90
91 /*-------------测忙延时--------------------------*/
92 void delay(unsigned char i) //225不稳定,确保安全230-250 约0.5ms
93 {
94 1 while(--i);
95 1 }
96
97 /*---------------写数据------------------------*/
98 lcd_write_data(unsigned char c)
99 {
100 1 delay(250);
101 1 rs=1;
102 1 rw=0;
103 1 LCD=c;
104 1 e=1;
105 1 _nop_();
106 1 _nop_();
107 1 e=0;
108 1 }
109
110 /*---------------写指令------------------------*/
111 lcd_write_comm(unsigned char c)
112 {
113 1 delay(250);
114 1 rs=0;
115 1 rw=0;
116 1 LCD=c;
117 1 e=1;
C51 COMPILER V7.20 A 04/25/2008 11:14:09 PAGE 3
118 1 _nop_();
119 1 _nop_();
120 1 e=0;
121 1 }
122
123 /*------------------初始化-----------------*/
124 void init_lcd (void)
125 {
126 1 lcd_write_comm (0x30); //基本指令集
127 1 lcd_write_comm (0x01); //清屏,地址指针指向00H
128 1 lcd_write_comm (0x06); //光标的移动方向
129 1 lcd_write_comm (0x0c); //开显示,关游标
130 1 }
131
132 /************************************************************************************************
133 lcd_write_sentence函数:
134 指定起始行,起始列,连续写入字符串;注意:字符串长度必须小于8;行:1-4;列:0-7
135 *************************************************************************************************/
136
137 void lcd_write_sentence(unchar row,unchar col,unchar *string,unchar lenth)
138 {
139 1 unchar i=0;
140 1 lcd_write_comm (0x30);
141 1 switch(row)
142 1 {
143 2 case 1:
144 2 lcd_write_comm(0x80+col); //第一行
145 2 break;
146 2 case 2:
147 2 lcd_write_comm(0x90+col); //第二行
148 2 break;
149 2 case 3:
150 2 lcd_write_comm(0x88+col); //第三行
151 2 break;
152 2 case 4:
153 2 lcd_write_comm(0x98+col); //第四行
154 2 break;
155 2 default:
156 2 lcd_write_comm(0x80); //缺省为第一行
157 2 break;
158 2 }
159 1 while(lenth-->0)
160 1 {
161 2 lcd_write_data(string[i]); //写入字符串
162 2 i++;
163 2 }
164 1 }
165
166
167 /*------------------主程序--------------------*/
168 void main ()
169 {
170 1 unsigned char buf1[20],i;
171 1 init_lcd ();
172 1
173 1 while (1)
174 1 {
175 2 for(i=0;i<3;i++)
176 2 {buf1[i]=identify();}
177 2 lcd_write_sentence(1,0,"键值:",6);
178 2 lcd_write_sentence(2,0,buf1,3);
179 2 }
C51 COMPILER V7.20 A 04/25/2008 11:14:09 PAGE 4
180 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 424 ----
CONSTANT SIZE = 7 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 26
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -