📄 jg.c
字号:
#include <reg51.h>
#include <stdio.h>
#include <absacc.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define fxl XBYTE[0x8000]
#define fxh XBYTE[0x9000]
#define gdl XBYTE[0xa000]
#define gdh XBYTE[0xb000]
#define jgd XBYTE[0xc000]
#define m8155 XBYTE[0x0100]
#define a8155 XBYTE[0x0101]
#define b8155 XBYTE[0x0102]
#define c8155 XBYTE[0x0103]
#define l8155 XBYTE[0x0104]
#define h8155 XBYTE[0x0105]
uchar d8155[0xef],buffer[0x10],led[9];
uint gd,fx,k,dm,xsbz;
uchar jg,i,j,z,bjh,s_state,xxx,dispbl,jscount;
uchar code dispv[9]={ 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 };
uchar code g[21]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x5e,0x39,0x7c,0x79,0x71,0x00,0x40,0x76,0x73,0x6e };
void read373(void);
void delay(uint k);
void ledout(uint ff,uint gg);
void leddm(uint dm);
void delay(uint k)
{
uint l,j;
for (l=0; l<k; l++) {
for (j=0; j<100; j++) ;
}
}
void read373(void)
{
P10=0; P10=1;
fx=fxh*256+fxl;
gd=gdh*256+gdl;
}
void ledout(uint ff,uint gg)
{
if (ff>0x7fff) ff=3000-(0xffff-ff+5)/10;
else ff=3000+(ff+5)/10;
if (gg>0x7fff) {
gg=0xffff-gg; led[4]=g[17];
}
else led[4]=g[16];
gg=(gg+5)/10;
led[0]=g[ff/1000];
led[1]=g[(ff/100) % 10];
led[2]=g[(ff/10) % 10];
led[3]=g[ff % 10];
led[5]=g[(gg/100) % 10];
led[6]=g[(gg/10) % 10];
led[7]=g[gg % 10];
}
void leddm(uint dm)
{
if (dm==8888) {
led[0]=g[16]; led[1]=g[16];
led[2]=g[17]; led[3]=g[17];
led[4]=g[17]; led[5]=g[17];
led[6]=g[16]; led[7]=g[16];
}
else {
led[0]=g[16]; led[1]=g[17];
led[2]=g[dm/1000]; led[3]=g[(dm/100) % 10];
led[4]=g[(dm/10) % 10]; led[5]=g[dm % 10];
led[6]=g[17]; led[7]=g[16];
}
}
void display(void) interrupt 1 using 3
{
if (xxx>7) {
xxx=0; b8155=dispv[dispbl]; a8155=led[dispbl];
dispbl++; if (dispbl>7) dispbl=0;
if (xsbz>0) xsbz=xsbz+1;
if (xsbz>1000) xsbz=0;
}
else xxx=xxx+1;
}
void comm(void) interrupt 4 using 1 /* 通信中断程序 */
{
if (RI) goto js;
if (TI==0) goto txend;
fs: TI=0; /*发送处理程序*/
jscount++;
if (jscount>14) goto fsjs;
SBUF=buffer[jscount];
goto txend;
js: while (RI==0); /*接收处理程序*/
RI=0;
buffer[jscount]=SBUF;
if (buffer[0]!=bjh) goto fsjs;
SM2=0;
jscount++;
if (jscount<7) goto txend;
if (buffer[1]!=0xa0) goto fsjs;
if (buffer[2]!=1) goto fsjs;
P10=0; P10=1;
buffer[3]=fxh;
buffer[4]=fxl;
buffer[5]=gdh;
buffer[6]=gdl;
buffer[7]=0xed;
P12=1;
SBUF=0xff;
goto fs1;
fsjs: P12=0;
fs1: SM2=1;
REN=1;
TI=0;
jscount=0xff;
txend: ;
}
void main(void)
{
for (i=0; i<=30; i++) delay(255);
P12=0; P11=0; P11=1; P10=0;
bjh=0x11; s_state=0; xxx=0; dispbl=0; xsbz=0; jscount=0xff;
TMOD=0x22; SCON=0xf8; TCON=0; PCON=0; SM2=1;
TR0=1; TL0=0x10; TH0=0x10;TH1=0xa1; TL1=0x00; TR1=1;
m8155=0x0f; IT1=0; EA=1; ET0=1; EX0=0; EX1=0; ES=1;
while(1){
if (INT1==0) {
while (INT1==0) {
read373();
if (xsbz==0) ledout(fx,gd);
else leddm(dm);
}
k=0;
P10=0; P10=1; dm=jgd;
xsbz=1;
buffer[0]=0x30;
buffer[1]=0x30;
buffer[2]=((dm/100) % 10) | 0x30;
buffer[3]=((dm/10) % 10) | 0x30;
buffer[4]=(dm % 10) | 0x30;
read373();
if (fx>0x7fff) fx=3000-(0xffff-fx+5)/10;
else fx=3000+(fx+5)/10;
buffer[5]=(fx/1000) | 0x30;
buffer[6]=((fx/100) % 10) | 0x30;
buffer[7]=((fx/10) % 10) | 0x30;
buffer[8]=(fx % 10) | 0x30;
if (gd>0x7fff) {
gd=0xffff-gd; buffer[9]=0x2d;
}
else buffer[9]=0x2b;
gd=(gd+5)/10;
buffer[10]=((gd/100) % 10) | 0x30;
buffer[11]=((gd/10) % 10) | 0x30;
buffer[12]=(gd % 10) | 0x30;
z=0;
for(i=0; i<=12; i++) z=z | buffer[i];
buffer[13]=z;
buffer[14]=0xed;
P12=1;
SBUF=0xeb;
}
else {
read373(); /*读计数器值*/
if (xsbz==0) ledout(fx,gd); /*显示方向、高低*/
else leddm(dm); /*显示距离*/
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -