找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6420|回复: 1
收起左侧

atmega128 AD 转换

[复制链接]
ID:80436 发表于 2015-5-21 23:50 | 显示全部楼层 |阅读模式
  1. /*********************************包含头文件********************************/
  2. #include <iom128v.h>
  3. #include <macros.h>

  4. /********************************数码管段码表*******************************/
  5. extern const unsigned char tab[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
  6.                                   0x7F,0x6F};

  7. /*********************************端口定义**********************************/
  8. #define  sclon   PORTG |=BIT(0);     //时钟高
  9. #define  scloff   PORTG &=~BIT(0);
  10. #define  dion   PORTG |=BIT(1);      //数据高
  11. #define  dioff   PORTG &=~BIT(1);

  12. /*********************************全局变量**********************************/
  13. unsigned int adc_rel;
  14. int dat;

  15. /****************************************************************************
  16. 函数功能:ADC初始化函数
  17. 入口参数:
  18. 出口参数:
  19. ****************************************************************************/
  20. void adc_init(void)
  21. {
  22. ADCSRA=0x00;  //关ADC
  23. ADMUX = (1<<REFS1)|(1<<REFS0); // 2.56V
  24. ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
  25. }

  26. /****************************************************************************
  27. 函数功能:ADC中断函数
  28. 入口参数:
  29. 出口参数:
  30. ****************************************************************************/
  31. #pragma interrupt_handler adc_isr:iv_ADC
  32. void adc_isr(void)
  33. {
  34.    int data_H,data_L;
  35.   ADCSRA = 0x00;  
  36.   adc_rel=ADC;
  37.   ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIE);
  38. }

  39. /****************************************************************************
  40. 函数功能:数据输出程序
  41. 入口参数:temp
  42. 出口参数:
  43. ****************************************************************************/
  44. void dataOUT(unsigned char temp)
  45. {
  46.     unsigned char i,temp1;
  47.     temp1 = tab[temp];
  48.     for(i = 0;i < 8;i++ )
  49.     {
  50.         scloff;
  51.   if((temp1&0x80)!= 0x80)
  52.          {  dioff;}
  53.         else
  54.          { dion;}  
  55.   sclon;
  56.         temp1 <<=1;
  57.   scloff;
  58.     }
  59. }

  60. /****************************************************************************
  61. 函数功能:延时子程序
  62. 入口参数:
  63. 出口参数:
  64. ****************************************************************************/
  65. void delay(void)
  66. {
  67.    int i;
  68.     for(i=0;i<200;i++);
  69. }

  70. /****************************************************************************
  71. 函数功能:显示子程序
  72. 入口参数:k
  73. 出口参数:
  74. ****************************************************************************/
  75. void display(unsigned int k)
  76. {
  77.    dataOUT(k/1000);
  78.   PORTG &=0x03;
  79.   delay();
  80.   dataOUT(k/100%10);
  81.   PORTG |=0x04;
  82.   delay();
  83.   dataOUT(k/10%10);
  84.   PORTG &=0x0B;      
  85.   PORTG |=0x08;
  86.   delay();
  87.   dataOUT(k%10);
  88.   PORTG |=0x0C;
  89.   delay();
  90. }

  91. /****************************************************************************
  92. 函数功能:主程序
  93. 入口参数:
  94. 出口参数:
  95. ****************************************************************************/
  96. void main(void)
  97. {
  98.    DDRE=0x00;
  99.   DDRG=0xff;
  100.   adc_init();
  101.   SEI();
  102.   display(0);
  103.   while(1)
  104.   {
  105.     delay();
  106.    display(adc_rel);
  107.   }
  108. }
复制代码

回复

使用道具 举报

ID:614322 发表于 2019-9-21 11:05 | 显示全部楼层
学习一下,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表