📄 lcd_5110.lst
字号:
C51 COMPILER V8.02 LCD_5110 04/04/2009 19:09:35 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD_5110
OBJECT MODULE PLACED IN lcd_5110.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE lcd_5110.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<c8051f020.h>
2
3 sbit sce = P2^0; //片选
4 sbit res = P2^1; //复位,0复位
5 sbit dc = P2^2; //1写数据,0写指令
6 sbit sdin = P2^3; //数据
7 sbit sclk = P2^5; //时钟
8
9
10 unsigned char code hanzi[]={
11 /*-- 文字: 吴 --*/
12 /*-- Trebuchet MS9; 此字体下对应的点阵为:宽x高=12x12 --*/
13 /*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
14 0x80,0xA0,0xAF,0xA9,0xA9,0xE9,0xA9,0xA9,0xAF,0xA0,0x80,0x00,0x04,0x04,0x04,0x02,
15 0x01,0x00,0x01,0x02,0x02,0x04,0x04,0x00,
16
17 /*-- 文字: 琼 --*/
18 /*-- Trebuchet MS9; 此字体下对应的点阵为:宽x高=12x12 --*/
19 /*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
20 0x12,0xFE,0x12,0x12,0x02,0x7A,0x4A,0xCB,0x4A,0x7A,0x02,0x00,0x02,0x03,0x01,0x05,
21 0x02,0x05,0x04,0x07,0x00,0x01,0x06,0x00,
22 /*-- 文字: 你 --*/
23 /*-- Trebuchet MS9; 此字体下对应的点阵为:宽x高=12x12 --*/
24 /*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
25 0x10,0x08,0xFC,0x13,0x88,0x66,0x05,0xF4,0x04,0x64,0x8C,0x00,0x00,0x00,0x07,0x01,
26 0x00,0x04,0x04,0x07,0x00,0x00,0x01,0x00,
27
28 /*-- 文字: 好 --*/
29 /*-- Trebuchet MS9; 此字体下对应的点阵为:宽x高=12x12 --*/
30 /*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
31 0xC4,0xBC,0x07,0xC4,0x3C,0x21,0x21,0xF9,0x25,0x23,0x20,0x00,0x04,0x02,0x01,0x01,
32 0x02,0x00,0x04,0x07,0x00,0x00,0x00,0x00,
33 /*-- 文字: ! --*/
34 /*-- Trebuchet MS9; 此字体下对应的点阵为:宽x高=12x12 --*/
35 /*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
36 0x00,0x1C,0x7E,0x7E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,
37 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
38
39
40
41
42
43 };
44
45 void SYSCLK_Init (void)
46 {
47 1 int i; // 延时计数器
48 1 WDTCN = 0xde; // 禁止看门狗
49 1 WDTCN = 0xad;
50 1 OSCXCN = 0x67; // 启动外部时钟(11.0592MHZ)
51 1 for (i=0; i < 256; i++) ;
52 1 while (!(OSCXCN & 0x80)) ; // 等待晶振稳定
53 1 OSCICN = 0x88; // 选择外部晶振作为系统时钟
54 1 // 允许时钟丢失检测
55 1 }
C51 COMPILER V8.02 LCD_5110 04/04/2009 19:09:35 PAGE 2
56
57 void Port_Init(void)
58 {
59 1 P0MDOUT=0Xff; //CS,DCLOCK,DOUT配置成推挽输出方式
60 1 P2MDOUT=0Xff;
61 1 P3MDOUT=0Xff;
62 1 P74OUT=0xff; //p5口做液晶数据口,p4做液晶控制口
63 1 XBR2 = 0x40; //使能交叉开关和弱上拉
64 1 }
65 void delay_1ms(void)//1ms延时函数
66 {
67 1 unsigned int i;
68 1 for (i=0;i<500;i++) ;
69 1 }
70
71 /*--------------------------------------------
72 LCD_write_byte: 使用SPI接口写数据到LCD
73 输入参数:dt:写入的数据;
74 command :写数据/命令选择;
75 编写日期:20080918
76 ----------------------------------------------*/
77 void LCD_write_byte(unsigned char dt, unsigned char command)
78 {
79 1 unsigned char i;
80 1 sce=0;
81 1 dc=command;
82 1 for(i=0;i<8;i++)
83 1 {
84 2 if(dt&0x80)
85 2 sdin=1;
86 2 else
87 2 sdin=0;
88 2 dt=dt<<1;
89 2 sclk=0;
90 2 sclk=1;
91 2 }
92 1 dc=1;
93 1 sce=1;
94 1 sdin=1;
95 1 }
96 /*---------------------------------------
97 LCD_init: 3310LCD初始化
98 编写日期:20080918
99 ----------------------------------------- */
100 void LCD_init(void)
101 {
102 1 res=0;
103 1 delay_1ms();
104 1 res=1;
105 1 LCD_write_byte(0x21,0);//初始化Lcd,功能设定使用扩充指令
106 1 LCD_write_byte(0xd0,0);//设定液晶偏置电压
107 1 LCD_write_byte(0x20,0);//使用基本指令
108 1 LCD_write_byte(0x0C,0);//设定显示模式,正常显示
109 1 }
110 /*-------------------------------------------
111 LCD_set_XY: 设置LCD坐标函数
112 输入参数:X:0-83 Y:0-5
113 编写日期:20080918
114 ---------------------------------------------*/
115 void LCD_set_XY(unsigned char X, unsigned char Y)
116 {
117 1 LCD_write_byte(0x40 | Y, 0);// column
C51 COMPILER V8.02 LCD_5110 04/04/2009 19:09:35 PAGE 3
118 1 LCD_write_byte(0x80 | X, 0);// row
119 1 }
120 /*------------------------------------------
121 LCD_clear: LCD清屏函数
122 编写日期:20080918
123 --------------------------------------------*/
124 void LCD_clear(void)
125 {
126 1 unsigned char t;
127 1 unsigned char k;
128 1 LCD_set_XY(0,0);
129 1 for(t=0;t<6;t++)
130 1 {
131 2 for(k=0;k<84;k++)
132 2 {
133 3 LCD_write_byte(0x00,1);
134 3
135 3 }
136 2 }
137 1 }
138 /*---------------------------------------------
139 LCD_write_shu: 显示8(宽)*16(高)点阵列数字字母符号等半角类
140 输入参数:c:显示的字符;
141 编写日期:20080918
142 -----------------------------------------------*/
143 /*void LCD_write_shu(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
144 {
145 unsigned char i;
146
147 LCD_set_XY(row*8, page);// 列,页
148 for(i=0; i<8;i++)
149 {
150 LCD_write_byte(shuzi[c*16+i],1);
151 }
152
153 LCD_set_XY(row*8, page+1);// 列,页
154 for(i=8; i<16;i++)
155 {
156 LCD_write_byte(shuzi[c*16+i],1);
157 }
158 } */
159 /*---------------------------------------------
160 LCD_write_hanzi: 显示16(宽)*16(高)点阵列汉字等半角类
161 输入参数:c:显示的字符;
162 编写日期:20080918
163 -----------------------------------------------*/
164 void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
165 {
166 1 unsigned char i;
167 1
168 1 LCD_set_XY(row*12, page);// 列,页
169 1 for(i=0; i<12;i++)
170 1 {
171 2 LCD_write_byte(hanzi[c*24+i],1);
172 2 }
173 1
174 1 LCD_set_XY(row*12, page+1);// 列,页
175 1 for(i=12; i<24;i++)
176 1 {
177 2 LCD_write_byte(hanzi[c*24+i],1);
178 2 }
179 1 }
C51 COMPILER V8.02 LCD_5110 04/04/2009 19:09:35 PAGE 4
180 main()
181 {
182 1 unsigned char k;
183 1 SYSCLK_Init ( );
184 1 Port_Init( );
185 1 res=0;
186 1 for(k=0;k<250;k++);
187 1 res=1;
188 1 LCD_init(); //初始化LCD模块
189 1 LCD_clear(); //清屏幕
190 1 LCD_write_hanzi(0,0,0); //吴
191 1 LCD_write_hanzi(1,0,1); //琼
192 1 LCD_write_hanzi(2,0,2); //你
193 1 LCD_write_hanzi(3,0,3); //好
194 1 LCD_write_hanzi(4,0,4); //!
195 1
196 1 while(1)
197 1 {
198 2
199 2 }
200 1 }
201
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 310 ----
CONSTANT SIZE = 120 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -