×
单片机 > 单片机程序设计 > 详情

AVR单片机Atmega16的ADC采集数码管显示仿真程序

发布时间:2021-06-17 发布时间:
|

电路图

用到的数码管是7SEG-MPX4-CC。

程序代码

#include

#include


#define uchar unsigned char

#define uint unsigned int


flash char led_7[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

flash char position[4] = {0xe0, 0xd0, 0xb0, 0xf0};


char ad[4];


//数码管显示函数

void display() {

char i;

for (i = 0; i < 4; i++) {

PORTD = position[i];

if (i == 3) {

PORTA

.6 = 0;

}

PORTC = led_7[ad[i]] + 0x80;

delay_ms(2);

PORTA

.6 = 1;

}

}


//处理ADC数据

void progress(uint data) {

char i;

for (i = 0; i < 4; i++) {

ad[3 - i] = data % 10;

data = data / 10;

}

}


// ADC数据采集

uint mega16_ad() {

uint addata;

PORTA = 0xfe; // PA0设为输入

DDRA = 0xfe;

SFIOR = 0; //连续转换模式

ADMUX = 0x00; // ADC0单端输入 AVCC参考电压

ADCSRA = 0xC0; //启动AD转换, 并开始转换

while ((ADCSRA & 0x10) == 0); //等到转换结束

addata = ADCL; //读取ADC数据 低位

addata = addata + ADCH * 256; //读取ADC数据 低位 + 高位

ADCSRA |= 0x10;

addata = addata / 1024.0 * 5000; //计算电压

return addata;

}


//主函数

void main() {


uint ada;


PORTC = 0xff; //初始化PC口

DDRC = 0xff;//设置PC口为输出

PORTA = 0xff;

DDRA = 0xff;//设置PA口为输出

PORTD = 0xff;

DDRD = 0xff; //设置PD口为输出


while (1) {

ada = mega16_ad();

progress(ada);

display();

}

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计