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

📄 demo2.c

📁 一位十年经验美国工程师的工程代码
💻 C
字号:
//*************************************************************************
//                            DEMO2.C
//                             V1.00
// This is another Demo Program - this one runs completely by itself - but
//
//  Connections as Follows:
//   RA4 - Perastaltic Pump Reverse
//   RA5 - Perastaltic Pump Foward
//
//  Display is a Dumb Terminal on the RS-232 Interface
//
//
// Author: Michael Pearce
//          Chemistry Department, University of Canterbury
//
// Started: 14 May 1999
//
//*************************************************************************
// V1.00 - 19 May 1999
//     Start of the Program - bulk stolen from DEMO1.C
//*************************************************************************
//#define PIC_CLK 8

#include <pic.h>

#include <stdio.h>
//unsigned char delayus_variable;

//-- Define 1-wire Bus info
#define D_PIN_PORT   PORTB
#define D_PIN_NUM    2
#define D_TRIS_PORT  TRISB
#define BITNUM(adr, bit)       ((unsigned)(&adr)*8+(bit))


//#include "always.h"
#define XTAL_FREQ 10MHZ
#include "delay.h"
#include "delay.c"
#include "serial_s.c"          //-- Software serial routines - not the best
#include "1wire002.c"

//********** PORT DEFINES ***************
static bit  PPFWD  @ BITNUM(PORTA, 4);  //- Pump Foward
static bit  PPREV  @ BITNUM(PORTA, 3);  //- Pump Reverse
static bit  VALVE1 @ BITNUM(PORTB, 7);
static bit  VALVE2 @ BITNUM(PORTB, 6);

//*********** CONTROLS *************
#define FOWARD 1
#define REVERSE 2
#define STOP 0
#define V_OFF 1
#define V_ON  0

//*********** TERMINAL CONTROLS **************
#define CLS  0x1A             //-- Clear Screen   (SUB)
#define BEEP 0x07             //-- Terminal Beep
#define BACKSPACE 0x08

void RunPump(char Mode);
void Pause(char Sec,char Dot);
void Pumps(void),Temperature(void),Valve(void);
void ReadTemperature(void);

signed char DATA1[2];
char DotCnt=0,valve=1;


void main(void)
{
 PORTA=0x00;
 PORTB=0xFF;     //-- RXD/TXD Pins High initially!!!
 TRISA=0x00;
 TRISB=0x01;     //-- all but RXD as output

 Pause(2,1);     //-- Long delay to let things settle
 D_Reset();      //-- Reset the 1-wire bus

 putch(CLS);
 while(1)
 {
	 putch(BEEP);
  puts("Pump:Running");
  RunPump(FOWARD);
  Pause(5,1);
  RunPump(STOP);
  puts("Stopped");
  puts("\n\rSelecting Relay #");
  Valve();
  putch(valve+'0');
  valve++;
  puts("\n\rDelay");
  Pause(6,2);
  puts("\n\rTemperature: ");
  Temperature();
  puts("\n\n\r");
 }
}

void Temperature(void)
{
	char str[5]="    ";
//	puts("\n\rReading Temperature.");
 ReadTemperature();
 //-- convert the temperature
 DATA1[0]=DATA1[0]>>1;  //-- Remove the 1/2 degree bit
 DATA1[0] &=0x7F;

 if(DATA1[0]>120)DATA1[0]=0;    //--- Negative Temperatures Ignored!!!
 
 if(DATA1[0]>=100)
 {
	 str[0]=DATA1[0]/100;
	 DATA1[0]-=(str[0]*100);
	 str[0]+='0';
 }
 if(DATA1[0]>=10)
 {
	 str[1]=DATA1[0]/10;
	 DATA1[0]-=(str[1]*10);
	 str[1]+='0';
 }
 if(DATA1[0]>=0)
 {
	 str[2]=DATA1[0];
	 str[2]+='0';
 }
 str[3]=0;

// puts("\n\rTemp = ");
 DATA1[0]=0;
 while(str[DATA1[0]])
 {
  putch(str[DATA1[0]++]);
 }
 puts(" degrees C");
}
//**************************************************************************
// ReadTemperature - Reads two temperature probes
//**************************************************************************
void ReadTemperature(void)
{
 int count;
 D_Reset();           // Reset The Bus
 D_Write(0xCC);       // Skip ROM
 D_Write(0x44);       // Convert T Command

 Pause(1,2);

 //-- Read First Device
 D_Reset();           // Reset the Bus Again
 D_Write(0xCC);       // Skip ROM - only one device
 D_Write(0xBE);       // Read Scratch Pad Command
 for(count=0;count<2;count++)
 {
  DATA1[count]=D_Read();  // Read the Temperature only
 }
}
//****************** END OF Read Temperature


void Valve(void)
{
 char	temp=0x04;                    //-- 00000100 -> 1 selects the valve
	if(valve>5 || valve <1) valve=1;   //-- ensure valve is in range 
	temp = temp << valve;              //-- Select Valve Position
	temp ^= 0xFF;                      //-- Invert the selection
	PORTB |=0xF8;                      //-- change upper 5 leave low 3
	PORTB &=temp;                   //-- Select the valve
}


void RunPump(char Mode)
{
 switch(Mode)
 {
  case FOWARD:
  PPFWD=0;
  PPREV=1;
  break;

		case REVERSE:
		 PPREV=0;
		 PPFWD=1;
		 break;

		case STOP:
		default:
		 PPREV=1;
		 PPFWD=1;
		 break;
	}
}

void Pause(char Sec,char Dot)
{
	char count;
	do
	{
		count=10;
		while(count--)
		{
   DelayMs(99);
 		if(Dot==1)
	 	{
		  putch('.');
		 }
   if(Dot==2)
   {
	   switch(DotCnt++)
	   {
		   case 0:
		    putch('|');
		    break;
		   case 1:
		    putch('/');
		    break;
		   case 2:
		    putch('-');
		    break;
		   case 3:
		    putch('\\');
		   default:
		    DotCnt=0;
		    break;

	   }
	   putch(BACKSPACE);
   }
 	}
	}while(--Sec);
}

⌨️ 快捷键说明

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