找回密码
 立即注册

QQ登录

只需一步,快速开始

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

AD模数转换实验,实验数码管显示电平代码一直是0008,实际应显示3845,代码哪里出错?

[复制链接]
跳转到指定楼层
楼主
ID:826461 发表于 2020-10-7 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include"reg52.h"
  2. #include"adc.h"
  3. #define GPIO_DIG  P0
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define u8 unsigned char
  7. sbit LSA=P2^2;
  8. sbit LSB=P2^3;
  9. sbit LSC=P2^4;  
  10. unsigned char code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  11.      0x7f,0x6f};
  12. unsigned char displaydig[4];
  13. void delay(uint i)
  14. {
  15. while(i--);
  16. }
  17. void datapros()
  18. {
  19.    uint temp;
  20.    static u8 i;
  21.     if(i==50)
  22. {
  23.   i=0;
  24.    temp=Read_AD_Value(0x94);   //notice ???????
  25.     }
  26. i++;
  27.    displaydig[0]=smgduan[temp/1000];
  28.    displaydig[1]=smgduan[temp%1000/100];
  29.    displaydig[2]=smgduan[temp%1000%100/10];
  30.    displaydig[3]=smgduan[temp%1000%100%10];
  31. }
  32. void DigDisplay()
  33. {
  34. u8 i;
  35. for(i=0;i<4;i++)
  36. {
  37.   switch(i)
  38.   {
  39.    case(0):
  40.     LSA=0;LSB=0;LSC=0; break;
  41.    case(1):
  42.     LSA=1;LSB=0;LSC=0; break;
  43.    case(2):
  44.     LSA=0;LSB=1;LSC=0; break;
  45.    case(3):
  46.     LSA=1;LSB=1;LSC=0; break;
  47.   }
  48.   GPIO_DIG=displaydig[i];
  49.   delay(100);
  50.   GPIO_DIG=0x00;
  51. }
  52. }
  53. void main()
  54. {
  55.    while(1)
  56.    {
  57.      datapros();
  58.   DigDisplay();
  59.    }
  60. }




  61. #include"reg52.h"
  62. #include"adc.h"
  63. #include"intrins.h"
  64. #ifndef uchar
  65. #define uchar unsigned char
  66. #endif
  67. #ifndef uint
  68. #define uint unsigned int
  69. #endif
  70. sbit CS=P3^5;
  71. sbit CLK=P3^6;
  72. sbit DIN=P3^4;
  73. sbit DOUT=P3^7;
  74. void SPI_Write(uchar dat)
  75. {
  76.     uchar i;
  77. CLK=0;
  78. for(i=0;i<8;i++)
  79. {
  80.    DIN=dat>>7;
  81.    dat<<=1;
  82.    CLK=0;   //????
  83.    
  84.    CLK=1;
  85.   
  86. }
  87. }
  88. uint SPI_Read()
  89. {
  90.     uchar i,dat=0;
  91. CLK=0;
  92. for(i=0;i<12;i++)
  93. {
  94.     dat<<=1;
  95.     CLK=1;
  96.     CLK=0;    //????????
  97.     dat|=DOUT;
  98.    
  99. }
  100.    return dat;
  101. }
  102. uint Read_AD_Value(uchar cmd)
  103. {
  104.     uint AD_Value;
  105.     int i;
  106. CS=0;
  107. CLK=0;
  108. SPI_Write(cmd);
  109. for(i=6;i>0;i--);
  110. CLK=1;    //????
  111. _nop_();
  112. _nop_();
  113. CLK=0;
  114. _nop_();
  115. _nop_();
  116. AD_Value=SPI_Read();
  117. //_nop_();
  118. CS=1;
  119. return AD_Value;
  120. }

  121. #ifndef __ADC_H__
  122. #define __ADC_H__
  123. #ifndef uchar
  124. #define uchar unsigned char
  125. #endif
  126. #ifndef uint
  127. #define uint unsigned int
  128. #endif
  129. uint Read_AD_Value(uchar cmd);
  130. uint SPI_Read();
  131. void SPI_Write(uchar dat);
  132. #endif
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:767423 发表于 2020-10-8 09:07 | 只看该作者
你把temp=Read_AD_Value(0x94);直接改成temp=3845;看看显示对不对。一步一步排查。
回复

使用道具 举报

板凳
ID:827243 发表于 2020-10-9 16:31 | 只看该作者
datapros()函数写错了,应该这样写。

void datapros()
{
   uint temp;
   static u8 i;
    if(i==50)
{
  i=0;
   temp=Read_AD_Value(0x94);   //notice ???????
    displaydig[0]=smgduan[temp/1000];
   displaydig[1]=smgduan[temp%1000/100];
   displaydig[2]=smgduan[temp%1000%100/10];
   displaydig[3]=smgduan[temp%1000%100%10];
   }
i++;

}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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