📄 采交流.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 + -