📄 main.lst
字号:
C51 COMPILER V3.96, SN-83203013 MAIN 03/10/07 13:01:19 PAGE 1
DOS C51 COMPILER V3.96, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE MAIN.C DB OE SMALL ROM(LARGE)
stmt level source
1 #include <reg52.h>
2 #include <absacc.h>
3 #include<intrins.h>
4 #define uchar unsigned char
5 #define EleA1 XBYTE[0xf100]//控制继电器Ta1-Tb4
6 #define EleA2 XBYTE[0xf200]//控制继电器Ta5-7T
7 sbit P_BELL=P1^2;
8 sbit P_RUN=P1^0;
9 sbit P_DOG=P3^4;
10
11 sbit wr=P3^6;
12 sbit rd=P3^7;
13 #define CMDOFF 0x00
14 #define CMDON 0x01
15 #define CMDLCDOFF 0x02
16 #define CMDLCDON 0x03
17 #define CMDB3C4 0x29
18 sbit CSPIN=P1^5;
19 sbit CLKPIN=P1^4;
20 sbit DIPIN=P1^6;
21 unsigned char count3=0;
22 static uchar CDQR_Butt1=1;
23 uchar BUFJS[5];
24 uchar DEQ2S;
25 uchar read_flag;
26 int DEQ3S=0;
27 unsigned char code LCM[]={0xEB,0x60,0xC7,0xE5,0x6C,0xAD,0xAF,0xE8,0xEF,0xED,0xee,0x00};
28 unsigned char data l_data[9];
29 uchar time1[10]={3,4,6,3,5,10,3,5,4,10};
30 uchar ccount=1;
31 uchar ccount1=0;
32 uchar verifysum=0;
33 void delay(int n)
34 {
35 1 while(n--);
36 1 }
37 void lcdwbit(bit n)
38 { DIPIN = n;
39 1 _nop_();
40 1 _nop_();
41 1 CLKPIN = 1;
42 1 _nop_();
43 1 _nop_();
44 1 CLKPIN = 0;
45 1 _nop_();
46 1 _nop_();
47 1 CLKPIN = 1;
48 1 }
49
50 void lcdwc(unsigned char cmdcode) //送控制字
51 { unsigned char i;
52 1 CSPIN=1;
53 1 CSPIN=0;
54 1 lcdwbit(1);
55 1 lcdwbit(0);
C51 COMPILER V3.96, SN-83203013 MAIN 03/10/07 13:01:19 PAGE 2
56 1 lcdwbit(0);
57 1 for (i=0;i<8;i++)
58 1 { if((cmdcode&0x80)==0x80)
59 2 lcdwbit(1);
60 2 else
61 2 lcdwbit(0);
62 2 cmdcode<<=1;
63 2 }
64 1 lcdwbit(0);
65 1 DIPIN=1;
66 1 CSPIN=1;
67 1 }
68
69 void lcdreset() //初始化
70 { lcdwc(CMDOFF); //掉电
71 1 lcdwc(CMDLCDOFF); //关闭
72 1 lcdwc(CMDON); //上电
73 1 lcdwc(CMDLCDON); //显示
74 1 lcdwc(CMDB3C4); //模式设置
75 1 }
76
77 void lcdwd(unsigned char address,unsigned char data1) //送6位地址+8位数据
78 { unsigned char i;
79 1 CSPIN = 1;
80 1 CSPIN = 0;
81 1 lcdwbit(1);
82 1 lcdwbit(0);
83 1 lcdwbit(1);
84 1 address<<=2;
85 1 for (i=0;i<6;i++)
86 1 { if((address&0x80)==0x80)
87 2 lcdwbit(1);
88 2 else
89 2 lcdwbit(0);
90 2 address<<=1;
91 2 }
92 1 for (i=0;i<8;i++)
93 1 { if((data1&0x01)==0x01)
94 2 lcdwbit(1);
95 2 else
96 2 lcdwbit(0);
97 2 data1>>=1;
98 2 }
99 1 DIPIN=1;
100 1 CSPIN=1;
101 1 }
102 void lcdwd1() //送数(从第一个地址起)
103 { unsigned char j;
104 1 for(j=0;j<12;j++)
105 1 { lcdwd(j+j,l_data[j+1]);
106 2 }
107 1 }
108 void init_serialcomm(void)
109 {
110 1 SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
111 1 TMOD |= 0x21; //TMOD: timer 1, mode 2, 8-bit reload
112 1 TH1 = 0xFd; //Baud:9600 fosc=11.0592MHz
113 1 IE |= 0x92; //Enable Serial Interrupt
114 1 TR1 = 1; // timer 1 run
115 1 RCAP2H = 0x4C;
116 1 RCAP2L= 0x00;
117 1 TH2 = 0x4c; // 定时器初值
C51 COMPILER V3.96, SN-83203013 MAIN 03/10/07 13:01:19 PAGE 3
118 1 TL2 = 0x00;
119 1 ET2 = 1; // 允许T2中断
120 1 T2CON = 0x04;
121 1 TR2=1;
122 1 TL0=0x00;//50ms产生中断
123 1 TH0=0x4C;
124 1 P0=0xff;
125 1 wr=1;
126 1 rd=1;
127 1 EleA1=0x00;
128 1 EleA2=0x00;
129 1 rd=0;
130 1 P0=0xff;
131 1
132 1 }
133 void LCMinit()
134 {
135 1 l_data[1]=LCM[10];
136 1 lcdwd1();
137 1
138 1 l_data[2]=LCM[0];
139 1 lcdwd1();
140 1
141 1 l_data[3]=LCM[0];
142 1 lcdwd1();
143 1
144 1 l_data[5]=LCM[0];
145 1 lcdwd1();
146 1
147 1 l_data[6]=LCM[0];
148 1 lcdwd1();
149 1 l_data[7]=LCM[1];
150 1 lcdwd1();
151 1 l_data[8]=LCM[11];
152 1 lcdwd1();
153 1 }
154
155 //向串口发送一个字符
156 void send_char_com(unsigned char ch)
157 {
158 1 SBUF=ch;
159 1 while(TI==0);
160 1 TI=0;
161 1 }
162
163 //向串口发送一个字符串,strlen为该字符串长度
164 void send_string_com(unsigned char *str,unsigned int strlen)
165 {
166 1 unsigned int k;
167 1 TI=0;
168 1 for(k=0;k<strlen;k++)
169 1 send_char_com(str[k]);
170 1 }
171 void senddata()
172 {
173 1 uchar SENDBUF[]={0,0,0,0,0,0};
174 1 SENDBUF[0]=0x3c;
175 1 SENDBUF[1]=0x01;
176 1 SENDBUF[2]=ccount1;
177 1 SENDBUF[3]=ccount;
178 1 SENDBUF[4]=verifysum;
179 1 SENDBUF[5]=0x3e;
C51 COMPILER V3.96, SN-83203013 MAIN 03/10/07 13:01:19 PAGE 4
180 1 send_string_com(SENDBUF,6);
181 1 }
182
183 //串口接收中断函数
184 void serial () interrupt 4 using 3
185 {
186 1 if(RI)
187 1 {
188 2 unsigned char ch;
189 2 RI = 0;
190 2 ch=SBUF;
191 2 if(ch==0x3c)
192 2 {
193 3 count3=0;
194 3 }
195 2 else
196 2 {
197 3 ++count3;
198 3 BUFJS[count3]=ch;
199 3 if( ch==0x3e)
200 3 {
201 4 read_flag=1; //如果串口接收的数据达到INBUF_LEN个,且校验没错,
202 4 }
203 3 }
204 2 }
205 1 if(read_flag) //如果取数标志已置位,就将读到的数从串口发出
206 1 {
207 2 read_flag=0; //取数标志清0
208 2 switch(BUFJS[2]) //判断命令
209 2 {
210 3 case 0x01://K1
211 3 senddata();
212 3 time1[0]=BUFJS[3];
213 3 break;
214 3 case 0x02:
215 3 senddata();
216 3 time1[1]=BUFJS[3];
217 3
218 3 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -