标题:
AD模数转换实验,实验数码管显示电平代码一直是0008,实际应显示3845,代码哪里出错?
[打印本页]
作者:
yangjiye
时间:
2020-10-7 10:08
标题:
AD模数转换实验,实验数码管显示电平代码一直是0008,实际应显示3845,代码哪里出错?
#include"reg52.h"
#include"adc.h"
#define GPIO_DIG P0
#define uint unsigned int
#define uchar unsigned char
#define u8 unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
unsigned char displaydig[4];
void delay(uint i)
{
while(i--);
}
void datapros()
{
uint temp;
static u8 i;
if(i==50)
{
i=0;
temp=Read_AD_Value(0x94); //notice ???????
}
i++;
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];
}
void DigDisplay()
{
u8 i;
for(i=0;i<4;i++)
{
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0; break;
case(1):
LSA=1;LSB=0;LSC=0; break;
case(2):
LSA=0;LSB=1;LSC=0; break;
case(3):
LSA=1;LSB=1;LSC=0; break;
}
GPIO_DIG=displaydig[i];
delay(100);
GPIO_DIG=0x00;
}
}
void main()
{
while(1)
{
datapros();
DigDisplay();
}
}
#include"reg52.h"
#include"adc.h"
#include"intrins.h"
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
sbit CS=P3^5;
sbit CLK=P3^6;
sbit DIN=P3^4;
sbit DOUT=P3^7;
void SPI_Write(uchar dat)
{
uchar i;
CLK=0;
for(i=0;i<8;i++)
{
DIN=dat>>7;
dat<<=1;
CLK=0; //????
CLK=1;
}
}
uint SPI_Read()
{
uchar i,dat=0;
CLK=0;
for(i=0;i<12;i++)
{
dat<<=1;
CLK=1;
CLK=0; //????????
dat|=DOUT;
}
return dat;
}
uint Read_AD_Value(uchar cmd)
{
uint AD_Value;
int i;
CS=0;
CLK=0;
SPI_Write(cmd);
for(i=6;i>0;i--);
CLK=1; //????
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
AD_Value=SPI_Read();
//_nop_();
CS=1;
return AD_Value;
}
#ifndef __ADC_H__
#define __ADC_H__
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
uint Read_AD_Value(uchar cmd);
uint SPI_Read();
void SPI_Write(uchar dat);
#endif
复制代码
作者:
hsl32
时间:
2020-10-8 09:07
你把temp=Read_AD_Value(0x94);直接改成temp=3845;看看显示对不对。一步一步排查。
作者:
daemondong
时间:
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++;
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1