|
想在12864上同时显示ad0和ad1的数值,但转换通道时出错,(单个转换时,可以用),应该怎么写的啊,哪位大侠帮帮忙,弄了几天了,都没弄清楚.....
/*
函数说明:12864串行驱动
注意事项:1,12864的串并选择硬件实现2,分界线以下的程序除初始化函数外没必要修改
作者:
时间:2009年7月18日
*/
#include<iom8v.h>
#include<macros.h>
#include"LCD12864.H"
#include"PWM.H"
#define uchar unsigned char
#define uint unsigned int
uchar js=0;
unsigned long ad,ad1,ad2;
unsigned long adc_dat[1]; //AD转换 比较值存放数组
unsigned long adc_hc[1]; //AD转换 缓冲存放数组
void dispaly(unsigned char address,unsigned long num)
{
unsigned char a,b,c,d,e,f;
write_com(address);
a=num/100000+0x30;
b=num%100000/10000+0x30;
c=num%10000/1000+0x30;
d=num%1000/100+0x30;
e=num%100/10+0x30;
f=num%10+0x30;
write_data(a);
msdelay(1);
write_data(b);
msdelay(1);
write_data(c);
msdelay(1);
write_data(d);
msdelay(1);
write_data(e);
msdelay(1);
write_data(f);
msdelay(1);
}
///ADC initialize
// Conversion time: 208uS
void init_adc(void)
{
DDRC|=(1<<PC0)|(1<<PC1)|(1<<PC2); //设置C口为输入,即ADC输入通道
PORTC&=~((1<<PC0)|(1<<PC1)|(1<<PC2));
ADCSRA=0X00; //在选择AD输入通道前关闭ADC转换的各个位
ADMUX|=(1<<REFS0)|(1<<REFS1); //选择内部2.56v为基准电压,设置AD转换通道
ACSR|=(1<<ACD);
ADCSRA=0X86;//单次转换 64分频
ADCSR|=(1<<ADSC)|(1<<ADIE);
}
//ADC完成中断
#pragma interrupt_handler adc_isr:15
void adc_isr(void)
{
unsigned long value;
value=ADCL; //Read 8 low bits first (important)
value|=(uint)ADCH << 8;
ad= value;
ad=(ad*3040)/1023;
ADCSRA|=(1<<ADSC);
}
void main(void)
{
uchar i;
unsigned long S1=123456,S2=555555,S3=222222;
CLI();
DDRD&=~BIT(3);
DDRD&=~BIT(4);
DDRD&=~BIT(7);
PORTD|=BIT(3)|BIT(4)|BIT(6);
lcd12864_init();
PWM_init();
SEI();
while(1)
{
init_adc();
ad1=ad;
dispaly(0x80,ad1);
ADCSRA&=~(1<<ADIE); //关中断
ADMUX|=(1<<REFS0)|(1<<REFS1)|(1<<MUX0);//改通道
ADCSRA|=(1<<ADIE); //开中断
ad2=ad;
dispaly(0x90,ad2);
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|