收藏 分销(赏)

AVR模拟量程序.doc

上传人:仙人****88 文档编号:12004633 上传时间:2025-08-26 格式:DOC 页数:4 大小:41.50KB 下载积分:10 金币
下载 相关 举报
AVR模拟量程序.doc_第1页
第1页 / 共4页
AVR模拟量程序.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
本程序经过测试 ,AVR单片机 模拟量转换以及显示程序! ICCAVR软件编译! #include <iom16v.h> #include <macros.h> unsigned char led4[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; unsigned char led4_buf[] = {0, 0, 0, 0, 0}; /*显示信息*/ //********************************** void delay_ms(unsigned int i) { unsigned int a; unsigned char b; for (a = 1; a < i; a++) { for (b = 1; b; b++) { ; } } } //********************************** //********************************** void main(void) { unsigned int i; DDRA = 0x7F; /*方向输入*/ PORTA = 0xFF; /*打开上拉*/ DDRB = 0xFF; /*方向输出*/ PORTB = 0xFF; /*电平设置*/ DDRC = 0xFF; PORTC = 0xFF; DDRD = 0xFF; PORTD = 0xFF; led4_init(); /*显示初始化*/ led4_buf[4] = 3; /*小数点位置*/ while (1) { delay_ms(100); /*周期控制*/ i = get_ad(); /*获取电压*/ i = (unsigned int)(((unsigned long)i*5000)/1024); /*将AD结果转成电压值*/ int_to_bcd(i); /*将电压值提取出来*/ } } //******************************** void led4_init(void) { /*初始化定时器*/ OCR1A = 1000; /*计数周期为4mS,F=1M*/ TIMSK |= (1 << OCIE1A); /*比较中断A允许*/ TCCR1A = 0x00; TCCR1B = (1 << WGM12); /*定时器工作在CTC计数器模式*/ TCCR1B |= (1 << CS11); /*设置定时器的分频值为8分频*/ /*SPI接口初始化*/ DDRB |= (1<<PB5) | (1<<PB7); /* 设置MOSI 和SCK 为输出,其他为输入 */ SPCR = (1<<SPE); /* 使能SPI接口*/ SPCR |= (1<<MSTR); /* 主机模式*/ SPCR |= (1<<SPR0); /* 时钟速率fck/16,62.5Kbit/S */ /*中断使能*/ SEI(); } //*********************************** unsigned int get_ad(void) { unsigned int i; ADMUX = (1 << REFS0);//|(1<<REFS1); /*基准AVCC*/ ADMUX |= (1 << MUX2) | (1 << MUX1) | (1 << MUX0); /*通道7*/ ADCSRA = (1 << ADEN) | (1 << ADSC) /*使能、开启*/ | (1 << ADPS1) | (1 << ADPS0)|(1 << ADPS2); /*8分频*/ while(!(ADCSRA & (1 << ADIF))); /*等待采样结束*/ i = ADC; /*读取AD结果*/ ADCSRA &= ~(1 << ADIF); /*清标志*/ ADCSRA &= ~(1 << ADEN); /*关闭转换*/ return i; /*返回结果*/ } //******************************* void int_to_bcd(unsigned int temp) { unsigned char i; if (temp > 9999) { /*防止数值过大*/ temp = 9999; } for (i = 0; i < 4; i++) { led4_buf[i] = temp % 10; /*提取当前变量最低位*/ temp = temp / 10; /*去掉当前最低位值*/ } } //**********************888] #pragma interrupt_handler Int_TCCR1A: iv_TIMER1_COMPA void Int_TCCR1A(void) { unsigned char temp; static unsigned char i; PORTB &= ~(1 << 4); /*准备锁存*/ PORTB |= 0x0F; /*清除显示位选*/ temp = led4_buf[i] % 16; /*过虑溢出的值*/ temp = led4[temp]; /*取出数示码值*/ if (led4_buf[4] == i) { /*显示小数点*/ SPDR = temp& 0x7F; /*加载显示值,启动SPI传输*/ } else { SPDR = temp; /*加载显示值,启动SPI传输*/ } while (!(SPSR & (1<<SPIF))); /* 等待传输结束 */ PORTB |= (1 << 4); /*锁存数据*/ PORTB &= ~(1 << i); /*设置位选*/ if (i > 3) { /*显示位置处理*/ i = 0; } else { i ++; } }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服