📄 main.c
字号:
/*****************************************
* 基于AD转化程序设计 *
* 功 能:AD转化 *
* 时钟频率:内部8M *
* 设 计:莫锦攀 *
* 修改日期:2007年07月04日 *
* 编译环境:ICC-AVR6.31 *
* 实验环境:M16学习板 *
* 使用端口:PC6,PC7,PA4~PA7,PA0 *
*****************************************/
#include <iom128v.h>
#include <macros.h>
#include "lcm12864.h"
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
uchar Data[5]={0,0,0,0,0};//初始值为0000,最后一个0是结束符
void change(uint i,uchar *p) //显示处理
{p[3]=i%10+48;//个
p[2]=i/10%10+48;//十
p[1]=i/100%10+48;//百
p[0]=i/1000%10+48;//千
}
uint ADC_convert(void)//AD转换函数,读取采样获得的10位数据
{
uint temp1,temp2;
temp1=(uint)ADCL;
temp2=(uint)ADCH;
temp2=(temp2<<8)+temp1;
return temp2;
}
void ADC_init(void)
{ ADMUX=0x01; //选择通道PA0;外部REF+5V
ADCSRA|=((1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0));
//使能AD;启动AD;自由转换模式;8分频
// ADCSRA=0xc2;
}
void main(void)
{uint i,j;
//uchar a;
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0x01;
DDRB = 0xFF;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x0f;
PORTE = 0x00;
DDRE = 0xF0;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x00;
DDRG = 0x00;
LCM_init();//液晶初始化
//DisHZ(0x89,11,"正在启动...");
/*// ADMUX=(1<<REFS0)|(1<<REFS1);//选择第一通道ADC0,内部REF(2.56V)
ADMUX=0x01;
ADCSRA=0xe5;//8M32分频,125k速率,自由模式;启动AD转换器*/
ADC_init();
delay_nms(10);//延迟100ms等待系统稳定后读取数据
while(1)
{
i=ADC_convert();
j=0;
change(i,Data);
DisHZXY(0,0,10,"AD测试程序");
DisHZXY(3,1,4,Data);
if(i>650)
{ DisHZXY(2,3,4,"正转");
PORTA|=(1<<2);
PORTC|=(1<<6);
while(j<=2000)
{
PORTA|=(1<<3);
delay_nus(17);
PORTA&=~(1<<3);
delay_nus(17);
j++;
}
PORTC&=~(1<<6);
}
else if(i<0xC8&&i>0x64)
{DisHZXY(2,3,4,"反转");
PORTA&=~(1<<2);
PORTC|=(1<<6);
while(j<=2000)
{
PORTA|=(1<<3);
delay_nus(17);
PORTA&=~(1<<3);
delay_nus(17);
j++;
}
PORTC&=~(1<<6);
}
else
DisHZXY(2,3,4,"停止");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -