找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1163|回复: 1
打印 上一主题 下一主题
收起左侧

ATMEGA16单片机+AD7715采集陀螺仪的驱动程序

[复制链接]
跳转到指定楼层
楼主
ID:335334 发表于 2019-4-27 21:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
,用ATMEGA16编写,使用AD7715做AD采集,16BIT精度

单片机源程序如下:
  1. #include<avr/io.h>  
  2. #include<stdio.h>
  3. #include <avr/interrupt.h>
  4. #include <avr/signal.h>

  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. #define ulong unsigned long

  8. #define RDY (PINA&_BV(5))

  9. #define RES_1 PORTA|=_BV(5)
  10. #define RES_0 PORTA&=~_BV(5)


  11. static uint g_aAdValue[100]; //A/D 转换缓冲区

  12. unsigned long int results=0;
  13. uint jiaodu,zhong;
  14. uint adc;
  15. int vjiao;
  16. long fx;
  17. /*----------------------------------------------------------------------------
  18. 延时一些时间
  19. ------------------------------------------------------------------------------*/
  20. void delay10ms(unsigned int x)
  21. {
  22. unsigned char i,j,k;
  23. for(i=0;i<x;i++)
  24.   for(j=0;j<10;j++)
  25.    for(k=0;k<120;k++);
  26. }
  27. void delay(unsigned int x)
  28. {

  29. while(x--)
  30. {;}
  31. }
  32. /*----------------------------------------------------------------------------
  33. 初始化IO口
  34. ------------------------------------------------------------------------------*/
  35. void IoInit(void)
  36. {
  37. DDRA=0X0F;
  38. PORTA=0Xff;
  39. //DDRD=0Xff;
  40. //PORTD=0Xff;
  41. }

  42. void InitS() //初始化串口
  43. {
  44. UBRRL=51;//设置波特率为9600
  45. UCSRB|=_BV(RXEN)|_BV(TXEN);//允许串口接受
  46. // UCSR1B|=_BV(RXCIE);//允许串口中断



  47. }

  48. void SPI_SET(void)                                            //SPI初始化
  49. {
  50.            DDRB=0XBE;                                                 //DRDY接PB1,设置PB1为输入口
  51.          PORTB=0XFF;
  52.          PORTB=0XEF&PORTB;                                 //复位接PB4,此处为拉低PB4
  53.          SPCR=0X5c;                                                   //设置SPI使能,工作于主机状态,
  54.                                                                           //并设CPOL=0,CPHA=1,SPR1=0,SPR2=0
  55.                                                                          //SCK为对11.0592晶振的1/4分频
  56. }
  57. void WRITE_DATA(uchar i)                         //SPI发送数据
  58. {
  59.            uchar CLEAR;
  60.          SPDR=i;
  61.          while(!(SPSR&0X80));
  62.         CLEAR=SPSR;
  63.         CLEAR=SPDR;
  64. }
  65. uchar READ_DATA(void)                                  //SPI接收数据
  66. {
  67.            
  68.           uchar data,clear;
  69.           SPDR=0x00;
  70.           while(!(SPSR&0x80));
  71.           clear=SPSR;
  72.           data=SPDR;
  73.           return(data);
  74. }
  75. void putbyte(uchar x)
  76. {
  77. while( !(UCSRA & (1<<UDRE)) );
  78. UDR=x;
  79. }

  80. ////////////////////////////////////////////////////////////////////////////////

  81. uchar num(uchar x)
  82. {
  83. switch(x)
  84. {
  85.   case 0:x='0';break;
  86.   case 1:x='1';break;
  87.   case 2:x='2';break;
  88.   case 3:x='3';break;
  89.   case 4:x='4';break;
  90.   case 5:x='5';break;
  91.   case 6:x='6';break;
  92.   case 7:x='7';break;
  93.   case 8:x='8';break;
  94.   case 9:x='9';break;
  95. }
  96. return x;
  97. }
  98. uint AD(void)
  99. {
  100. uint result1,result2,ad;
  101. RES_1;
  102. while(RDY);
  103. WRITE_DATA(0x38);
  104. while(RDY);
  105. result1=READ_DATA();
  106. result2=READ_DATA();
  107. RES_0;
  108. ad=(result1<<8)+result2;
  109. return ad;
  110. }
  111. void InitTLY(void)
  112. {
  113. uchar i;
  114. for(i=0;i<200;i++)
  115.   {
  116.    results+=AD();
  117.   }
  118. zhong=results/200;
  119. }
  120. //****************************************************************************//
  121. //                                                                                            //
  122. //                                                         主函数                                                                                          //
  123. //                                                                                                                                                          //
  124. //****************************************************************************//
  125. int main(void)
  126. {
  127. uchar i;

  128. IoInit();
  129. InitS();
  130. SPI_SET();
  131. while(1)
  132. ……………………

  133. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
陀螺仪.zip (11.63 KB, 下载次数: 10)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-4-27 22:27 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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