📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 09/25/2008 09:34:57 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "reg52.h"
2 #include "lcd.h"
3 #include <stdio.h> //输入输出标准库
4 #include <intrins.h> //内部函数
5 #include "Chinese_Code.h"
6 uchar code SYSTAB[8] = {0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
7 uchar code SCRTAB[10] = {0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};
8 uchar data DAT1, COM, COUNT1; // 数据单元,指令单元
9
10 /***********************/
11 /* 写指令代码函数 */
12 /***********************/
13 void Writecode( uchar x )
14 {
15 1 // SFRPAGE=CONFIG_PAGE;
16 1
17 1 COM = x;
18 1 DATBUS = COM; //置指令代码
19 1 A0 = 1; //设置RS=1
20 1 CS1 = 0;
21 1 _nop_();
22 1 Write = 0; //WR=0
23 1 _nop_();
24 1 _nop_();
25 1 _nop_();
26 1 Write = 1; //WR=1
27 1 _nop_();
28 1 _nop_();
29 1 _nop_();
30 1 CS1 = 1;
31 1 }
32 /***********************/
33 /* 写参数及显示数据函数*/
34 /***********************/
35 void Writedata( uchar x )
36 {
37 1
38 1 DAT1 = x;
39 1 DATBUS = DAT1; //置显示数据
40 1 A0 = 0; //设置RS=0
41 1 CS1 = 0;
42 1 _nop_(); //地址保持时间最小 10ns
43 1 Write = 0; //WR=0
44 1 _nop_(); //读写脉冲宽度 最小120ns
45 1 _nop_();
46 1 _nop_();
47 1 Write = 1; //WR=1
48 1 _nop_(); //写数据保持时间最小 120ns
49 1 _nop_();
50 1 _nop_();
51 1 CS1 = 1;
52 1 }
53 /***********************/
54 /*读参数及显示数据函数 */
55 /***********************/
C51 COMPILER V8.02 MAIN 09/25/2008 09:34:57 PAGE 2
56 uchar Readdata(void)
57 {
58 1 A0 = 1; //设置RS=1
59 1 CS1 = 0;
60 1 _nop_();
61 1 DATBUS = 0xff; //使能输入
62 1 Read = 0; //RD=0
63 1 _nop_();
64 1 _nop_();
65 1 _nop_();
66 1 DAT1 = DATBUS; //读取数据
67 1 _nop_();
68 1 _nop_();
69 1 _nop_();
70 1 Read = 1; //RD=1
71 1 _nop_();
72 1 _nop_();
73 1 CS1 = 1;
74 1 return DAT1;
75 1 }
76 /***********************/
77 /* 初始化函数 */
78 /***********************/
79 void Init_LCD()
80 {
81 1 uchar i;
82 1 Writecode( 0x40 ); //SYSTEM SET 代码
83 1 for(i = 0;i < 8;i++)
84 1 Writedata(SYSTAB[i]); //写入参数
85 1 Writecode(0x44); //SCROLL代码
86 1 for(i = 0;i < 10;i++)
87 1 Writedata(SCRTAB[i]); //写入参数
88 1 Writecode( 0x5a ); //HDOT SCR 代码
89 1 Writedata( 0x00 ); //设置参数P1
90 1 Writecode( 0x5b ); //OVLAY 代码
91 1 Writedata( 0x00 ); //设置参数:显示一,三区为文本方式,二重或合成
92 1 Clear(); //调清屏子程序
93 1 // Writecode(0x56); //显示状态设置
94 1 // Writedata(0x56); //设置参数:显示一~四区开显示,光标闪烁显示
95 1 // Writedata(0x54); //设置参数:显示一~四区开显示,关光标
96 1 // Writecode(0x5d); //光标形状设置
97 1 // Writedata(0x07);
98 1 // Writedata(0x01);
99 1 }
100
101 /***********************/
102 /* 清显示RAM函数 */
103 /***********************/
104 void Clear( void )
105 {
106 1 uint i;
107 1 Writecode( 0x4C ); //CSRDIR代码,光标地址自动增1
108 1 Writecode( 0x46 ); //CSRW 代码,写光标地址
109 1 Writedata( 0x00 ); //设置参数光标指针低8位
110 1 Writedata( 0x00 ); //设置参数光标指针高8位
111 1 Writecode( 0x42 ); //MWRITE 代码,连续写数据命令代码
112 1 for(i = 0;i < 9600;i++)
113 1 Writedata( 0x00 ); //写入数据0
114 1 }
115
116 /***********************/
117 /* 消点函数 */
C51 COMPILER V8.02 MAIN 09/25/2008 09:34:57 PAGE 3
118 /***********************/
119 /*
120 void cleardot(uint O_X,uint O_Y)
121 {
122 uint i,k;
123 uchar dat;
124 i=O_X%8; //计算显示单元地址(X坐标),低位点坐标
125 O_X=O_X/8; //高位,字节坐标,以8的整数为单位
126 k=40*O_Y+O_X; //指针地址
127 Writecode(0x4f);
128 Writecode(0x46); //设置光标地址
129 Writedata(k%256); //计算光标地址
130 Writedata(k/256+0x40);
131 if(i==0) //如果=0,则是第8位(第一点),即把第8位置1
132 O_Y=0x80;
133 else
134 {
135 O_Y=1;
136 for(;i<7;i++) //计算显示位,最高位为1位
137 {
138 O_Y=O_Y*2; //左移1位
139 }
140 }
141 O_Y=~O_Y; //按位取反
142 Writecode(0x43); //MREAD代码
143 dat=Readdata(); //读取当前显示数据,同时光标指针根据设置方式自动修改
144 Writecode(0x46); //重新设置光标地址
145 Writedata(k%256); //计算光标地址
146 Writedata(k/256+0x40);
147 Writecode(0x42); //MWRITE 代码
148 Writedata(dat&O_Y); //写入合成数据,或合成显示点
149 }
150 */
151
152 /***********************/
153 /* 清显示区函数 */
154 /***********************/
155 void clear_displayarea( void )
156 {
157 1 uint i, j;
158 1 uchar a;
159 1 j = 40 * 56 + 8;
160 1 Writecode( 0x4f ); //CSRDIR 代码(下移)
161 1 for(i = 0;i < 32;i++) //32列
162 1 {
163 2 Writecode( 0x46 ); //CSRW代码,设置光标地址
164 2 a = j % 256;
165 2 Writedata( a ); //设置光标地址CSR,低地址
166 2 a = j / 256 + 0x40;
167 2 Writedata( a ); //高地址
168 2 Writecode( 0x42 ); //MWRITE代码,连续显示数据
169 2 for(a = 0;a < 148;a++) //148行
170 2 {
171 3 Writedata( 0x00 ); //写入数据
172 3 }
173 2 j = j + 1;
174 2 } //清图形区
175 1 j = 40 * 8 + 8; //第8行开始清
176 1 for(a = 0;a < 18;a++) //18行??????
177 1 {
178 2 Writecode( 0x46 ); //CSRW 代码
179 2 Writedata( j%256 ); //设置光标地址CSR
C51 COMPILER V8.02 MAIN 09/25/2008 09:34:57 PAGE 4
180 2 Writedata( j/256 );
181 2 Writecode( 0x4c ); //CSRDIR代码,光标地址自动左移
182 2 Writecode( 0x42 ); //MWRITE代码,连续写
183 2 for(i = 0;i < 32;i++) //32列
184 2 {
185 3 Writedata( 0x20 ); //写入数据
186 3 }
187 2 j = j + 40;
188 2 }
189 1 for(i = 0;i < 239;i++) //竖线
190 1 Displaydot( 319,i );
191 1 }
192 /************************/
193 /* 写汉字函数(图形方式) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -