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

📄 lab3.c

📁 PICC 16X Code for study and learning
💻 C
字号:

/****************************************************************
*			Hi-Tech workshop exercise Lab3						*
*****************************************************************
*																*
*   Files required:												*
*																*		
*                   lab3.c										*
*					MID_LCD.c 									*
*                   cnfig877a.h (Set the Configuration Word)	*
*																*
*                   pic.h        (Hi-Tech file)					*
*																*
*****************************************************************
*																*
*   Notes:														*
*																*
*   Device Fosc -> 16.00MHz (Clock supplied by target)			*
*																*	
*****************************************************************/

#include <pic.h>				// processor if/def file
#include "cnfig877a.h"
#include "mid_lcd.h"

//**********************************
//* Function Prototype Declaration
//**********************************
void Init_IO(void);
void Init_Adc( void );
void A2D( unsigned char );
void LCD_ItoA(unsigned int);
unsigned char Set_BCD_ASCII(unsigned char);

// ================================================================
// **** Establish PIC16F877A Configuration Word
// **** == HS Oscillator Mode
// **** == Brown-Out Detect Enabled
// **** == Watch-Dog Timer Off
// **** == Code Protect Off
// **** == Low Voltage Programming Off
// **** == ICD2 Debug Mode On

__CONFIG  ( HS_OSC & BODEN_ON & WDT_OFF & CP_OFF & LVP_OFF & DEBUG_ON ); 

// =================================================================


const char LCD_Msg1[]=" A/D Result:    "; 
const char LCD_Msg2[]="  MSB:   LSB:   "; 

unsigned int AD_Temp;
bit DS_Zero_Flag;

union  	{
		int AD_10bit;
		struct	{
				char AD_LSB;
				char AD_MSB;
				}AD_Byte;
		}AD_Int;


/*****************************
    INITIALIZE I/O PORT
*****************************/

void Init_IO(void)
{
	ADCON1=0b00000110;		// Disable A/D Function
	TRISD=0x00;				// Set PortD for Output
	PORTD=0x80;				// Initila LED display = 0x80
	TRISA4=1;				// Set SW2 for input
	TRISE1=1;				// Set SW6 for Input
}


/*****************************************
    Initialize A/D & Comparator Module
******************************************/

void Init_Adc( void )
{
	CMCON=0b000000111;		// Analog comparator disable
	ADCON1=0b00001110;		// AN0 is A/D input
	ADFM=1;					// Right justified
	ADCON0=0b10000001; 		// Selext CH0 , A/D on
}    
                                       
/***********************************
        Convert A/D Channel
************************************/

void A2D( unsigned char channel )
{
	unsigned char temp;				// Temp storage

	temp = channel << 3;			// Shift channel value three bits left
	ADCON0 &= 0b11000111;			// Clear channel select bits in ADCON0
	ADCON0 |= temp;					// Logically OR shifted channel value into place in ADCON0
 
	ADGO = 1;						// Initiate conversion on selected channel
	while (ADGO) ;					// Poll ADGO bit until it clears, indicating conv. done
	AD_Int.AD_Byte.AD_MSB=ADRESH;
	AD_Int.AD_Byte.AD_LSB=ADRESL;
} 

//***************************************
//*             Program Main ( )		*
//***************************************
void main(void)
{
	Init_IO();
	Init_Adc();
	OpenLCD();
	LCD_Set_Cursor(0,0);
	putrsLCD(LCD_Msg1);
	LCD_Set_Cursor(0,1);
	putrsLCD(LCD_Msg2);

	while(1)
	{
		A2D(0x00);						// Get 10-bit A/D result from CH0
		LCD_Set_Cursor(12,0);
		LCD_ItoA(AD_Int.AD_10bit);
		LCD_Set_Cursor(6,1);
		puthexLCD(AD_Int.AD_Byte.AD_MSB);
		LCD_Set_Cursor(13,1);
		puthexLCD(AD_Int.AD_Byte.AD_LSB);
	}
	
}

void LCD_ItoA(unsigned int AD_Data)
{
		AD_Temp=AD_Data;
	    DS_Zero_Flag=1;

		putcLCD(Set_BCD_ASCII(AD_Data/1000));		// 陪ボ

⌨️ 快捷键说明

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