📄 display.lst
字号:
C51 COMPILER V7.06 DISPLAY 11/17/2006 17:20:50 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN display.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE display.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*****************************************************************/
2 /* */
-
3 /*名称: PS/2解码+LCD12864显示程序 */
-
-
4 /*功能: 1 解码键盘的串行数据,译出当前按键值 */
5 /* 2 在LCD12864上显示PS/2键盘上可显示的字符 */
6 /* 3 实现LCD12864的换行显示,退格等功能 */
-
7 /*难度等级: 高 */
-
8 /* 作者: zengrenliang */
9 /* 版权: http://www.51kaifa.com */
10 /*编写日期: 2006.05.20 */
-
-
11 /*****************************************************************/
12
13 #include <reg52.h>
14 #include <string.h>
15 #include "tcode.h" //PS/2通码表
16 #define uchar unsigned char
17
18 /**********引脚定义*********/
19 sbit lck = P3^5;
20 sbit Key_CLK = P3^2; //PS/2键盘数时钟线
21 sbit Key_Data= P1^4; //PS/2键盘数据线
22
23
24 /********常用命令及参数定义********/
25 #define DISPON 0x3f
26 #define DISPOFF 0x3e
27 #define DISPFIRST 0xc0
28 #define SETX 0x40
29 #define SETY 0xb8
30 #define LCDBUZY 0x80
31 #define L 0x00
32 #define R 0x40
33 #define LIMIT 0x80
34
35 /**********全局变量************/
36 bit xy,simple,BF;
37 uchar cbyte, statu;
38 uchar IntNum=0;
39 uchar KeyV=0,uGetvalue=0;
40 static unsigned char Key_UP=0, Shift = 0;
41 static unsigned char DisNum = 0; //显示用指针
42
43
44 /**************函数******************/
45 void delay3s(void);
46 void WrL(uchar x);
47 void WrR(uchar x);
48 void Lcmcls(void);
C51 COMPILER V7.06 DISPLAY 11/17/2006 17:20:50 PAGE 2
49 void wtcom(void);
50 void Lcminit (void);
51 void Putpicture(void);
52 void VtoH8x16change(uchar *hzbuf);
53 void Puthalf(uchar *strch,uchar row,uchar col);
54 void Wrdata(uchar x,uchar row,uchar col);
55 void Locatexy(uchar row,uchar col);
56 void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
57 void vWrite8x16String(uchar *str,uchar col, uchar row, bit flag);
58 void Decode(unsigned char ScanCode);
59
60
61 extern unsigned char code help[];
62 extern unsigned char code char_Table[95][16];
63
64
65 /***********主程序***************/
66 void main(void)
67 {
68 1 P2 = 0xff;
69 1 EX0 = 1; //允许PS/2中断
70 1 IT0 = 0; //低电平有效
71 1 EA = 1; //开中断
72 1 Lcminit(); //初始化LCD
73 1 Putpicture();
74 1 delay3s();
75 1 while(!BF);
76 1 Lcmcls();
77 1 do
78 1 {
79 2 if (BF)
80 2 Decode(KeyV);//解码
81 2 else
82 2 EA = 1; //开中断
83 2 }
84 1 while(1);
85 1 }
86
87
88
89 /***************微秒级延时*****************/
90 void delay(unsigned int time)
91 { unsigned int i;
92 1 for(i=0;i<time;i++);
93 1 }
94
95
96 /***************约3S延时********************/
97 void delay3s(void)
98 {
99 1 delay(50000);
100 1 delay(50000);
101 1 delay(50000);
102 1 delay(50000);
103 1 delay(50000);
104 1 delay(50000);
105 1 }
106
107 //***********初始化LCD*******************/
108
109 void Lcminit (void)
110 {
C51 COMPILER V7.06 DISPLAY 11/17/2006 17:20:50 PAGE 3
111 1 cbyte=DISPOFF;
112 1 WrL(cbyte);
113 1 WrR(cbyte);
114 1 cbyte=DISPON;
115 1 WrL(cbyte);
116 1 WrR(cbyte);
117 1 cbyte=DISPFIRST;
118 1 WrL(cbyte);
119 1 WrR(cbyte);
120 1 Lcmcls();
121 1 Locatexy(0,0);
122 1 }
123
124
125 /***************LCD清屏********************/
126 void Lcmcls(void)
127 { uchar i,j;
128 1 for(i=0;i<8;i++){
129 2 delay(6);
130 2 for(j=0;j<LIMIT;j++){
131 3 delay(6);
132 3 Wrdata(0x0,i,j);
133 3 }
134 2 }
135 1 }
136
137 /**************写左区***************/
138
139 void WrL(uchar x)
140 {
141 1
142 1 P0=0xFF;//P0口送FF,准备读
143 1 lck = 0;
144 1 P1 = 0x2a;//ELCD=1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -