?? adc.c
字號:
/* File: ADC.C */
/****************************************************************************
*
* STK16X.ADC.MAIN
* ===============
*
* Main module for A/D converter demo.
* Converted value of ADC channel 0 is shown both on display and LED bar.
*
* TQ-Systems GmbH
* ----------------
* Customer: TQ-Components
* Project : STK16XSW
* Tools : uVision 2.05
*
*
* Rev: Date: Name: Modification:
* ----+---------+----------------+------------------------------------------
* 100 22.01.01 A. Lichte taken over from STK16X.506
*****************************************************************************/
/****************************************************************************
*
* availability summary
*
* available for Starterkit: STK16X STK16XU
* conformed for Starterkit: STK16X STK16XU
* available for Modul : TQM164 TQM165 TQM165U TQM166 TQM167
* TQM167UL TQM167U TQM167LC
*
* conformed for Modul : TQM164 TQM165 TQM165U TQM166 TQM167
* TQM167UL TQM167U TQM167LC
*****************************************************************************/
/*==========================================================================*
* include files (#INCLUDE):
*===========================================================================*/
/*--------------------------------------------------------------------------*
* standard include files:
*---------------------------------------------------------------------------*/
#include <stdio.h> /* standard I/O functions */
#include <reg167.h> /* special function register */
/*--------------------------------------------------------------------------*
* project specific include files:
*---------------------------------------------------------------------------*/
#include "timer.h"
#include "lcd.h"
#include "led.h"
/*==========================================================================*
* module internal definitions (#DEFINE):
*===========================================================================*/
#define VREF 5.00 /* external reference voltage for ADC */
#define ADC_RES 1023 /* resolution for ADC */
/*==========================================================================*
* module internal type declarations (TYPEDEF):
*===========================================================================*/
/*==========================================================================*
* module internal constants (CONST):
*===========================================================================*/
/*==========================================================================*
* extern available constants (CONST):
*===========================================================================*/
/*==========================================================================*
* modul internal variables:
*===========================================================================*/
/*==========================================================================*
* globale external available variables (EXTERN):
*===========================================================================*/
/*==========================================================================*
* modul internal functions:
*===========================================================================*/
/*--------------------------------------------------------------------------*
* int adc_in(BYTE channel)
*---------------------------------------------------------------------------*
* FT: read an ADC channel
* EP: channel = channel for analog-to-digital-conversion
* RV: result of conversion (10 bit resolution)
* GP: -
*---------------------------------------------------------------------------*/
int adc_in(BYTE channel)
{
ADCON = 0x80+channel; /* select channel in ADC-control-register */
while (ADCON&0x100) ; /* wait for end of conversion */
return(1023-(ADDAT&0x3FF)); /* return result of conversion */
}
/*--------------------------------------------------------------------------*
* void ledbar(BYTE value)
*---------------------------------------------------------------------------*
* FT: LED bar
* EP: value: output-level (0...16)
* RV: -
* GP: -
*---------------------------------------------------------------------------*/
void ledbar(BYTE value)
{ BYTE i;
for (i=1; i<=value; i++) /* turn LEDs ON */
{
led_set((i-1), LED_ON);
}
for (i=value+1; i<=16; i++)
{
led_set((i-1), LED_OFF); /* turn LEDs OFF */
}
}
/*==========================================================================*
* extern available functions:
*===========================================================================*/
/*--------------------------------------------------------------------------*
* void main(void)
*---------------------------------------------------------------------------*
* FT: read analog input-channel and write value to LCD
* show value as LED-bar
* EP: -
* RV: -
* GP: -
*---------------------------------------------------------------------------*/
void main(void)
{ int i;
int adc_value; /* digital value of analog input */
float voltage; /* input voltage */
unsigned char adc_value_text[17]; /* textstring for output on LCD */
TIMER_COUNTER t_base; /* time base for blinking */
BOOL blink_state;
timer_init(NULL); /* init timer modul */
led_init(); /* init LED control */
lcd_init(); /* init LCD */
lcd_center(0, "A/D converter");
lcd_center(1, "demo");
/* start-up LED demo: */
for (i=0; i<=LED_MAX; i++)
{
led_set(i, LED_ON);
timer_delay_10ms(5);
}
for (i=0; i<=LED_MAX; i++)
{
led_set(i, LED_OFF);
timer_delay_10ms(5);
}
/* wait for poti to be turned: */
lcd_center(1, "Turn poti!");
adc_value = adc_in(0); /* read analog input channel 0 */
t_base = timer_get_10ms(TIMER_MIN);
blink_state = TRUE;
while((adc_value > adc_in(0) - 10) && (adc_value < adc_in(0) + 10))
{
if (timer_get_10ms(t_base) > 50)
{
t_base = timer_get_10ms(TIMER_MIN);
if (blink_state == TRUE)
{
lcd_center(1, "");
blink_state = FALSE;
}
else
{
lcd_center(1, "Turn poti!");
blink_state = TRUE;
}
}
}
lcd_clr(); /* clear LCD */
lcd_center(0, "Input Voltage:"); /* write textstring to LCD */
/* endless main loop: */
while(1)
{
adc_value = adc_in(0); /* read analog input channel 0 */
voltage = adc_value*VREF/ADC_RES; /* calculate voltage */
/* convert unsigned int 'adc_value'
to textstring 'adc_value_textstring' */
sprintf(adc_value_text, "%4d = %.2f V", adc_value, voltage);
lcd_center(1, adc_value_text); /* write value to LCD */
ledbar((adc_value+32)/64); /* show value on LED bar */
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -