📄 lcd1602.lst
字号:
C51 COMPILER V8.02 LCD1602 08/11/2007 18:24:45 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1602.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include "LCD1602.h"
3 #include "uart.h"
4 #include "i2c.h"
5 #define uchar unsigned char
6 #define uint unsigned int
7 #define NOACK 0xaa
8 uchar LMH=0; //高低速
9 uchar FILESTATE=0;//文件状态
10 uchar filechoice=0;
11 uchar filenum=0;
12 uchar filenum1=0; //文件序号
13 uchar filename=0; //文件名
14 uchar filetotal=0; //文件总数
15 uint num ;
16 uint time;
17
18 void Delay1ms(unsigned int count)
19 {
20 1 unsigned int i,j;
21 1 for(i=0;i<count;i++)
22 1 for(j=0;j<120;j++);
23 1 }
24 unsigned char key_val(unsigned char key)
25 {
26 1 switch(key)
27 1 {
28 2 case 0xff: return 0;break;
29 2 case 0xee: return 1;break;
30 2 case 0xed: return 2;break;
31 2 case 0xeb: return 3;break;
32 2 case 0xe7: return 4;break;
33 2 case 0xde: return 5;break;
34 2 case 0xdd: return 6;break;
35 2 case 0xdb: return 7;break;
36 2 case 0xd7: return 8;break;
37 2 case 0xbe: return 9;break;
38 2 case 0xbd: return 10;break;
39 2 case 0xbb: return 11;break;
40 2 case 0xb7: return 12;break;
41 2 case 0x7e: return 13;break;
42 2 case 0x7d: return 14;break;
43 2 case 0x7b: return 15;break;
44 2 case 0x77: return 16;break;
45 2 default: return 0;break;
46 2 }
47 1 }
48 unsigned char key_scan(void)
49 {
50 1 unsigned char row, col;
51 1 P1 = 0xF0;
52 1 row = P1&0xF0;
53 1 row = row&0xF0;
54 1 P1 = 0x0F;
55 1 col = P1&0x0F;
C51 COMPILER V8.02 LCD1602 08/11/2007 18:24:45 PAGE 2
56 1 col = col&0x0F;
57 1 return(row|col);
58 1 }
59
60 uchar key()
61 {
62 1 uchar keyvalue,keyvalue1;
63 1 keyvalue=key_scan();
64 1 if(keyvalue)
65 1 {
66 2 Delay1ms(50);
67 2 keyvalue1=key_scan(); //去抖动
68 2 if(keyvalue==keyvalue1){
69 3 return key_val(keyvalue);
70 3
71 3 }
72 2 }
73 1 return 0;
74 1 }
75
76 void Uart_init(void)
77 {
78 1 TMOD=0x20;
79 1
80 1
81 1 TH1=0xFD;//9600 11.0592MHz
82 1 TL1=0xFD;
83 1
84 1 TH1=0xF3; //2400 12MHz
85 1 //TL1=0xF9; //9600 , 12MHz
86 1 PCON=0x00;
87 1 TR1=1;
88 1 SCON=0x50;
89 1 }
90 /*
91 void Uart_init(void)
92 {
93 TMOD=0x20;
94 TH1=0xE6;
95 TL1=0xE6; //1200 , 12MHz
96 PCON=0x00;
97 TR1=1;
98 SCON=0x50;
99 }
100 */
101
102 // 查询方式从串口接收数据
103 uchar Uart_getchar(void)
104 {
105 1 uint i=0;
106 1 while(!RI){i++;if(i>0x2fff)return 0;}//
107 1 RI=0;
108 1 return SBUF;
109 1 }
110
111 // 查询方式向串口发送数据
112 void Uart_putchar(uchar ch)
113 {
114 1 SBUF=ch;
115 1 while(!TI);
116 1 TI=0;
117 1 }
C51 COMPILER V8.02 LCD1602 08/11/2007 18:24:45 PAGE 3
118 // 向串口发送一个字符串
119 void Uart_putString(char *pt)
120 {
121 1 while(*pt)
122 1 Uart_putchar(*pt++);
123 1 }
124 //向串口发送一个整型数
125 void Uart_put_uint(uint num)
126 {
127 1 uchar a;
128 1 a=(num>>8)&0xff;
129 1 Uart_putchar(a);
130 1 a=num&0xff;
131 1 Uart_putchar(a);
132 1 }
133 //从串口接收一个整型数
134 uint Uart_get_uint(void)
135 {
136 1 uint num;
137 1 num=Uart_getchar();
138 1 num=num<<8;
139 1 num+=Uart_getchar();
140 1 return num;
141 1 }
142 //浮点数显示
143 void floatDisplay(uint t,uchar i)
144 {
145 1 uchar a[6];
146 1 a[0]=(t/10000)%10+'0'; //取得整数值到数组
147 1 a[1]=(t/1000)%10+'0'; //取得整数值到数组
148 1 a[2]=(t/100)%10+'0';
149 1 a[3]=(t/10)%10+'0';
150 1 a[4]=(t/1)%10+'0';
151 1 a[5]='\0';
152 1 switch(i)
153 1 {
154 2 case 0:LCD_Print(2,0,a);break;
155 2 case 1:LCD_Print(11,0,a);break;
156 2 case 2:LCD_Print(2,1,a);break;
157 2 default:break;
158 2 }
159 1 }
160 //显示单个数字函数************************************************************************
161 void LCD_Printnum(unsigned char x, unsigned char y,unsigned char num)
162 {
163 1 uchar a[2];
164 1 a[1]='\0';
165 1 a[0]=num+'0';
166 1 LCD_Print(x,y,a);
167 1 }
168 //XYZ坐标界面显示
169 void xyzDisplay(uchar i)
170 {
171 1 uint len,lastlen;
172 1 uchar count;
173 1 uchar j=0;
174 1 LCD_Print(0,0,"X:00000 Y:00000");
175 1 if(LMH==0)LCD_Print(0,1,"Z:00000 LOW");
176 1 else if(LMH==1)LCD_Print(0,1,"Z:00000 HI ");
177 1 count=key();
178 1 RI=0;
179 1 lastlen=len=0;
C51 COMPILER V8.02 LCD1602 08/11/2007 18:24:45 PAGE 4
180 1 while(count!=10&&count!=14)
181 1 {
182 2 switch(count)
183 2 {
184 3 case 2: //开胶
185 3 if(i==0)
186 3 {
187 4 Uart_putchar('k');
188 4 while(count==key());
189 4 Uart_putchar('k'); //关胶
190 4 }
191 3 break;
192 3 case 3: //X+
193 3 RI=0;
194 3 Uart_putchar('5');
195 3 while(count==key())
196 3 {
197 4 RI=0;
198 4 Uart_putchar('y');
199 4 len=Uart_get_uint();
200 4 floatDisplay(len,0);
201 4 }
202 3 for(j=0;j<5;j++)Uart_putchar('x');
203 3 break;
204 3 case 12: //X-
205 3 RI=0;
206 3 Uart_putchar('6');
207 3 while(count==key())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -