📄 lcd.lst
字号:
C51 COMPILER V7.50 LCD 05/09/2008 16:12:47 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\obj\lcd.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE src\lcd.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\lcd.lst) OBJECT(.\obj\lcd.o
-bj)
line level source
1
2 /********************************************************
3 LCD采用ST7920,RT240128GB
4 控制单片机AT89C51 11.0592MHz
5 2008.5.9 汪亲朋.
6 ************************************************************/
7 #include "reg52.h"
8 #define uchar unsigned char
9 #define uint unsigned int
10
11 #define PORTB P1
12 sbit WRT =P0^0;//低电平有效//
13 sbit RAD =P0^1;//低电平有效//
14 sbit CS =P0^2;//低电平有效//
15 sbit RS =P0^3;//1:数据寄存器 0:指令寄存器//
16 sbit RESET=P0^4;//低电平有效//正常工作应为高电平//
17 sbit BUSY =P0^5;//默认高电平为忙//
18 sbit INT =P0^6;//默认高电平触发中断//
19 /*
20 //////////////指令寄存器00H////////////////////////
21 #define 00H_DISPLAY (0x01)/////bit0//1:屏幕正常显示 0:屏幕反白显示////
22 #define 00H_FLASH (0x00<<1)//bit1//1:屏幕闪烁,闪烁时间由80H的BTR决定 0:屏幕不闪烁正常显示////
23 #define 00H_LCD_ON_OFF (0x00<<2)//bit2//1:屏幕开启 0:屏幕关闭////
24 #define 00H_MODEL (0x01<<3)//bit3//1:文字模式 0:绘图模式////
25 //#define 00H_SIO (0x00<<4)//bit4///
26 //#define 00H_IIC (0x00<<5)//bit5///
27 #define 00H_POWER_MODE (0x03<<6)//bit[7:6]//11:电源工作正常模式 00:电源工作关闭模式////
28 //////////////指令寄存器F0H////////////////////////
29 #define F0H_ASCII_BLOCK (0x02) //bit[1:0]//00:ASCII区块0//01:ASCII区块1//10:ASCII区块2//11:ASCII区块3///
-/
30 #define F0H_DECODE_MODE (0x00<<2)//bit2//1:全部以ASCII解码(00-FFH)//0:00-9FH视为ASCIIA0-FFH视为汉字码////
31 #define F0H_REWRTITE (0x00<<3)//bit3//1:开始写入//0:不动作////
32 #define F0H_FONT (0x00<<4)//bit[5:4]//00:选择简体(GB)(256KB)//01:选择繁体(GIB5)(512KB)//10:选择简体(GB
-)(512KB)//
33 #define F0H_SELECT_ROM (0x00<<6)//bit6//1:选择上部的256KB的ROM//0:选择下部的256KB的ROM//
34 #define F0H_JIANZI (0x01<<7)//bit7//1:正常使用//0:客户自建立ROM时使用//
35 //////////////指令寄存器10H////////////////////////
36 #define 10H_CURSOR_WIDTH(0x00)/////bit0//1:光标宽度固定为1个字节即8个Pixel//0:光标可以自适应宽度////
37 #define 10H_CURSOR_FLASH(0x00<<1)//bit1//1:光标闪烁,闪烁时间由80H的BTR决定 0:光标不闪烁正常显示////
38 #define 10H_CURSOR_DISP (0x00<<2)//bit2//1:光标显示//0:光标不显示////
39 #define 10H_CURSOR_WRT_M (0x01<<3)//bit3//1:写入数据到DDRAM时光标自动移位//0:不自动移位////
40 #define 10H_ZI_TYPE (0x01<<4)//bit4//1:正常字型//0:粗体字型/////
41 #define 10H_FAN_DISP (0x01<<5)//bit5//1:正常显示//0:汉字反白显示/////
42 #define 10H_ALIGN (0x01<<6)//bit6//1:文字对齐使能//0:文字对齐禁能////
43 #define 10H_CURSOR_RAD_M (0x00<<7)//bit7//1:从DDRAM读取数据时光标自动移位//0:不自动移位////
44 //////////////指令寄存器12H////////////////////////
45 #define 12H_MAKE_WORAD (0x03) //bit[1:0]//00:ASCII区块0//01:ASCII区块1//10:ASCII区块2//11:ASCII区块3////
46 //#define 12H_CURSOR_DISP (0x00<<2)//bit2//1:光标显示//0:光标不显示////
47 //#define 12H_CURSOR_WRT_M (0x01<<3)//bit3//1:写入数据到DDRAM时光标自动移位//0:不自动移位////
48 //#define 12H_ZI_TYPE (0x01<<4)//bit4//1:正常字型//0:粗体字型/////
49 //#define 12H_FAN_DISP (0x01<<5)//bit5//1:正常显示//0:汉字反白显示/////
50 //#define 12H_ALIGN (0x01<<6)//bit6//1:文字对齐使能//0:文字对齐禁能////
51 #define 12H_MOVE (0x01<<7)//bit7//1:先水平移动再垂直移动//0:先垂直移动再水平移动////
52 */
C51 COMPILER V7.50 LCD 05/09/2008 16:12:47 PAGE 2
53 /////////////////////////////
54 /////////////////////////////////////////////////////////////////
55 void LCD_NOP(void)
56 {
57 1 uchar i;
58 1 for(i=0;i<5;i++);
59 1 }
60 /////////////////////////////////////////////////////////////////
61 void Delay(int x)
62 {
63 1 int i,j;
64 1 for(j=0;j<x;j++)
65 1 {
66 2 for(i=0;i<250;i++);
67 2 }
68 1 }
69 /****************************** 读忙状态函数 ****************************
70 * 功能:在正常读写操作之前检测LCD模块的忙状态,
71 * DB7 = 0:LCD控制器空闲;DB7 = 1:LCD控制器忙
72 *************************************************************************/
73 /*
74 void Check_Busy(void)
75 {
76 CS=0;////选中LCD////
77 while(BUSY) ;////如果Busy的值为1,说明忙,则一直在此处等待,直到为0/////
78 }
79 */
80 //////////////////LCD写命令字///////////////////////////////////////
81 void LCD_Write_Com(uchar CMD)
82 {
83 1 // Check_Busy();///检测忙信号////
84 1 PORTB=CMD; /// 将命令字符送往数据口 ///
85 1 CS=0;
86 1 RAD=1;
87 1 RS=0;
88 1 WRT=0;
89 1 LCD_NOP();
90 1 WRT=1;
91 1 RS=1;
92 1 CS=1;
93 1 }
94 //////////////LCD写数据/////////////////////////////////////////////////
95 void LCD_Write_Dat(uchar x_data)
96 {
97 1 // Check_Busy();///检测忙信号////
98 1 PORTB=x_data; /// 将数据字符送往数据口 ///
99 1 CS=0;
100 1 RAD=1;
101 1 RS=1;
102 1 WRT=0;
103 1 LCD_NOP();
104 1 WRT=1;
105 1 RS=1;
106 1 CS=1;
107 1 }
108 //////////////LCD读取数据/////////////////////////////////////////////////
109 uchar LCD_Read_Dat(void)
110 {
111 1 uchar x_data;
112 1 // Check_Busy();///检测忙信号////
113 1 PORTB=0xff; /// 将数据0xff送往数据口 ///
114 1 CS=0;
C51 COMPILER V7.50 LCD 05/09/2008 16:12:47 PAGE 3
115 1 WRT=1;
116 1 RS=0;
117 1 RAD=0;
118 1 LCD_NOP();
119 1 x_data=PORTB;
120 1 RS=1;
121 1 RAD=1;
122 1 CS=1;
123 1 return(x_data);
124 1 }
125 //////////////LCD设定功能/////////////////////////////////////////////////
126 void LCD_Write_Funtion(uchar CMD,uchar x_data)
127 {
128 1 LCD_Write_Com(CMD);
129 1 LCD_Write_Dat(x_data);
130 1 }
131 //////////////LCD读取缓冲器/////////////////////////////////////////////////
132 uchar LCD_Read_Funtion(uchar CMD)
133 {
134 1 LCD_Write_Com(CMD);
135 1 return(LCD_Read_Dat());
136 1 }
137 //////////////LCD初始化/////////////////////////////////////////////////
138 void LCD_Init(void)
139 {
140 1 //初始化参数表:前面的是寄存器地址,后面的是参数
141 1 LCD_Write_Funtion(0x00,0xCD);//LCD基本显示功能设定 文本模式
142 1 LCD_Write_Funtion(0x01,0xF0);//中断准位(高电平) / 设定系统频率8MHz
143 1 LCD_Write_Funtion(0x02,0x10);//LCD内存读写速度与功能设定(读字形ROM)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -