?? ad1.c
字號(hào):
#include <iom16v.h>
#include <macros.h>
//#include <math.h>
#include <float.h>
#define uchar unsigned char
#define uint unsigned int
#define F_cpu 7372800
uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0到9顯示
uchar Data[]={0,0,0,0};
uchar time_1ms_ok=0;
/*-----------------------------------------------------------------
延時(shí)程序計(jì)算方法
計(jì)數(shù)個(gè)數(shù)j = 延時(shí)時(shí)間/6*晶振頻率 - 1
-----------------------------------------------------------------*/
void Delay_ms(uint i)
{
uint j;
while(i--)
{
j = 1228;//7.3728mhz 1ms延時(shí)
while(j--);
}
}
//
void Display(unsigned int v)
{
Data[0]=v/1000;
v=v%1000;
Data[1]=v/100;
v=v%100;
Data[2]=v/10;
v=v%10;
Data[3]=v;
//位選高電平有效PD2-A,PD3-B,PD4-C,PD5-D;段選高電平有效PB0~6-a~b
PORTD=0x04;//送個(gè)位
PORTB=Table[Data[3]];
Delay_ms(5);//延時(shí)5ms
PORTD=0x08;//送十位
PORTB=Table[Data[2]];
Delay_ms(5);
PORTD=0x10;//送百位
PORTB=Table[Data[1]];
Delay_ms(5);
PORTD=0x20;//送千位
PORTB=Table[Data[0]];
Delay_ms(5);
}
//Timer0比較匹配中斷服務(wù)
#pragma interrupt_handler timer0_comp_isr:20
void timer0_comp_isr(void)
{
time_1ms_ok=1;
}
///ADC轉(zhuǎn)換完成中斷
#pragma interrupt_handler adc_isr:15
void adc_isr(void)
{
uint adc_data,adc_v,temp;
adc_data=ADCL;
temp=ADCH;
adc_data=(temp<<8)|adc_data;
adc_v=adc_data*4000/1024;//輸出電壓放大1000倍
Display(adc_v);
}
//系統(tǒng)主程序
void main (void)
{
DDRA=0x00;
PORTA=0x00;//AD采樣端口要定義為輸入,且不能使能內(nèi)部上拉電阻
//七段數(shù)碼管全部點(diǎn)亮
DDRB=0xff;
PORTB=0xff;
DDRD=0xff;
PORTD=0xff;
Delay_ms(1000);
//T/C0初始化
TCCR0=0x0D;//內(nèi)部時(shí)鐘,1024分頻(7372800/1024=7.2KHz),CTC模式
TCNT0=0x00;
OCR0=0x07;//OCR0=7,7/7.2KHz=1ms
TIMSK=0x02;//使能T/C0比較中斷
//ADC初始化
ADMUX=0x40;//參考電壓源AVCC,ADC0單端輸入
SFIOR&=0x1f;
SFIOR|=0x60;//T/C0比較匹配觸發(fā)源
ADCSRA=(1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0);
//ADC允許,自動(dòng)觸發(fā)轉(zhuǎn)換,ADC轉(zhuǎn)換中斷允許,ADCclk=115.2kHz
SEI();
while(1)
{
/*if(time_1ms_ok)
{
time_1ms_ok=0;
}*/
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -