锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基于C8051单片机超声波测距电平触发编写(留底)

时间:2024-05-25 23:37:10

#include   #include #define uchar unsigned char#define uint unsigned intvoid SYSCLK_Init (void);void PORT_Init (void); void  StartModule() ;void display(unsigned char bai,unsigned char shi,unsigned char ge);void delay(unsigned int z);void timerinit();void delay(unsigned int z);void Timer_Count(void);unsigned int  time=0;uchar i; uchar j;unsigned long S=0;unsigned char qian,bai,shi,ge;bit flag =0;sbit lcdrs=P2^5;sbit lcden=P2^7;sbit lcdwr=P2^6;sbit  RX = P0^1;sbit  TX = P0^0;uchar abc[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};   //1234567;uchar result[3];void delay(void){ int a=10000; while(a!=0) {  a--; }}void write_com(uchar com){ lcdrs=0; P3=com; delay(); lcden=1; delay(); lcden=0;}void write_date(uchar dat){ lcdrs=1; P3=dat; delay(); lcden=1; delay(); lcden=0;}void init(){ lcdwr=0; lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01);}void main(){ unsigned int valA;  WDTCN = 0xde;  WDTCN = 0xad;   timerinit();                        SYSCLK_Init ();                                                                   PORT_Init ();                         init(); lcdrs=0; lcdwr=0; write_com(0x40);while(1){    RX=1;StartModule(); for(valA=100;valA>0;valA--){   if(RX==1)   {       Timer_Count();   }}}} void SYSCLK_Init (void){   OSCICN = 0x05;                                                                                  } void PORT_Init (void){   XBR0    = 0x04;                     // Enable UART0   XBR1    = 0x00;   XBR2    = 0x40;                     // Enable crossbar and weak pull-ups  P0MDOUT |= 0xff;                    // enable TX0 as a push-pull output   P2MDOUT  = 0xe0;                    // P2口设为推挽方式   P3MDOUT  = 0xff;                    // P2口设为推挽方式      }void Conut(void) {  time=TH0*256+TL0;  TH0=0;  TL0=0;  S=(uint)(time*1.7*1.6*1.5)/10;     //算出来是MM  if((S>=7000)||flag==1) //超出测量范围显示“-”  {    flag=0;   display(0x80,0x80,0x80);  }  else  {   bai=S/100;   shi=S%100/10;   ge=S%10;   display(bai,shi,ge);  } }void zd0() interrupt 1    //T0中断用来计数器溢出,超过测距范围  {    flag=1;        //中断溢出标志 RX=0;  }void  StartModule()            //启动模块  {   TX=1;                        //启动一次模块   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();/*   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();*/   TX=0;  }void Timer_Count(void){   TR0=1;       //开启计数      while(RX);   //当RX为1计数并等待      TR0=0;    //关闭计数          Conut();   //计算}void timerinit(){ TMOD=0x01;     //设T0为方式1,GATE=1; TH0=0; TL0=0;          ET0=1;             //允许T0中断 EA=1;      //开启总中断   }/*********************************************************/void display(unsigned char bai,unsigned char shi,unsigned char ge){        uchar i;  result[0]=abc[bai];  result[1]=abc[shi];  result[2]=abc[ge];   write_com(0x40);     for(i=0;i<3;i++)  {  write_com(0x80+i+1);  write_date(result[i])  ;  }}

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章