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

📄 demo1.c

📁 一位十年经验美国工程师的工程代码
💻 C
字号:
//*************************************************************************
//                            DEMO1.C
//                             V1.00
//  This is a stand alone Demo Program that runs several things.
//
//  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 - 14 May 1999
//     Start of the Program
//*************************************************************************
//#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;


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

 while(1)
 {
  putch(CLS);
  puts("Demonstraition Board Menu\n\n\r");
  puts("1-Pump\n\r2-Valve\n\r3-Temperature\n\r");
  puts("Select Number\n\r");
  switch(getch())
  {
	  case '1':
	   Pumps();
	   break;
	  case '2':
	   Valve();
	   break;
	  case '3':
	   Temperature();
	   break;

	  default:
	   putch(BEEP);
	   break;
	 } 
 } 
}

void Pumps(void)
{
 puts("\n\rRunning Pump Foward");
 RunPump(FOWARD);
 Pause(5,1);
 RunPump(STOP);
 Pause(2,0);

 
 puts("\n\rDone :)");
 putch(BEEP); //- Beep
 Pause(2,2);
}

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]>=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\n\r");
 Pause(3,2);

}
//**************************************************************************
// 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,1);

 //-- 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 done=0;
	puts("\n\n");
	do
	{
	 puts("\rSelect Valve 1 or 2");
	 switch(getch())
	 {
		 case '1':
		  VALVE2=V_OFF;
		  VALVE1=V_ON;
		  done=1;
		  break;

		 case '2':
		  VALVE1=V_OFF;
		  VALVE2=V_ON;
		  done=1;
		  break;

		 default:
		  putch(BEEP);
    break;
	 }
	}while(!done);
	puts("\n\rValve Selected!\n\r");
	Pause(3,2);
}


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 + -