12864_lcd.lst
来自「用单片机实现LCD显示字符和图形」· LST 代码 · 共 371 行 · 第 1/2 页
LST
371 行
C51 COMPILER V7.09 12864_LCD 04/14/2009 09:36:32 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE 12864_LCD
OBJECT MODULE PLACED IN 12864_LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864_LCD.c OMF2 OPTIMIZE(9,SIZE) BROWSE DEBUG
line level source
1 #include "reg52.h"
2 #include "declare.h"
3 unsigned char COUNT3,COUNT2,COUNT1,LCD_X,LCD_Y;
4 /**********************************************************
5 RT12864M LCD DISPLAY
6 建立时间:2007年5月25号
7 修改日期:2007年5月30号
8
9 **********************************************************/
10 void LCD_init(void)
11 { //----先复位一下,然后再开始工作
12 1
13 1 P2 &= ~LCD_RST ; //p2_3-复位信号
14 1 delay_nms(20) ; //延时一会
15 1 P2 |= LCD_RST ;
16 1 delay_nms(1) ;
17 1 P2 |= LCD_PSB ; //通讯方式为8位数据并口
18 1 LCD_write_char(0x34,0); //34H--扩充指令操作
19 1 LCD_write_char(0x30,0); //30H--基本指令操作
20 1 LCD_write_char(0x01,0); //显示清屏
21 1 LCD_write_char(0x06,0); //指定在资料写入或读取时,光标的移动方向
22 1 LCD_write_char(0x0C,0); //显示开,开显示,关光标,不闪烁
23 1 // LCD_write_char(0x80,0); //显示光标移动设置
24 1 }
25
26 void LCD_en_write(void) //EN端产生一个高电平脉冲,写LCD
27 {
28 1
29 1 P2 |= LCD_EN; //EN=1
30 1 delay_nus(1);
31 1 P2 &= ~LCD_EN; //EN=0
32 1 }
33
34 /*-----------------------------------------------------------------------
35 LCD_write_char : 中英文字符串显示函数
36 LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
37 入命令
38 输入参数:*s :中英文字符串指针;
39 X、Y : 显示字符串的位置,X:0-15,Y:0-1
40 LCD第一行显示寄存器地址:0X80-0X87
41 LCD第二行显示寄存器地址:0X90-0X9F
42 LCD第三行显示寄存器地址:0X88-0X8F
43 LCD第四行显示寄存器地址:0X98-0X9F
44 -----------------------------------------------------------------------*/
45
46 void LCD_write_char(unsigned char command,unsigned char data11)
47 {
48 1 unsigned char command_temp;
49 1 unsigned char data_temp;
50 1 command_temp = command;
51 1 data_temp = data11;//数据和命令都给临时积存器
52 1 //接下来判断忙不忙呢?
53 1 LCD_wait_Ready();
54 1 // LCD_BUSY();
55 1 if (command == 0)//如果是命令
C51 COMPILER V7.09 12864_LCD 04/14/2009 09:36:32 PAGE 2
56 1 {
57 2 P2 &= ~LCD_EN; //EN=0高电平有效
58 2 P2 |= LCD_RS; //RS=1命令有效
59 2 P2 &= ~LCD_RW; //RW=0写入LCD
60 2 P0 = data_temp; //send 8bit 把数据传给端口
61 2 LCD_en_write(); //给一个脉冲,写入LCD
62 2 }
63 1 else
64 1 {
65 2 P2 &= ~LCD_EN; //EN=0
66 2 P2 &= ~LCD_RS; //RS=0数据有效
67 2 P2 &= ~LCD_RW; //RW=0 写
68 2 P0 = command_temp;//send command
69 2 LCD_en_write();
70 2 }
71 1 P2 |= LCD_RW; //read state
72 1 P2 ^= LCD_RS;
73 1 }
74
75
76
77 void LCD_wait_Ready(void) //等待LCD空闲
78 {
79 1 P2 &= ~LCD_RS; //RS=0
80 1 P2 |= LCD_RW; //RW=1
81 1 P2 |= LCD_EN; //EN=1
82 1 while (!( P0&0x80 ) == 0);
83 1 P2 &= ~LCD_EN; //EN=0
84 1 }
85
86
87
88 /*-----------------------------------------------------------------------
89 LCD_set_xy : 设置LCD显示的起始位置
90
91 输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-4
92 LCD第一行显示寄存器地址:0X80-0X8F
93 LCD第一行显示寄存器地址:0XC0-0XCF
94
95 编写日期 :2005
96 最后修改日期 :2005
97 -----------------------------------------------------------------------*/
98
99
100 void LCD_set_xy( unsigned char x, unsigned char y )
101 {
102 1 unsigned char address;
103 1 switch(y)
104 1 {
105 2 case 0:
106 2 address = 0x80 + x;
107 2 break;
108 2 case 1:
109 2 address = 0x90 + x;
110 2 break;
111 2 case 2:
112 2 address = 0x88 + x;
113 2 break;
114 2 case 3:
115 2 address = 0x98 + x;
116 2 break;
117 2 default:address = 0x80 + x;
C51 COMPILER V7.09 12864_LCD 04/14/2009 09:36:32 PAGE 3
118 2 }
119 1
120 1 LCD_write_char( address, 0 );
121 1
122 1 }
123
124 /*-----------------------------------------------------------------------
125 LCD_write_string : 中英文字符串显示函数
126
127 输入参数:*s :英文字符串指针;
128 X、Y : 显示字符串的位置
129
130 编写日期 :2005
131 最后修改日期 :2005
132 -----------------------------------------------------------------------*/
133
134 void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
135 {
136 1 LCD_set_xy( X, Y );
137 1 while (*s)
138 1 {
139 2 LCD_write_char( 0, *s );
140 2 s ++;
141 2 delay_nms(1);
142 2 }
143 1 }
144
145 //----------------------------图形显示
146 void PHOTO_DISP(const unsigned char *s)
147 {
148 1 COUNT3=0X02;
149 1 LCD_X=0X80;
150 1 for (;COUNT3!=0;COUNT3--)
151 1 {
152 2 LCD_Y=0X80;
153 2 COUNT2=0X20;//32
154 2 for (;COUNT2!=0;COUNT2--)
155 2 {
156 3 COUNT1=0X10;//16
157 3 WR_READY();
158 3 for (;COUNT1!=0;COUNT1--)
159 3 {
160 4 // send_data(*s++);
161 4 LCD_write_char(0,*s++);
162 4 }
163 3 LCD_Y+=1;
164 3 }
165 2 LCD_X=0X88;
166 2 }
167 1
168 1 LCD_write_char(0x36,0);
169 1 LCD_write_char(0x30,0);
170 1 }
171
172 //********************************************************************
173
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?