📄 lcd1602.lst
字号:
C51 COMPILER V8.08 LCD1602 04/16/2008 16:47:57 PAGE 1
C51 COMPILER V8.08, 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 <reg52.h>
2 #include <stdio.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 sbit rs=P2^1;
6 sbit lcden=P2^0;
7 sbit test = P1^0;
8 uchar table[] = "Cymometer";
9 uchar table1[] = "FR:";
10 uchar count;
11 uint fre, fre_tmp;
12 bit flag ;
13
14
15 void delay(uint x)
16 {
17 1 uint a,b;
18 1 for(a=x;a>0;a--)
19 1 for(b=10;b>0;b--);
20 1 }
21
22 void write_com(uchar com)
23 {
24 1 P0=com;
25 1 rs=0;
26 1 lcden=0;
27 1 delay(20);
28 1 lcden=1;
29 1 delay(20);
30 1 lcden=0;
31 1
32 1 }
33
34 void write_data(unsigned char date)
35 {
36 1 P0=date;
37 1 rs=1;
38 1 lcden=0;
39 1 delay(10);
40 1 lcden=1;
41 1 delay(10);
42 1 lcden=0;
43 1
44 1 }
45
46 void init()
47 {
48 1 write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口
49 1 delay(20);
50 1 write_com(0x0f); //显示光标及闪烁设置
51 1 delay(20);
52 1 write_com(0x06); //读或写完一个字符后地址指针自动加1,光标地址加1
53 1 delay(20);
54 1 write_com(0x01); //清屏
55 1 delay(20);
C51 COMPILER V8.08 LCD1602 04/16/2008 16:47:57 PAGE 2
56 1 }
57
58
59 void int0(void) interrupt 2 using 0
60 {
61 1
62 1 EA = 0;
63 1 fre_tmp++;
64 1 EA = 1;
65 1
66 1 }
67
68
69 void time0(void ) interrupt 1 using 1
70 {
71 1 EA = 0;
72 1 TR0 = 0;
73 1 if(count == 19 )
74 1 {
75 2 count=0;
76 2 fre = fre_tmp;
77 2 fre_tmp = 0;
78 2 TH0 = 0x4b;
79 2 TL0 = 0xff;
80 2 TR0 = 1;
81 2 flag = 1;
82 2 }
83 1 else
84 1 {
85 2 count++;
86 2 TH0 = 0x4b;
87 2 TL0 = 0xff;
88 2 TR0 = 1;
89 2 flag = 0 ;
90 2 }
91 1 EA = 1;
92 1 }
93
94
95
96 //按指定位置显示一个字符
97 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
98 {
99 1 Y &= 0x1;
100 1 X &= 0xF; //限制X不能大于15,Y不能大于1
101 1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
102 1 X |= 0x80; //算出指令码
103 1 write_com(X); //这里不检测忙信号,发送地址码
104 1 write_data(DData);
105 1 }
106
107 //按指定位置显示一串字符
108 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)
109 {
110 1 unsigned char ListLength;
111 1
112 1 ListLength = 0;
113 1 Y &= 0x1;
114 1 X &= 0xF; //限制X不能大于15,Y不能大于1
115 1 while (DData[ListLength]>0x20) //若到达字串尾则退出
116 1 {
117 2 if (X <= 0xF) //X坐标应小于0xF
C51 COMPILER V8.08 LCD1602 04/16/2008 16:47:57 PAGE 3
118 2 {
119 3 DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
120 3 ListLength++;
121 3 X++;
122 3 }
123 2 }
124 1 }
125
126
127
128 void main()
129 {
130 1 uchar i,timeflag;
131 1 uchar temp[4] ;
132 1 TMOD = 0x01;
133 1 TH0 = 0x4b;
134 1 TL0 = 0xff;
135 1 EA = 1;
136 1
137 1 EX1 = 1;IT1 = 1;
138 1 ET0 = 1;
139 1 TR0 =1;
140 1
141 1 init();
142 1 write_com(0x80);
143 1 delay(20);
144 1 // tmp = 1;
145 1 // sprintf(s,"F%dR",1 );
146 1
147 1 for(i=0; i<9; i++)
148 1 {
149 2 write_data(table[i]);
150 2 delay(20);
151 2 }
152 1 write_com(0xc0);
153 1 for(i=0; i<3; i++)
154 1 {
155 2 write_data(table1[i]);
156 2 delay(20);
157 2 }
158 1 while(1)
159 1 {
160 2 if(flag == 1)
161 2 {
162 3 test = !test;
163 3 //sprintf( temp, "%d", fre );
164 3 temp[0]=(fre/1000)|0x30;
165 3 temp[1]=(fre/100%10)|0x30;
166 3 temp[2]=(fre/10%10)|0x30;
167 3 temp[3]=(fre%10)|0x30;
168 3 DisplayOneChar(4,1,temp[0]);
169 3 DisplayOneChar(5,1,temp[1]);
170 3 DisplayOneChar(6,1,temp[2]);
171 3 DisplayOneChar(7,1,temp[3]);
172 3
173 3 }
174 2 //delay(100);
175 2 }
176 1
177 1 }
*** WARNING C280 IN LINE 130 OF LCD1602.C: 'timeflag': unreferenced local variable
C51 COMPILER V8.08 LCD1602 04/16/2008 16:47:57 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 459 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 11
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -