📄 lcd_display.lst
字号:
C51 COMPILER V7.08 LCD_DISPLAY 10/31/2007 10:13:27 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE LCD_DISPLAY
OBJECT MODULE PLACED IN lcd_display.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd_display.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**************************************************************
2 菜单调试程序
3 *****************************************************/
4
5 #include <stdio.h> /* standard I/O .h-file */
6 #include <reg51f.h>
7 #include <absacc.h>
8 #include "lcd.h"
9 #include "x5045.h"
10 sbit lcd_rs = P1^5;
11 sbit lcd_e = P1^7;
12 sbit lcd_rw = P1^6;
13 xdata struct TIME /* structure of the clock record */
14 {
15 unsigned char hour; /* hour */
16 unsigned char min; /* minute */
17 unsigned char sec; /* second */
18 };
19
20 xdata struct DATE
21 {
22 unsigned char year;
23 unsigned char mon;
24 unsigned char day;
25 unsigned char week;
26 };
27
28
29 /**********
30 延时子程序
31 **********/
32 void Delay(void)
33 {
34 1 unsigned char i;
35 1 i = 8;
36 1 while(--i);
37 1 }
38 /**********
39 写指令子程序
40 **********/
41 void LcdCommand(unsigned char tt)
42 {
43 1 Delay();
44 1 lcd_rs = 0;
45 1 lcd_rw = 0;
46 1 lcd_e = 1;
47 1 Delay();
48 1 LCD = tt;
49 1 Delay();
50 1 lcd_e = 0;
51 1 Delay();
52 1 }
53 /**************
54 写数据子程序
55 **************/
C51 COMPILER V7.08 LCD_DISPLAY 10/31/2007 10:13:27 PAGE 2
56 void LcdData( unsigned char temp )
57 {
58 1 Delay(); //以确保上一指令/数据模块已经接收处理完
59 1 lcd_rs = 1;
60 1 lcd_rw = 0;
61 1 lcd_e = 1;
62 1 Delay();
63 1 LCD = temp;
64 1 Delay();
65 1 lcd_e = 0;
66 1 Delay();
67 1 }
68
69
70 /* 初始化LCD*/
71 void InitLcd(void)
72 { unsigned char i;
73 1 LcdCommand(0x30); // 30---基本指令操作 //8 位控制接口,基本指令集动作
74 1 // Delay();
75 1 LcdCommand(0x01); // 指令#01H为:清除屏幕文字,把地址指针指向00H单元
76 1 for(i=0;i<201;i++)
77 1 Delay();
78 1 PrintStr(0,0," ");
79 1 // Delay();
80 1 // LcdCommand(0x02);
81 1 // LcdCommand(0x06); // 指定在资料写入或读取时,设定游标的移动方向及指定显示的移位
82 1 // Delay();
83 1 // LcdCommand(0x0C);
84 1 }
85 /**************************************************
86 SEARCH ADDRESS
87 目的是为了转换地址单元为DDRAM地址单元,以方便定义显示位置
88 汉字显示DDRAM位置为:第一行:80H----87H
89 第二行:90H----97H
90 *****************************************************/
91 unsigned char ChangeAddr(first_lin, first_add)
92 unsigned char first_lin, first_add;
93 {
94 1 unsigned char StarAddr;
95 1 switch( first_lin )
96 1 {
97 2 case 0: //first line
98 2 StarAddr = 0x80;
99 2 break;
100 2 case 1: //second line
101 2 StarAddr = 0x90;
102 2 break;
103 2 case 2: //first line
104 2 StarAddr = 0x88;
105 2 break;
106 2 case 3: //second line
107 2 StarAddr = 0x98;
108 2 break;
109 2 }
110 1 return( StarAddr + first_add );
111 1 }
112
113 /********************
114 在指定位置显示汉字,字符
115 y: 显示的纵坐标 0-3
116 x: 显示的横坐标 0-7
117 *********************/
C51 COMPILER V7.08 LCD_DISPLAY 10/31/2007 10:13:27 PAGE 3
118 void PrintStr(y, x, p)
119 unsigned char y, x, *p;
120 {
121 1 unsigned char addr;
122 1
123 1 while( *p )
124 1 {
125 2 addr = ChangeAddr(y,x); //调用调整地址单元子程序
126 2 LcdCommand(addr); //设定DDRAM地址,显示位置地址
127 2 LcdData( *p ); //因为要连续输入机内码高位(区码)、低位(位码)
128 2 p++;
129 2 if ( !(*p) ) //如果是串尾则返回
130 2 return;
131 2 LcdData( *p ); //所以要输入两次数据,如果是字符就是输入两个字符字符代码
132 2 p++;
133 2 x++;
134 2 if (x>7)
135 2 return;
136 2 }
137 1 }
138 /**********************
139 清除图形显示
140 ***********************/
141 void ClearGraph(void)
142 {
143 1 unsigned char row,column,i,j;
144 1 //watchdog();
145 1 row = 0x80; //列
146 1 column = 0x80; //行
147 1 for(j=0;j<=33;j++)
148 1 {
149 2 for(i=0;i<=17;i++)
150 2 {
151 3 LcdCommand(0x34); //关闭绘图显示功能
152 3 LcdCommand(column+j); //起始行
153 3 LcdCommand(row+i); //起始列
154 3 LcdCommand(0x30); //基本指令集
155 3 LcdData(0); //输入显示数据(横向高8位数据)
156 3 LcdData(0); //输入显示数据(横向低8位数据)
157 3 }
158 2 }
159 1 LcdCommand(0x36); //打开绘图显示功能
160 1 LcdCommand(0x30);
161 1 }
162 /*****************************************************************************************
163 反白显示行line = 0~3
164 第一、三行由一片IC控制
165 第二、四行由一片IC控制
166 第一行纵坐标80h-8fh(以点为单位),横坐标80H-87H(以字为单位);第三行纵坐标80h-8fh,横坐标88H-8FH
167 第二行纵坐标80h-8fh(以点为单位),横坐标90H-97H(以字为单位);第四行纵坐标80h-8fh,横坐标98H-9FH
168 ******************************************************************************************/
169 void ReverseLine(unsigned char line)
170 {
171 1 unsigned char row,column,i,j;
172 1 ClearGraph();
173 1 switch(line) //选择行列的起始位置
174 1 {
175 2 case 0:
176 2 column = 0x80;
177 2 row = 0x80;
178 2 break;
179 2 case 1:
C51 COMPILER V7.08 LCD_DISPLAY 10/31/2007 10:13:27 PAGE 4
180 2 column = 0x90;
181 2 row = 0x80;
182 2 break;
183 2 case 2:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -