?? adc.c
字號:
#include<iom16v.h>
#include<macros.h>
#include "abs.h"
/* 七段譯碼字形表 */
/*const unsigned char tabel[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e};*/
//放一個串口通訊時自己能看懂的數據簡單處理
const unsigned char tabel[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15};
/* 顯示緩沖區 */
unsigned int d[]={0,0,0,0,0,0,0,0,0,0,0};
void port_init(void)//端口初始化
{
PORTA = 0x00;DDRA = 0xff; PORTB = 0x00;DDRB = 0x00;
PORTC = 0x00;DDRC = 0x00; PORTD = 0xff;DDRD = 0x00;
DDRA =0xff&((~(1<<PA3))|(~(1<<PA6)) );
}
void display()
{
USART_Transmit8(tabel[d[3]]); //送數據
delay_nms(10);
USART_Transmit8(tabel[d[2]]);
delay_nms(10);
USART_Transmit8(tabel[d[1]]);
delay_nms(10);
USART_Transmit8(tabel[d[0]]);
delay_nms(10);
}
unsigned int ad_con;//存放PA0的AD轉換結果
/* 將AD結果轉換成電壓 */
#define vref 502
void adctovol(unsigned int adc)
{
unsigned int temp;
unsigned char i;
unsigned char *char_p;
temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
for(i=0;i<3;i++)
{
d[i]=temp%10;
temp=temp/10;
}
}
/* AD轉換程序 */
#pragma interrupt_handler adc_isr:15
void adc_isr(void)
{
unsigned int temp=0;
while(temp<6)
temp++;
ad_con=ADC;
ADCSR|=(1<<ADSC);//啟動轉換
}
//將AD轉換結果轉換成電壓數值
void main(void)
{
unsigned char i;
port_init();
WDT_ON();
USART_InitM1681(9600);
Red_LedON;Green_LedON;
delay_nms(500); //延時1秒
Red_LedOFF; Green_LedOFF;
USART_Transmit8(2);
USART_Transmit8(0x0d); //發送一個回車
USART_Transmit8(0x0a); //發送一個換行
MCUCSR=0;
//ADMUX=0x00;//0通道
ADMUX=0x03;//3
// ADMUX=0x06;//6
ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|0x06;
SEI();
i=0;
USART_Transmit_2();//發個Hello
while(1)
{
if((i==127)|(i==0))
adctovol(ad_con);//降低AD結果刷新速率
display(); //使末位閃爍不太明顯
Red_D1glint;delay_nms(500);//紅綠燈交替亮滅
Green_D1glint;delay_nms(500);
i++;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -