📄 1602.lst
字号:
C51 COMPILER V7.06 1602 07/23/2007 20:16:49 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 1602
OBJECT MODULE PLACED IN 1602.OBJ
COMPILER INVOKED BY: E:\单片机\kcai\安装后\C51\BIN\C51.EXE 1602.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg52.h>
2 #include"lcd.h"
3 #define uchar unsigned char
4 #define uint unsigned int
5 uchar finish;//解码标志位
6 uchar address1,address2,data1,data2;//地址位,反地址位,数据位,反数据位
7 sbit P32=P3^2;
8 uchar code tab1[]="the lcd_1602 is ";
9 uchar code tab2[]="made by xiao yu ";
10 uchar tab3[]=" jie ma ";
11 uchar tab4[]=" 0000.0000 ";
12 uchar code number[]="0123456789abcdef.";
13 uchar tt[32];//32位码
14 uchar d[9];//数据缓冲
15 uchar led[8];//数据缓冲
16 sbit P10=P1^0;//右灯
17 sbit P11=P1^1;//前灯
18 sbit P12=P1^2;//后灯
19 sbit P13=P1^3;//左灯
20 sbit P14=P1^4;
21 sbit P15=P1^5;
22 sbit P16=P1^6;
23 sbit P17=P1^7;
24 void display(void);
25 void count(void);
26 void add(void);
27
28 void main(void)
29 {
30 1 uchar i,j;
31 1 /*lcd的初始部分*/
32 1 P1=0xff;
33 1 P1=0x0f;//停止
34 1 init_lcd();//初始化
35 1 clear_lcd();//清屏
36 1 gotoxy(1,0);//显示第一行
37 1 for(i=0;i<16;i++){write_lcd_data(tab1[i]);delay(200);}
38 1 //write_lcd_command(0x0e);//光标显示,字符不闪烁
39 1 gotoxy(2,0);//显示第二行
40 1 for(i=0;i<16;i++){write_lcd_data(tab2[i]);delay(200);}
41 1 write_lcd_command(0x0e);//光标显示,字符不闪烁
42 1 write_lcd_command(0x02);//光标回到左上角
43 1 for(i=0;i<32;i++)
44 1 {
45 2 if(i==16)
46 2 {gotoxy(2,0); //光标到第二行0列
47 3 }
48 2 write_lcd_command(0x14);//光标移一位
49 2 delay(200);
50 2 }
51 1 gotoxy(2,15);//光标停到15的位置
52 1 delay(1000);//延时1s
53 1 //write_lcd_command(0x01); //清屏
54 1 gotoxy(1,0); //显示第一行
55 1 for(i=0;i<16;i++) write_lcd_data(tab3[i]);
C51 COMPILER V7.06 1602 07/23/2007 20:16:49 PAGE 2
56 1 gotoxy(2,0); //显示第二行
57 1 for(i=0;i<16;i++) write_lcd_data(tab4[i]);
58 1 write_lcd_command(0x0c);//关光标
59 1
60 1
61 1 /*解码程序*/
62 1
63 1 TMOD=0x01;
64 1 TH0=0;TL0=0;
65 1 EX0=1; //开外部中断0
66 1 //ET0=1;
67 1 IT0=1;//下降沿产生中断
68 1 EA=1;
69 1 TR0=0;//定时器0关闭
70 1 while(1)
71 1 {
72 2 if(finish==1)
73 2 {
74 3 finish=0;
75 3 add();
76 3 }
77 2 count();
78 2 display();
79 2 gotoxy(2,3);
80 2 for(j=0;j<9;j++)
81 2 {write_lcd_data(d[j]);}
82 2 if((data1==0x00)&&(data2==0xff)){P1=0xfd;} //前
83 2 if((data1==0x03)&&(data2==0xfc)){P1=0xd7;}//左 P14可以为任意值
84 2 if((data1==0x14)&&(data2==0xeb)){P1=0x7e;}//右 P16可以为任意值
85 2 if((data1==0x17)&&(data2==0xe8)){P1=0xab;}//后
86 2 if((data1==0x15)&&(data2==0xea)){P1=0x0f;}//停
87 2 }
88 1 }
89
90 void int0(void) interrupt 0 //外部中断0
91 {
92 1 uchar i,t;
93 1 EX0=0;//关外部中断0
94 1 TR0=1;//定时器0开始记数
95 1 while(P32==0);
96 1 TR0=0;//定时器0关
97 1 t=(TH0*256+TL0)/1000;//低电平9 MS
98 1 TH0=0;TL0=0;
99 1 if(t==8)
100 1 {
101 2 TR0=1;
102 2 while(P32==1);
103 2 TR0=0;
104 2 t=(TH0*256+TL0)/1000;//低电平3 MS
105 2 TH0=0;TL0=0;
106 2 if(t==3)
107 2 {
108 3 for(i=0;i<32;i++)
109 3 {
110 4 TR0=1;
111 4 while(P32==0);//等待
112 4 TR0=0;
113 4 t=(TH0*256+TL0)/1000;
114 4 TH0=0;TL0=0;
115 4 if(t==0) //0跟1的低电平的时间相同
116 4 {
117 5 TR0=1;//定时器0开
C51 COMPILER V7.06 1602 07/23/2007 20:16:49 PAGE 3
118 5 while(P32==1);
119 5 TR0=0;//定时器0关
120 5 //while(P32==1);//{if(TH0>10) break;}//如果高电平的时间大于2.5ms,跳出while 循环
121 5 //TR0=0;//定时器0关
122 5 t=(TH0*256+TL0)/1000;
123 5 TH0=0;TL0=0;//循环一次重新付初值
124 5 tt[i]=t;
125 5 }
126 4 }
127 3 }
128 2 }
129 1 finish=1;
130 1 EX0=1;//外部中断开
131 1 }
132
133
134 void add(void) //转换成10进制数子函数
135 {
136 1 uchar i;
137 1 address1=0;
138 1 address2=0;
139 1 data1=0;
140 1 data2=0;
141 1 for(i=0;i<8;i++) //位
142 1 {
143 2 address1=(tt[i]<<7)|(address1>>1);
144 2 address2=(tt[8+i]<<7)|(address2>>1);
145 2 data1=(tt[16+i]<<7)|(data1>>1);
146 2 data2=(tt[24+i]<<7)|(data2>>1);
147 2 }
148 1 }
149
150 void count(void)
151 {
152 1 led[7]=(0xf0&address1)>>4;//取高四位
153 1 led[6]=0x0f&address1; //低四位
154 1 led[5]=(0xf0&address2)>>4;
155 1 led[4]=0x0f&address2;
156 1 led[3]=(0xf0&data1)>>4;
157 1 led[2]=0x0f&data1;
158 1 led[1]=(0xf0&data2)>>4;
159 1 led[0]=data2&0x0f;
160 1 }
161
162 void display(void) //显示
163 {
164 1 d[0]=number[led[7]];
165 1 d[1]=number[led[6]];
166 1 d[2]=number[led[5]];
167 1 d[3]=number[led[4]];
168 1 d[4]=number[16];
169 1 d[5]=number[led[3]];
170 1 d[6]=number[led[2]];
171 1 d[7]=number[led[1]];
172 1 d[8]=number[led[0]];
173 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 825 ----
CONSTANT SIZE = 52 ----
XDATA SIZE = ---- ----
C51 COMPILER V7.06 1602 07/23/2007 20:16:49 PAGE 4
PDATA SIZE = ---- ----
DATA SIZE = 88 3
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 + -