📄 lcd.lst
字号:
C51 COMPILER V7.50 LCD 11/27/2005 23:13:44 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /* LCD.C File
2 Created by Computer-lov. Date: 2005.3.19
3 Last edited date: 2005.5.31
4 Copyright (c) 2005 Computer-lov
5 version 1.1
6 */
7
8 #include "AT89C51SND1C.H"
9 #include "hardware.h"
10 #include "LCD.H"
11 #include "file_system.h"
12 #include "unicode.h"
13
14 unsigned char black; //是否反显
15
16 ////////////////////////// 等待LCD忙碌 ////////////////////////////////////////////////////////
17 void wait_LCD_busy(void)
18 {
19 1 do
20 1 {
21 2 LCD_DATA=0xFF;
22 2 LCD_EN=0;
23 2 LCD_RS=0;
24 2 LCD_RW=1;
25 2 LCD_EN=1;
26 2 }while(LCD_DATA&0x80);
27 1 }
28 ////////////////////////////////////////////////////////////////////////////////////////////////
29
30 //////////////////////////////////////// 写一个字节显示数据 ///////////////////////////////
31 void write_LCD_data(unsigned char lcd_data)
32 {
33 1 wait_LCD_busy();
34 1 LCD_RS=1;
35 1 LCD_RW=0;
36 1 LCD_EN=1;
37 1 LCD_DATA=lcd_data;
38 1 LCD_EN=0;
39 1 LCD_DATA=0xFF;
40 1 }
41 //////////////////////////////////////////////////////////////////////////////////////////////
42
43 ///////////////////////////////////////////////////////////////////////////////////////////////
44 /*unsigned char read_LCD_data(void)
45 {
46 unsigned char read_data;
47 wait_LCD_busy();
48 LCD_DATA=0xFF;
49 LCD_RS=1;
50 LCD_RW=1;
51 LCD_EN=1;
52 read_data=LCD_DATA;
53 LCD_EN=0;
54 return read_data;
55 }*/
C51 COMPILER V7.50 LCD 11/27/2005 23:13:44 PAGE 2
56 ////////////////////////////////////////////////////////////////////////////////////////////////
57
58 /////////////////////////// 写LCD 指令 ////////////////////////////////////////////////////
59 void write_LCD_command(unsigned char command)
60 {
61 1 wait_LCD_busy();
62 1 LCD_RS=0;
63 1 LCD_RW=0;
64 1 LCD_EN=1;
65 1 LCD_DATA=command;
66 1 LCD_EN=0;
67 1 LCD_DATA=0xFF;
68 1 }
69 /////////////////////////////////////////////////////////////////////////////////////////////////
70
71 /////////////////////////// LCD清屏 ////////////////////////////////////////////////////////////
72 void LCD_cls(void)
73 {
74 1 write_LCD_command(0x01);
75 1 }
76 ////////////////////////////////////////////////////////////////////////////////////////////////
77
78 //////////////////////////// LCD 从第一行开始显示 ///////////////////////////////////////////
79 void LCD_go_home(void)
80 {
81 1 write_LCD_command(0x80);
82 1 }
83 ////////////////////////////////////////////////////////////////////////////////////////////////
84
85 //////////////////////////// LCD 换到第二行开始 /////////////////////////////////////////////
86 void LCD_line_feed(void)
87 {
88 1 write_LCD_command(0x90);
89 1 }
90 ////////////////////////////////////////////////////////////////////////////////////////////////
91
92 //////////////////////////// LCD 初始化 //////////////////////////////////////////////////////
93 void LCD_initial(void)
94 {
95 1 wait_LCD_busy();
96 1 write_LCD_command(0x18);
97 1 write_LCD_command(0x01);
98 1 write_LCD_command(0x0C);
99 1 LCD_cls();
100 1 black=0;
101 1 prints("开机......");
102 1 write_LCD_command(0x8E);
103 1 write_LCD_data(' ');
104 1 }
105 /////////////////////////////////////////////////////////////////////////////////////////////////
106
107 //////////////////////////// LCD显示一字符串 ////////////////////////////////////////////////
108 void prints(unsigned char * temp)
109 {
110 1 while((*temp)!='\0')
111 1 {
112 2 write_LCD_data(*temp);
113 2 temp++;
114 2 }
115 1 }
116 /////////////////////////////////////////////////////////////////////////////////////////////////
117
C51 COMPILER V7.50 LCD 11/27/2005 23:13:44 PAGE 3
118 ////////////////////////// LCD显示一个长整数 /////////////////////////////////////////////////
119 void printf(unsigned long int x)
120 {
121 1 signed char i;
122 1 unsigned char display_buffer[10];
123 1 display_buffer[10]=0;
124 1 for(i=9;i>=0;i--)
125 1 {
126 2 display_buffer[i]='0'+x%10;
127 2 x/=10;
128 2 }
129 1 for(i=0;i<9;i++)
130 1 {
131 2 if(display_buffer[i]!='0')break;
132 2 }
133 1 for(;i<10;i++)write_LCD_data(display_buffer[i]);
134 1 }
135 /////////////////////////////////////////////////////////////////////////////////////////////////
136
137 ////////////////////////////// 将Unicode编码转换为 GB编码 ///////////////////////////////////
138 void change_code(unsigned int * x)
139 {
140 1 unsigned int a,b,c;
141 1 if(((*x)>=0x0020)&&((*x)<=0x007E)){if((*x)>='a'&&(*x)<='z')(*x)-='a'-'A';*x+=0xA380;return;}
142 1 if((*x)<Unicode[0][0]){*x=0x3F3F;return;}
143 1 if((*x)>Unicode[UNICODE_MAX-1][0]){*x=0x3F3F;return;}
144 1 a=0;
145 1 b=UNICODE_MAX-1;
146 1 do //采用二分查表法,因为该表为顺序表
147 1 {
148 2 c=(a+b)/2;
149 2 if((*x)==Unicode[c][0]){*x=Unicode[c][1];return;}
150 2 if((*x)<Unicode[c][0]){b=(a+b)/2;}
151 2 else {a=(a+b+1)/2;}
152 2 }while(a!=b);
153 1 if((*x)==Unicode[a][0]){*x=Unicode[a][1];return;}
154 1 *x=0x3F3F; //如果找不到,则显示??
155 1 }
156 ////////////////////////////////////////////////////////////////////////////////////////////////////
157
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 597 ----
CONSTANT SIZE = 29795 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 21
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 + -