?? 采交流.txt
字號:
// 問題采直流是總是閃爍,顯示有問題,改了幾次都不怎么成功//
//********************時間 11.8號修改**************************************//顯示有缺陷
#include<iom16v.h>
#include <macros.h>
float AD[180];
unsigned int b;
float cc,ad,max;
unsigned char flag2,k=0;
unsigned char flag1=0;
unsigned char time0;
unsigned char led_buff[4]={0,0,0,0};
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(unsigned int t )
{ unsigned int i;
for(i=0;i<t;i++)
{;;}
}
void delay_nus(int time)
{
do
{
time--;
}
while (time>1);
}
/* 毫秒級延時程序 */
void delay_nms(unsigned int time)
{
while(time!=0)
{
delay_nus(1000);
time--;
}
}
void time_init()
{
TCCR0=0;
SREG=0X80;
TIMSK=0x01;//溢出中斷允許
ASSR=0;
TCNT0=200;
TCCR0=0x02;//系統時鐘8分頻
}
#pragma interrupt_handler time0_yichu:10
void time0_yichu()
{
TCNT0=200;
time0=1;
flag1=1;
}
void initial_ADC( void)
{
ADCSRA = 0x00;
SREG=0X80; //開中斷
ADMUX=0X40; //AVCC,AREF為5V電壓,0通道
ADCSRA=0XCE;//64分頻,開AD使能,啟動ADSC,表示開始轉換,開中斷使能
flag1=0;
}
/*************************************/
#pragma interrupt_handler ADC16:15
void ADC16(void)
{
ad=(float)ADC*500/1024;
AD[k]=ad;
flag2=1;
}
void caidi()
{
unsigned char i;
for(i=0;i<180;i++)
{
time_init();
while(flag1==0) ;
initial_ADC();
while(flag2!=1) ;
k++;
flag2=0;
}
}
void display(void)
{
unsigned char i;
DDRB=0xff;
PORTB=0xff;
DDRD|=0xf0;//PD2,PD3分別為外部中斷0和1;
PORTD|=0xf0;
for(i=0;i<4;i++)
{
PORTB=led_buff[i];
PORTD&=~(1<<(i+4));//注意位運算符&,不是|
delay_nms(1);
PORTD|=0xf0;//每掃描一位,全部置高
}
}
void maxtoBCD(void)
{
unsigned char i;
for(i=0;i<4;i++)
{
led_buff[i]=table[(int)max%10];
max=(int)max/10;
}
}
void zuida()
{
unsigned char i;
max=AD[0];
for(i=0;i<180;i++)
{
if(AD[i]>max)max=AD[i];
else
i++;
}
}
void main()
{
while(1)
{caidi();
delay_nus(1000);
zuida();
delay_nms(10);
maxtoBCD();
delay_nus(100);
display();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -