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

📄 harve.c

📁 6探头液晶显示倒车雷达系统 方位指示
💻 C
字号:
#include "harve.h"
#byte   STATUS=0x03
#bit    C=STATUS.0
#byte   SPBRG=0x99
#byte   TXSTA=0x98
#byte   RCSTA=0x18
#byte   TXREG=0x19
#byte   RCREG=0x1A
#bit    RX9 =RCSTA.6
#bit    CREN=RCSTA.4
#bit    FERR=RCSTA.2
#bit    RX9D=RCSTA.0
#bit    OERR=RCSTA.1
#bit    SPEN=RCSTA.7
#bit    CSRC=TXSTA.7
#bit    TXEN=TXSTA.5
#bit    SYNC=TXSTA.4
#bit    BRGH=TXSTA.2
#bit    TRMT=TXSTA.1
#bit    TX9 =TXSTA.6      //for serial
#byte   PIR1=0x0C
#bit    RCIF=PIR1.5
#bit    TXIF=PIR1.4
#byte   TRISA=0x85
#byte   TRISB=0x86
#byte   TRISC=0x87
#byte   POTA=0x05
#byte   POTB=0x06
#byte   POTC=0x07
//#byte   POTD=0x08
//#byte   POTE=0x09         //define port

#byte   INTCON=0x0B
#byte   OPTION=0x81
#byte   PIE1  =0x8C
#byte   PIR1  =0x0C
#byte   TMR1L = 0x0e
#byte   TMR1H = 0x0f
#byte   T1CON = 0x10
#byte   TMR0  = 0x01
#bit    TMR1ON=T1CON.0
#bit    TMR1IF=PIR1.0
#bit    T0IF=INTCON.2     //use for time

#bit    LinEN=POTA.0
#bit    testbit1=POTA.1
#bit    testbit2=POTA.2
#bit    testbit3=POTA.3
#bit    testbit4=POTA.4
#bit    testbit5=POTA.5
#bit    A1=POTC.0
#bit    A2=POTC.1
#bit    A3=POTC.2
#bit    A4=POTC.3
#bit    A5=POTC.4
#bit    CAR1=POTC.5
#bit    TXD=POTC.6
#bit    RXD=POTC.7

//#bit P02=POTC.1
//#bit P03=POTC.2
//#bit P07=POTC.3
#bit P00=POTC.2
#bit P01=POTC.4
#bit P02=POTC.3
#bit red=POTA.2
//HT1621控制位(液晶模块接口定义)
#bit HT1621_DAT=POTB.2
#bit HT1621_CS=POTB.5  //lower enable
#bit HT1621_WR=POTB.3  //rising edge
#bit LED=POTB.0        //LED

#define BIAS    0x52   //0b1000 0101 0010 1/3duty 4com
#define BIAS2   0x50   //0b1000 0101 0000 1/2duty 4com
#define SYSDIS  0x00   //0b1000 0000 0000 关振系统荡器和LCD偏压发生器
#define LCDOFF  0x04   //0b1000 0000 0100 关LCD偏压
#define LCDON   0x06   //0b1000 0000 0110 打开LCD偏压
#define SYSEN   0x02   //0b1000 0000 0010 打开系统振荡器
#define XTAL    0x28   //0b1000 0010 1000 外部接时钟
#define RC256   0x30   //0b1000 0011 0000 内部时钟
#define TONEON  0x12   //0b1000 0001 0010 打开声音输出
#define TONEOFF 0x10   //0b1000 0001 0000 关闭声音输出
#define WDTDIS  0x0A   //0b1000 0000 1010 禁止看门狗


unsigned char show[6]=0x00,0x00,0x00,0x00,0x00,0x00;
unsigned char data[11]=0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00;
unsigned char sound[8]=0x0E,0x36,0x4E,0x76,0x8E,0xB6,0xCE,0xF6;
unsigned char getdatatimeout=0;
unsigned char olddata=9;
unsigned char new_rx_data=0xFF;
#use fixed_io(a_outputs=PIN_A0,PIN_A1,PIN_A2,PIN_A3,PIN_A4,PIN_A5)
#use fixed_io(b_outputs=PIN_B0,PIN_B2,PIN_B3,PIN_B4,PIN_B5,PIN_B6,PIN_B7)
//#use fixed_io(c_outputs=PIN_C0,PIN_C2,PIN_C3,PIN_C4,PIN_C5)                      //harve070314
#use fixed_io(c_outputs=PIN_C0,PIN_C2,PIN_C3,PIN_C5)
void show0(void);
void show1(void);
void show2(void);
void show3(void);
void show4(void);
void getdata(void);
void RTError(void);
void getword(void);
void getbit(unsigned char i);
void intlzation(void);
void Ht1621WrByte(unsigned char ucTmpData);
void Ht1621WrDataCmd(unsigned char ucAddr);
void Ht1621WrCmd(unsigned char ucTmpCmd);
void soundout(void);
void main()
{
   unsigned char i,j,now;
    //sleep();
   output_a(0x00);
   output_b(0x00);
   output_c(0x00);
   P02=1;
   intlzation();
  
   LED=1;
   
  
   while(1)
   {
   TMR1H=10;
   TMR1L=0;
   TMR1ON=1;
   TMR1IF=0;
   i++;
//if (i%15==0)
    {
      HT1621_CS=0;
      Ht1621WrDataCmd(0);
      for(j=0;j<6;j++)
      {
        if(getdatatimeout<70)
        Ht1621WrByte(show[j]);
        else
        Ht1621WrByte(0x00);
      }
      HT1621_CS=1;
    }
   getdata(); 
   soundout();
   while(TMR1H<0x80);
  
   i++;
   }
}

/////////////////////////
//       get-data      //
/////////////////////////
void getdata(void)
{
  unsigned char i,sum,ErrorData;
  int1 flag;
  TXREG=0x00;            //out put 00H
  delay_us(250);
  delay_us(250);
  TXREG=0x55;	         //out put 55H	
  sum=RCREG;
  delay_us(250);
  delay_us(250);
  TXREG=0x47;//0x47;//0100-0111  //out put ID
while(!TRMT);
delay_cycles(4);
	CREN=1;                    //open recive
	  for(i=0;i<9;i++)         //修改后
	  //for(i=0;i<8;i++)         
	   {
	     TMR0=0;
         delay_cycles(20);
         RTError();
         if(OERR)
           RTError();
	     while(!RCIF&&TMR0<60);
	  //   {
	    // flag=RCIF;
	 //    }
	     if(RCIF)
	       { 
             sum=RCREG;
		     data[i]=sum;
	       }
         new_rx_data=data[7];
       }
  
       CREN=0;	               //get 6 bite  data from serial                				
  sum=0x47;
  sum+=data[0];
  if(C)
    sum++;
  sum+=data[1];
  if(C)
    sum++;
  sum+=data[2];
  if(C)
    sum++;
  sum+=data[3];
  if(C)
    sum++;
  sum+=data[4];
  if(C)
    sum++;
  sum+=data[5];
  if(C)
    sum++;   
  sum+=data[7];
  if(C)
  	sum++;
  sum+=data[6];
  if(C)
    sum++;   
  
  
                  //caculate 
  if(data[8]==(0xFF^sum)) 
    {
       for(i=0;i<6;i++)
       show[i]=data[i];      //if no bite bad agree it
      // new_rx_data=data[7];
       getdatatimeout=0;
    }
 else
    {
     if(getdatatimeout<200)
     getdatatimeout++;
//      delay_us(20);
    }
//delay_us(300);
TXREG=0x02;
}
///////////////////////////
//       RTError         //
///////////////////////////
void RTError(void)
{
  unsigned char ErrorData;
  if(OERR)
  {
    ErrorData=RCREG;
    ErrorData=RCREG;
    CREN=0;
    delay_cycles(3);
    CREN=1;
  }
  if(FERR)
  {
    C=RX9D;
    ErrorData=RCREG;
  }
}

///////////////////////////
//       intlzation      //
///////////////////////////
void intlzation(void)
{
   POTC=0xFF;
   POTB=0x00;
    
   delay_ms(50);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_32);//2.5ms=156.25 time0
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
   setup_timer_2(T2_DISABLED,0,1);
   //TRISB=0x00;
  
   //LinEN=1;
   INTCON=0x00;
   PIE1  =0x00;
   CREN=0;
   SPBRG=25;
   SYNC=0;
   SPEN=1;
   TX9 =0;
   TXEN=1;
   BRGH=1;
   RX9 =0;   //for sireal

	HT1621_CS=1;
	HT1621_WR=0;
	HT1621_DAT=1;
	delay_ms(100);       //延时使LCD工作电压稳定
	Ht1621WrCmd(BIAS);
