0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于AVR单片机Atmega16的ADC采集数码管显示仿真程序设计方案

基于AVR单片机Atmega16的ADC采集数码管显示仿真程序设计方案

来源: eeworld
2021-05-12
类别:工业控制
eye 111
文章创建人 拍明

原标题:基于AVR单片机Atmega16的ADC采集数码管显示仿真程序设计方案

  电路图

  

1.png


  用到的数码管是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();

  }

  }


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