📄 lcd_driver_user.lst
字号:
C51 COMPILER V8.02 LCD_DRIVER_USER 06/27/2007 00:58:40 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD_DRIVER_USER
OBJECT MODULE PLACED IN LCD_Driver_User.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD_Driver_User.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //========================================================================
2 // 文件名: LCD_Driver_User.c
3 // 作 者: Xinqiang Zhang(email: Xinqiang@Mzdesign.com.cn)
4 // www.Mzdesign.com.cn
5 // 日 期: 2007/02/25
6 // 描 述: 底层接口驱动扩展程序集
7 //
8 // 参 考: 请参考具体显示器的硬件描述说明书或者是DataSheet,并以此来编写底
9 // 层接口驱动程序,以及LCD的初始化代码
10 // 版 本:
11 // 2007/02/25 First version Mz Design
12 // 2007/04/04 V1.1 Mz Design MCS51的直接驱动(端口模拟时序)
13 // 注 意:
14 // 该驱动程序当中有很多已经被屏蔽掉的子程序,用户可根据自己的应用
15 // 取消屏障并作一定的修改(如果可能的话)
16 //========================================================================
17 #include "LCD_Config.h"
18 #include "LCD_PortConfig.h"
19
20 //========================================================================
21 // 函数: void LCD_DataWrite(unsigned int Data)
22 // 描述: 写一个字节的显示数据至LCD中的显示缓冲RAM当中
23 // 参数: Data 写入的数据
24 // 返回: 无
25 // 备注: 无
26 // 版本:
27 // 2007/01/09 First version
28 //========================================================================
29 void LCD_DataWrite(unsigned char Dat)//,_Fill_Dot_LCD
30 {
31 1 // *DAT_W_ADDR = Dat;
32 1 LCD_A0 = 1;
33 1 // _nop_();
34 1 LCD_RW = 0;
35 1 // _nop_();
36 1 // LCD_EP = 0;
37 1 // LCD_CS = 0;
38 1 // _nop_();
39 1 DAT_PORT = Dat;
40 1 LCD_EP = 0;
41 1 // _nop_();
42 1 LCD_EP = 1;
43 1 // _nop_();
44 1 // LCD_CS = 1;
45 1 }
46 //========================================================================
47 // 函数: unsigned char LCD_DataRead(void)
48 // 描述: 从LCD中的显示缓冲RAM当中读一个字节的显示数据
49 // 参数: 无
50 // 返回: 读出的数据,
51 // 备注:
52 // 版本:
53 // 2007/01/09 First version
54 // 注意:
55 //========================================================================
C51 COMPILER V8.02 LCD_DRIVER_USER 06/27/2007 00:58:40 PAGE 2
56 unsigned char LCD_DataRead(void)
57 {
58 1 unsigned char Read_Data;
59 1 // Read_Data = *DAT_R_ADDR;
60 1 // Read_Data = *DAT_R_ADDR;//
61 1 LCD_A0 = 1;
62 1 LCD_RW = 1;
63 1 LCD_EP = 0;
64 1 LCD_EP = 1;
65 1 DAT_PORT = 0xff;
66 1 LCD_EP = 0;
67 1 LCD_EP = 1;
68 1 Read_Data = DAT_PORT;
69 1 //SPLC501在读出数据时需要连续两次读操作方可读出
70 1 return Read_Data;
71 1 }
72 //========================================================================
73 // 函数: void LCD_RegWrite(unsigned char Command)
74 // 描述: 写一个字节的数据至LCD中的控制寄存器当中
75 // 参数: Command 写入的数据,低八位有效(byte)
76 // 返回: 无
77 // 备注:
78 // 版本:
79 // 2007/01/09 First version
80 //========================================================================
81 void LCD_RegWrite(unsigned char Command)
82 {
83 1 // *COM_W_ADDR = Command;
84 1 LCD_A0 = 0;
85 1 // _nop_();
86 1 LCD_RW = 0;
87 1 // _nop_();
88 1 // LCD_EP = 0;
89 1 // LCD_CS = 0;
90 1 // _nop_();
91 1 DAT_PORT = Command;
92 1 LCD_EP = 0;
93 1 // _nop_();
94 1 LCD_EP = 1;
95 1 }
96 //========================================================================
97 // 函数: void Write_Dot_LCD(int x,int y,unsigned int i)
98 // 描述: 在LCD的真实坐标系上的X、Y点绘制填充色为i的点
99 // 参数: x X轴坐标
100 // y Y轴坐标
101 // i 要填充的点的颜色
102 // 返回: 无
103 // 备注:
104 // 版本:
105 // 2006/10/15 First version
106 // 2007/01/09 V1.2
107 //========================================================================
108 void Write_Dot_LCD(unsigned char x,unsigned char y,unsigned char i)
109 {
110 1 unsigned char x_low,x_hight; //定义列地址的高低位指令
111 1 unsigned char Dot_Mask_Buf=0x01;
112 1 unsigned char y_Page; //用于存放要画点的位置所在的byte数据位置
113 1 x = x+4;
114 1 x_low = (x&0x0f); //定位列地址设置的低位指令
115 1 x_hight = ((x>>4)&0x0f)+0x10; //定位列地址设置的高位指令
116 1 // y_Page = y&0x07; //取低三位
117 1 switch(y&0x07)
C51 COMPILER V8.02 LCD_DRIVER_USER 06/27/2007 00:58:40 PAGE 3
118 1 {
119 2 case 0: Dot_Mask_Buf = 0x01;break;
120 2 case 1: Dot_Mask_Buf = 0x02;break;
121 2 case 2: Dot_Mask_Buf = 0x04;break;
122 2 case 3: Dot_Mask_Buf = 0x08;break;
123 2 case 4: Dot_Mask_Buf = 0x10;break;
124 2 case 5: Dot_Mask_Buf = 0x20;break;
125 2 case 6: Dot_Mask_Buf = 0x40;break;
126 2 case 7: Dot_Mask_Buf = 0x80;break;
127 2 }
128 1 y_Page = (y>>3)+0xb0; //Get the page of the byte
129 1 LCD_RegWrite(y_Page);
130 1 LCD_RegWrite(x_low);
131 1 LCD_RegWrite(x_hight);
132 1 LCD_RegWrite(0xe0); //设置为读写改模式
133 1 y_Page = LCD_DataRead(); //
134 1 if(i) y_Page |= Dot_Mask_Buf;
135 1 else y_Page &= ~Dot_Mask_Buf;
136 1 LCD_DataWrite(y_Page); //
137 1 LCD_RegWrite(0xee); //读写改模式结束
138 1 }
139 /*
140 //========================================================================
141 // 函数: void Clear_Dot_LCD(int x,int y)
142 // 描述: 清除在LCD的真实坐标系上的X、Y点
143 // 参数: x X轴坐标
144 // y Y轴坐标
145 // 返回: 无
146 // 备注: 暂不使用该函数
147 // 版本:
148 // 2006/10/15 First version
149 //========================================================================
150 void Clear_Dot_LCD(int x,int y)
151 {
152 //可根据自己的需要填写代码
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -