ATmega8内部AD程序.doc
《ATmega8内部AD程序.doc》由会员分享,可在线阅读,更多相关《ATmega8内部AD程序.doc(4页珍藏版)》请在冰豆网上搜索。
![ATmega8内部AD程序.doc](https://file1.bdocx.com/fileroot1/2022-10/30/1330aa7a-57a5-43ca-b738-ffb452dbef4d/1330aa7a-57a5-43ca-b738-ffb452dbef4d1.gif)
#include
#include
typedefunsignedcharuchar;
typedefunsignedintuint;
/*LCD引脚定义*/
#defineCS_setPORTD|=BIT(6)
#defineCS_clrPORTD&=~BIT(6)
#defineSID_setPORTD|=BIT(7)
#defineSID_clrPORTD&=~BIT(7)
#defineSCLK_setPORTB|=BIT(0)
#defineSCLK_clrPORTB&=~BIT(0)
Delay(uintt)
{
while(--t);
{}
}
/*LCD12232端口初始化*/
voidPORT_Init(void)
{
DDRD|=BIT(6);
PORTD|=BIT(6);
DDRD|=BIT(7);
PORTD|=BIT(7);
DDRB|=BIT(0);
PORTB|=BIT(0);
}
/*LCD12232写数据*/
voidSend_DATA(ucharData,ucharO_Z)
{
uchari,Order;
CS_clr;
switch(O_Z)
{
case0:
Order=0xf8;break;//写指令
case1:
Order=0xfa;break;//写数据
default:
break;
}
SCLK_clr;
CS_set;
for(i=0;i<8;i++)
{
if(Order&0x80)
SID_set;
else
SID_clr;
SCLK_clr;
SCLK_set;
Order<<=1;
}
Order=Data;
Order&=0xf0;
for(i=0;i<8;i++)
{
if(Order&0x80)
SID_set;
else
SID_clr;
SCLK_clr;
SCLK_set;
Order<<=1;
}
Order=Data;
Order<<=4;
for(i=0;i<8;i++)
{
if(Order&0x80)
SID_set;
else
SID_clr;
SCLK_clr;
SCLK_clr;
SCLK_set;
Order<<=1;
}
CS_clr;
Delay(20);
}
/*显示一字符串*/
voidDis_str(ucharAddr,uchar*str)
{
Send_DATA(Addr,0);
Delay(30);
while(*str!
='\0')
{
Send_DATA(*str,1);
str++;
Delay(20);
}
}
/*LCD12232初始化*/
voidInit_LCD(void)
{
Delay(2000);
Send_DATA(0x06,0);
Delay(200);
Send_DATA(0x02,0);
Delay(200);
Send_DATA(0x0c,0);
Delay(200);
Send_DATA(0x80,0);
Delay(200);
Send_DATA(0x30,0);
Delay(200);
Send_DATA(0x01,0);
Delay(5000);
}
/*片内ADC初始化*/
voidADC_Init(void)
{/*工作于单次转换模式下*/
DDRC|=(1<<4)|(1<<5);
ADMUX=0xc4;//0xc5
ADCSRA=0x84;
}
voidmain(void)
{
uchari;
ucharTemp_L,Temp_H;
uintAD_Data=0;
PORT_Init();
Init_LCD();
ADC_Init();
do
{
ADMUX|=0x04;//启用PC4口作模拟量输入
ADCSRA|=0x70;//启动AD转换
while(ADCSRA&(1<ADCSRA&=~(1<Delay(10);
Temp_L=ADCL;
Temp_H=ADCH;
AD_Data=Temp_H*256+Temp_L;
Send_DATA(0x81,0);
Send_DATA(AD_Data/1000+0x30,1);
Send_DATA(AD_Data%1000/100+0x30,1);
Send_DATA(AD_Data%100/10+0x30,1);
Send_DATA(AD_Data%10+0x30,1);
ADMUX|=0x05;//启用PC4口作模拟量输入
ADCSRA|=0x70;//启动AD转换
while(ADCSRA&(1<ADCSRA&=~(1<Delay(10);
Temp_L=ADCL;
Temp_H=ADCH;
AD_Data=Temp_H*256+Temp_L;
Send_DATA(0x84,0);
Send_DATA(AD_Data/1000+0x30,1);
Send_DATA(AD_Data%1000/100+0x30,1);
Send_DATA(AD_Data%100/10+0x30,1);
Send_DATA(AD_Data%10+0x30,1);
for(i=10;i>0;i--)
Delay(60000);
}
while
(1);
}