在附件中有仿真以及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: 52uSvoid 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); //循环等待转换开始}……