资料介绍
在附件中有仿真以及LCD显示的源文件
//Project :ADC(10 bit) and LCD Display
//ICC-AVR application builder : 2007-5-10 21:20:44
// Target : M16
// Crystal : 8.0000Mhz
// Writer : you hu
#include iom16v.h>
#include macros.h>
#include "display.h"
#include "lcd.h"
unsigned int value; //全局变量,存储10位的AD转换数据
//ADC initialize
// Conversion time: 52uS
void adc_init(void)
{
ADCSR = 0x00; //禁止AD启动
ADMUX = 0xC0; //选择通道0,默认的右对齐方式
ACSR = 0x80;
ADCSR = 0xED; //启动AD转换
}
#pragma interrupt_handler adc_isr:15 //中断方式读取AD转换值
void adc_isr(void)
{
value=ADCL; //读取低8位转换值
value|=(int)ADCH 8; //读取高2位转换值
}
void display(unsigned char X,unsigned char Y) //位显示函数,将对转换结果的数字量进行“0”或“1”的显示
{
if(Y)
LCD_write_char(X,0,'1'); //如果转换结果变量的某一位为“1”,则显示,否则显示“0”
else
LCD_write_char(X,0,'0');
}
void transfor() //对12位数字量的量化和显示函数
{
unsigned int datas;
unsigned int bits=0x0001; //位屏蔽变量,通过移位处理,将得出数字量的每一位值(0或1)
unsigned char i,pos=10; //显示位置变量,通过循环处理将依次将数字量的每一位显示在LCD上
init_lcd();
datas =(valuebits); //最低位独立处理
display(11,datas);
bits = bits1;
for(i=0;i=10;i++) //高11位在循环中处理
{
datas =(valuebits); //位屏蔽操作
datas = datas>>(i+1);
display(pos,datas); //位显示操作
bits = bits1;
pos--;
}
}
void init_devices(void)
{
CLI(); //禁止所有中断
adc_init();
transfor();
MCUCR = 0x00;
SREG = 0X80; //允许中断发生
GICR = 0x00;
TIMSK = 0x00;
SEI(); //重新开启所有中断
}
void main(void)
{
init_devices();
while(1); //循环等待转换开始
}