//    Ht1621WrCmd(BIAS2);
	Ht1621WrCmd(RC256);   //使用内部振荡器
	Ht1621WrCmd(SYSDIS);
	Ht1621WrCmd(WDTDIS);
	Ht1621WrCmd(SYSEN);
	Ht1621WrCmd(LCDON);
}


///////////////////////////
//       A command       //
///////////////////////////
void Ht1621WrCmd(unsigned char ucTmpCmd)
{
unsigned char i,ucCmdByte=0x80;
HT1621_CS=0;
delay_cycles(8);
for (i=0;i<4;i++)
{
 if (ucCmdByte&0x80) 
   HT1621_DAT=1;
 else
   HT1621_DAT=0;
 HT1621_WR=0;
 delay_cycles(8);
 HT1621_WR=1;
 delay_cycles(4);
 ucCmdByte<<=1;
}
for (i=0;i<8;i++)
{
 if (ucTmpCmd&0x80) HT1621_DAT=1;
 else HT1621_DAT=0;
 HT1621_WR=0;
 delay_cycles(8);
 HT1621_WR=1;
 delay_cycles(4);
 ucTmpCmd<<=1;
}
HT1621_CS=1;
delay_cycles(8);
}

///////////////////////////
//       adder           //
///////////////////////////
void Ht1621WrDataCmd(unsigned char ucAddr)
{
unsigned char i,ucDataCmd=0x05; //101
ucDataCmd<<=5;
for (i=0;i<3;i++)
{
 if (ucDataCmd&0x80) HT1621_DAT=1;
 else HT1621_DAT=0;
 HT1621_WR=0;
 delay_cycles(8);
 HT1621_WR=1;
 delay_cycles(4);
 ucDataCmd<<=1;
}
  ucAddr<<=2;
  for (i=0;i<6;i++)
	{
	 if (ucAddr&0x80) HT1621_DAT=1;
	 else HT1621_DAT=0;
	 HT1621_WR=0;
	 delay_cycles(8);
	 HT1621_WR=1;
	 delay_cycles(4);
	 ucAddr<<=1;
	}
}

///////////////////////////
//       write a word    //
///////////////////////////
void Ht1621WrByte(unsigned char ucTmpData)
{
   unsigned char i;
	for (i=0;i<8;i++)
		{
		 if (ucTmpData&0x80) 
		     HT1621_DAT=1;
		 else 
		     HT1621_DAT=0;
		 HT1621_WR=0;
		 delay_cycles(8);
		 HT1621_WR=1;
		 delay_cycles(4);
         if (i<4)
		 ucTmpData<<=1;
		}
	for (i=0;i<8;i++)
		{
		 if (ucTmpData&0x80) 
		     HT1621_DAT=1;
		 else 
		     HT1621_DAT=0;
		 HT1621_WR=0;
		 delay_cycles(8);
		 HT1621_WR=1;
		 delay_cycles(4);
		 ucTmpData<<=1;
		}
}

void soundout(void)
{
unsigned char sound_code,i,sounddata;
  sounddata=new_rx_data;
 // TMR1ON=0;
  if(sounddata<170)
  	{//red=!red;
     if(sounddata<40)
      sound_code=0xCE;
      else if(sounddata<=50)
         sound_code=0x4E;
      else if(sounddata<=70)
         sound_code=0x8E;
      else if(sounddata<=90)
         sound_code=0x0E;
      else if(sounddata<=110)
         sound_code=0xF6;
      else if(sounddata<=130)
         sound_code=0x76;
      else if(sounddata<=150)
         sound_code=0xB6;
      else //if(sounddata<=170)
         sound_code=0x36;
    
    if(((sound_code!=olddata)||(sound_code==0xCE))&&(!P01))
    	{
    		olddata=sound_code;
      // if((sounddata<160)&&(!P01)){
       // olddata=sound_code;
     // if(!P01)
     //  {
         P00=0;
         delay_ms(16);
		      for(i=8;i>0;i--)
          {
          //sounddata=sounddata<<1;
          #asm
          RRF sound_code,f
          #endasm
		      if(C)
          {
           P00=1;delay_ms(1);
           P00=0;delay_us(250);delay_us(250);
               }
          else
           {
            P00=1;delay_us(250);delay_us(250);
            P00=0;delay_ms(1);
               }
           }
          P00=1;
         }
     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -