📄 lcd_44.lst
字号:
C51 COMPILER V8.02 LCD_44 07/15/2007 21:31:14 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD_44
OBJECT MODULE PLACED IN ..\电源\lcd_44.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE lcd_44.c BROWSE DEBUG OBJECTEXTEND OBJECT(..\电源\lcd_44.obj)
line level source
1 //////////////////////////////////////////////////////////////
2 //
3 // 1602子程序
4 //函数说明:delay(uchar d) 延时2us程序
5 // lcd_wrcmd(uchar cmd) 写命令子程序
6 // lcd_wrdata(uchar lcddata) 写数据子程序
7 // lcd_h() 建立自定义字符库
8
9 //Version: 4.11
10 //说明 : 在Menu的界面支持OK键和快捷键
11
12 //Version: 4.2
13 // 说明 : 加入了TLC5620,当电压大于5V时出现Warning界面
14 //Time : 7/10 18:30
15
16
17 //////////////////////////////////////////////////////////////
18
19 #include<reg51.h>
20 #include<intrins.h>
21 #define uint unsigned int
22 #define uchar unsigned char
23 #define lcd_bus P0
24 #define key_bus P2
25
26 sbit rs=P2^5;
27 sbit rw=P2^6;
28 sbit e =P2^7;
29
30 //sbit rs=P3^2;
31 //sbit rw=P3^3;
32 //sbit e =P3^4;
33 sbit beep=P3^5;
34
35 sbit load=P2^0;
36 sbit sclk=P2^1;
37 sbit sdata=P2^2;
38
39 //年月度
40 uchar code hanzi[]={0x80,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,
41 0xf,0x9,0xf,0x9,0xf,0x9,0x11,0,
42 0x1C,0x14,0x1C,0x0,0x0,0x0,0x00,0x00};
43
44 uchar code str1[]="DDS BY C.J.H";
45 uchar code str2[]="INPUT FREQENCY:";
46 uchar code str3[]="INPUT PHASE:";
47 uchar code str4[]="1: FREQENCY"; //频率
48 uchar code str5[]="2: PHASE"; //相位
49 uchar code str6[]="3: AMPLITUDE"; //幅度
50 uchar code str7[]="4: HELP";
51 uchar code he[]=" A:OK B:DEL D:UP";
52 uchar code am[]="INPUT AMPLITUDE:";
53 uchar code warn[]="WARNING!!VOLTAGE < 5V";
54 uchar state=0;
55
C51 COMPILER V8.02 LCD_44 07/15/2007 21:31:14 PAGE 2
56
57 dac_tlc5620(uchar send_char)
58 {
59 1 uchar i;
60 1 load=1;
61 1 sclk=1;sdata=0;sclk=0;
62 1 sclk=1;sdata=0;sclk=0;
63 1 sclk=1;sdata=1;sclk=0;
64 1
65 1 for(i=0;i<8;i++)
66 1 {
67 2 sclk=1;
68 2 if(send_char&0x80) sdata=1;
69 2 else sdata=0;
70 2 sclk=0;
71 2 send_char=send_char<<1;
72 2 }
73 1 load=0;
74 1 load=1;
75 1
76 1 }
77
78
79 delay(uchar d)
80 {
81 1 while(--d);
82 1 }
83
84
85 /**********判断忙标志,返回的是一个位BF**********/
86 bit lcd_busy(void)
87 {
88 1 uchar bflag;
89 1 rs=0;
90 1 rw=1;
91 1 _nop_();
92 1 e=1;
93 1 _nop_();
94 1 lcd_bus=0xff;
95 1 bflag=lcd_bus;
96 1 e=0;
97 1 return(bit)(bflag&0x80); //BF=1 busy
98 1 }
99
100
101
102 /*********写命令,有两个参数,第一个是要写的命令控制字,
103 第二个是用来控制是否进行忙标志的判断。
104 busyflag=1:判断;为 0:不判断****************/
105 void lcd_wrcmd(uchar cmd)
106 {
107 1 while(lcd_busy());
108 1 lcd_bus=cmd;
109 1 rs=0;
110 1 rw=0;
111 1 _nop_();
112 1 e=1;
113 1 _nop_();
114 1 _nop_();
115 1 e=0;
116 1 }
117
C51 COMPILER V8.02 LCD_44 07/15/2007 21:31:14 PAGE 3
118
119 /************向液晶片写数据***************/
120 void lcd_wrdata( uchar lcddata)
121 {
122 1 while(lcd_busy());
123 1 lcd_bus=lcddata;
124 1 rs=1;
125 1 rw=0;
126 1 _nop_();
127 1 e=1;
128 1 _nop_();
129 1 _nop_();
130 1 e=0;
131 1 }
132
133 /****************初始化***************/
134 void lcd_ini(void)
135 {
136 1 lcd_wrcmd(0x38);
137 1 delay(100);
138 1 lcd_wrcmd(0x0c);
139 1 delay(100);
140 1 lcd_wrcmd(0x06);
141 1 delay(100);
142 1 lcd_wrcmd(0x01);
143 1 delay(100);
144 1 }
145
146 //////////////////////////////////////////////
147 //
148 // 生成汉字子模函数
149 // 当lcd_wrdata(0);显示第一个汉字
150 // 当lcd_wrdata(1);显示第二个汉字
151 //
152 //////////////////////////////////////////////
153 lcd_h()
154 {
155 1 uchar i;
156 1 lcd_wrcmd(0x40);
157 1 for(i=0;i<24;i++) lcd_wrdata(hanzi[i]);
158 1 }
159
160 /*****************读按键***************/
161 uchar getkey()
162 {
163 1 uchar keycode=0xff,temp,i;
164 1 key_bus=0x0f;
165 1 temp=key_bus&0x0f;
166 1 if(temp!=0x0f) //有键按下
167 1 {
168 2 beep=0;
169 2 key_bus=0x7f;
170 2 for(i=0;i<4;i++)
171 2 {
172 3 temp=key_bus&0x0f;
173 3 if(temp==0x07)
174 3 {
175 4 keycode=i*4;
176 4 break;
177 4 }
178 3 else if(temp==0x0b)
179 3 {
C51 COMPILER V8.02 LCD_44 07/15/2007 21:31:14 PAGE 4
180 4 keycode=i*4+1;
181 4 break;
182 4 }
183 3 else if(temp==0x0d)
184 3 {
185 4 keycode=i*4+2;
186 4 break;
187 4 }
188 3 else if(temp==0x0e)
189 3 {
190 4 keycode=i*4+3;
191 4 break;
192 4 }
193 3 key_bus=(key_bus>>1)|0x80;
194 3 }
195 2
196 2 while((key_bus&0x0f)!=0x0f) //等待释放
197 2 {
198 3 key_bus=0x0f;
199 3 }
200 2 beep=1;
201 2
202 2 }
203 1 return keycode;
204 1 }
205
206
207 welcome()
208 {
209 1
210 1 uchar temp,i;
211 1 lcd_wrcmd(0x0c);
212 1 lcd_wrcmd(0x82);
213 1
214 1 for(i=0;i<12;i++)
215 1 lcd_wrdata(str1[i]);
216 1 lcd_h();
217 1 lcd_wrcmd(0xc4);
218 1 lcd_wrdata('2'); lcd_wrdata('0');lcd_wrdata('0');lcd_wrdata('7');
219 1 lcd_wrdata(0);
220 1 lcd_wrdata('0');lcd_wrdata('7');
221 1 lcd_wrdata(1);
222 1 while(1)
223 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -