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