⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jg.c

📁 16位计数及激光测距仪的源程序,C源代码,对学习有很好的参考价值.
💻 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 + -