📄 ad.c
字号:
/**************************************************
*******************功能: AD转化并用数码管显示******
*******************单片机型号:M16 **************
*******************晶振: 内部8M **************
*******************作者:汝正阳 **************
*******************编程时间:09年5月9日0:55*******
***************************************************
*******************说明:AVCC做基准,使用AD0*******
******************* PD0 df **************
******************* PD1—7 g—a**************
***************************************************/
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
const unsigned char show[]={0b11111100,0b01100000,0b11011010,0b11110010,0b01100110,0b10110110,
0b10111110,0b11100000,0b11111110, 0b11110110, 0b00000001};
const unsigned char position[]={0b00000100,0b000001000,0b000010000,0b000100000,0b0010000,0b01000000};
uint compare(uint receive_y[10]);
void delay(unsigned int ms);
int abs(int Number);
uint mega16_ad(void);
void main()
{
uint ada,i,ad[4],m,ad_last,receive_y[10],count_y=0;
int j;
DDRB=0xff;
DDRD=0xff;
DDRC=0xff;
while(1)
{
ada=mega16_ad();
for(i=0;i<10;i++)
{
ada=mega16_ad();
receive_y[i]=ada;
}
ada=compare(receive_y);
j=ada-ad_last;
j=abs(j);
ad_last=ada;
if(j<25)
{
PORTC=0x00;
count_y++;
}
else
{
count_y=0;
}
if(count_y>200)
{
PORTC=0x00;
}
else
{
PORTC=0xff;
}
for(i=0;i<4;i++)
{
ad[3-i]=j%10;
j=j/10;
}
for(i=0;i<4;i++)
{
PORTD=show[ad[i]];
PORTB=position[i];
delay(5);
}
}
}
uint mega16_ad(void)
{
uint addata; //定义一个变量用于保存AD转化后的结果
DDRA&=~BIT(PA0); //将PA口设置为输入
PORTA&=~BIT(PA0); //取消PA口上拉电阻
ADMUX=0x40; //使用外部基准,结果使用10位精度,单端输入
ADCSR=0X80; //ADC使能
ADCSR|=BIT(ADSC); //开始转化
while(!(ADCSR&(BIT(ADIF)))); //等待转化结束
addata=ADCL;
addata=addata+ADCH*256; //处理下等到数值,将高位和低位合并
return addata;
}
int abs(int Number)
{
if(Number < 0)
{
Number=-Number;
}
else
{
Number=Number;
}
return Number;
}
uint compare(uint receive_y[10])
{uint sum;
uint i,aver;
sum=receive_y[0];
for(i=0;i<10;i++)
sum=sum+receive_y[i];
aver=sum/10;
return(aver);
}
void delay(unsigned int ms)//定义过后可用uint
{
unsigned int i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -