📄 lcd1602a.lst
字号:
C51 COMPILER V7.50 LCD1602A 11/23/2007 16:35:08 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD1602A
OBJECT MODULE PLACED IN LCD1602A.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1602A.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //-----------------------------------------------------------------------------
2 //程序描述:
3 // 这个程序可以在该液晶模块上显示字符:" BT F020 V1.0 www.xhl.com.cn"
4 // 此程序用4位数据线来驱动液晶
5 // 液晶接线方法 :1脚接地;2脚接+5V;3脚通过1个10K电阻接+5v,通过1个430欧电阻接地;
6 // 15脚接地;16脚通过1个15R电阻接+5v。液晶别的引脚直接接相应的数据或控制信号线。
7 //作者:ZDP
8 //时间:2005-11-30
9 //版本:V1.0
10 //-----------------------------------------------------------------------------
11 // 头文件包含
12 //-----------------------------------------------------------------------------
13 #include <c8051f020.h>
14
15 //-----------------------------------------------------------------------------
16 //全局变量定义
17 //-----------------------------------------------------------------------------
18
19
20 unsigned long x; //"www.xhl.com.cn"
21 unsigned char xdata Netdata[16]={0x77,0x77,0x77,0x2e,0x78,0x68,0x6c,0x2e,0x63,0x6f,
22 0x6d,0x2e,0x63,0x6e};
23
24 //" BT F020 V1.0 "
25 unsigned char xdata NCDdata[17]={0x20,0x20,0x42,0x54,0x20,0x46,0x30,0x32,0x30,0x20,
26 0x56,0x31,0x2e,0x30,0x20,0x20};
27
28 unsigned char *lcdpoint; //指向 lcddata数组的指针
29 unsigned char lcd_data_count;
30 //-----------------------------------------------------------------------------
31 // 函数定义
32 //-----------------------------------------------------------------------------
33 void SYSCLK_Init (void);
34 void PORT_Init (void);
35 void LCD_Init(void);
36 //-----------------------------------------------------------------------------
37 // 主程序
38 //-----------------------------------------------------------------------------
39 void main (void)
40 {
41 1 static unsigned char data1;
42 1 WDTCN = 0xde;
43 1 WDTCN = 0xad; //禁止看门狗定时器
44 1
45 1 SYSCLK_Init (); // 系统时钟初始化
46 1
47 1 PORT_Init (); // 交叉开关和通用I/O口初始化
48 1
49 1 while(1){
50 2 LCD_Init(); //LCD初始化
51 2 P2 = 0xA0; //准备送数据
52 2 for(x=0;x<5000;x++);
53 2 lcdpoint=&NCDdata; //取地址
54 2 for(lcd_data_count=14;lcd_data_count>0;lcd_data_count--)//显示第一行字符
55 2 {
C51 COMPILER V7.50 LCD1602A 11/23/2007 16:35:08 PAGE 2
56 3 data1=*lcdpoint; //读出数据
57 3 P3 = data1; //写数据到端口
58 3 P2 = 0X20;
59 3 P2 = 0XA0; //控制LCD
60 3 lcdpoint++;
61 3 for(x=0;x<5000;x++);
62 3 }
63 2 P2 = 0X80;
64 2 P3 = 0xc0;
65 2 P2 = 0x00;
66 2 P2 = 0x80;
67 2 for(x=0;x<1000;x++);
68 2 lcdpoint=&Netdata;
69 2 for(lcd_data_count=14;lcd_data_count>0;lcd_data_count--)//显示第一行字符
70 2 {
71 3 data1=*lcdpoint;
72 3 P3 = data1;
73 3 //-----------------------------------------------------
74 3 // P2 = 0x20; /*原来的LCD程序*/
75 3 // P2 = 0xA0;
76 3 //-----------------------------------------------------
77 3 P2 = 0xA0; //修改后的LCD程序
78 3 P2 = 0x20;
79 3 //------------------------------------------------------/
80 3 lcdpoint++;
81 3 for(x=0;x<5000;x++);
82 3 }
83 2 }
84 1 }
85
86 //-----------------------------------------------------------------------------
87 //函数名称: SYSCLK_Init ()
88 //函数功能: 系统时钟初始化
89 //入口参数: 无
90 //出口参数: 无
91 //全局变量引用: 无
92 //调用模块: 无
93 //-----------------------------------------------------------------------------
94 //
95
96 void SYSCLK_Init (void)
97 {
98 1 //int i; // delay counter
99 1
100 1 //OSCXCN = 0x67; // start external oscillator with
101 1 // 22.1184MHz crystal
102 1
103 1 //for (i=0; i < 256; i++) ; // Wait for osc. to start up
104 1
105 1 //while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
106 1
107 1 //OSCICN = 0x88;
108 1
109 1 OSCICN = 0x05; // 系统时钟初始化为片内的 24.5MHz / 8
-
110 1 }
111
112 //-----------------------------------------------------------------------------
113 //函数名称: PORT_Init ()
114 //函数功能: 通用I/O口及交叉开关初始化
115 //入口参数: 无
116 //出口参数: 无
C51 COMPILER V7.50 LCD1602A 11/23/2007 16:35:08 PAGE 3
117 //全局变量引用: 无
118 //调用模块: 无
119 //-----------------------------------------------------------------------------
120
121 void PORT_Init (void)
122 {
123 1
124 1 XBR0 = 0x00; // 没有选择数字外设
125 1 XBR2 = 0x40;
126 1 P2MDOUT = 0xe0; // P2口设为推挽方式
127 1 }
128 //-----------------------------------------------------------------------------
129 //函数名称: LCD_Init ()
130 //函数功能: LCD初始化
131 //入口参数: 无
132 //出口参数: 无
133 //全局变量引用: 无
134 //调用模块: 无
135 //-----------------------------------------------------------------------------
136 void LCD_Init(void)
137 {
138 1 P2 = 0X80;
139 1 for(x=0;x<50000;x++);
140 1 //P7 = 0x30; /*一行显示*/
141 1 P3 = 0x38; /*两行显示*/
142 1 P2 = 0X00;//0x08;
143 1 P2 = 0X80;//0x09;
144 1 for(x=0;x<1000;x++);
145 1 P3 = 0x0e;
146 1 P2 = 0x00;
147 1 P2 = 0x80;
148 1 for(x=0;x<1000;x++);
149 1 P3= 0x06;
150 1 P2 = 0x00;
151 1 P2 = 0x80;
152 1 for(x=0;x<5000;x++);
153 1 P3 = 0x01;
154 1 P2 = 0x00;
155 1 P2 = 0x80;
156 1 for(x=0;x<5000;x++);
157 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 657 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 33 ----
PDATA SIZE = ---- ----
DATA SIZE = 9 ----
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 + -