微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机 关于AD转换代码问题

51单片机 关于AD转换代码问题

时间:10-02 整理:3721RD 点击:
谁有将光敏电阻阻值显示在lcd102上的完整代码  求助  紧急

这个问题很含糊啊,首先,51单片机自带AD么,如果没带,AD芯片怎样选型……反正网上一大堆,小编的要求不够详细
51单片机AD转换程序_百度文库
http://wenku.baidu.com/link?url= ... 6wn_sFJeWL7jTSu-Tz7

不知道带不带啊 但是我有例程  和  连接图
#ifndef          __XPT2046_H_
#define   __XPT2046_H_
//---包含头文件---//
#include<reg51.h>
#include<intrins.h>
//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint  unsigned int
#endif
#ifndef ulong
#define ulong  unsigned long
#endif
//---定义使用的IO口---//
sbit CLK  = P1^0;          //时钟         
sbit CS   = P1^1;          //片选
sbit DIN  = P1^2;          //输入
sbit DOUT = P1^3;          //输出
uint Read_AD_Data(uchar cmd);
uint SPI_Read(void);
void SPI_Write(uchar dat);
#endif

#include"XPT2046.h"
/****************************************************************************
*函数名:TSPI_Start
*输  入:无
*输  出:无
*功  能:初始化触摸SPI
****************************************************************************/
void SPI_Start(void)
{
        CLK = 0;
        CS  = 1;
        DIN = 1;
        CLK = 1;
        CS  = 0;               
}
/****************************************************************************
*函数名:SPI_Write
*输  入:dat:写入数据
*输  出:无
*功  能:使用SPI写入数据
****************************************************************************/
void SPI_Write(uchar dat)
{
        uchar i;
        CLK = 0;
        for(i=0; i<8; i++)
        {
                DIN = dat >> 7;          //放置最高位
                dat <<= 1;
                CLK = 0;                        //上升沿放置数据
                CLK = 1;
        }
}
/****************************************************************************
*函数名:SPI_Read
*输  入:无
*输  出:dat:读取 到的数据
*功  能:使用SPI读取数据
****************************************************************************/
uint SPI_Read(void)
{
        uint i, dat=0;
        CLK = 0;
        for(i=0; i<12; i++)                //接收12位数据
        {
                dat <<= 1;
                CLK = 1;
                CLK = 0;
                dat |= DOUT;
        }
        return dat;       
}
/****************************************************************************
*函数名:Read_AD_Data
*输  入:cmd:读取的X或者Y
*输  出:endValue:最终信号处理后返回的值
*功  能:读取触摸数据
****************************************************************************/
uint Read_AD_Data(uchar cmd)
{
        uchar i;
        uint AD_Value;
        CLK = 0;
        CS  = 0;
        SPI_Write(cmd);
        for(i=6; i>0; i--);         //延时等待转换结果
        CLK = 1;          //发送一个时钟周期,清除BUSY
        _nop_();
        _nop_();
        CLK = 0;
        _nop_();
        _nop_();
        AD_Value=SPI_Read();
        CS = 1;
        return AD_Value;       
}

#include"reg51.h"
#include"XPT2046.h"
//--定义使用的IO--//
#define GPIO_DIG P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//--定义全局变量--//
unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned char DisplayData[8];                //用来存放要显示的8位数的值
void DigDisplay(void);
void main(void)
{
        uint temp,count;
        while(1)
        {
          if(count==50)
          {
                  count=0;
        //        temp = Read_AD_Data(0x94);                //   AIN0 电位器
        //        temp = Read_AD_Data(0xD4);                //   AIN1 热敏电阻
                temp = Read_AD_Data(0xA4);                //   AIN2 光敏电阻
        //        temp = Read_AD_Data(0xE4);                //   AIN3 外部输入
          }
          count++;
          
          DisplayData[0]=DIG_CODE[0];
          DisplayData[1]=DIG_CODE[0];
          DisplayData[2]=DIG_CODE[0];
          DisplayData[3]=DIG_CODE[0];
          DisplayData[4]=DIG_CODE[temp%10000/1000];
          DisplayData[5]=DIG_CODE[temp%1000/100];
          DisplayData[6]=DIG_CODE[temp%100/10];
          DisplayData[7]=DIG_CODE[temp%10/1];
          DigDisplay();
        }
}
void DigDisplay(void)
{
        unsigned char i;
        unsigned int j;
        for(i=0;i<8;i++)
        {
                switch(i)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//显示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//显示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//显示第2位
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;//显示第3位
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;//显示第4位
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;//显示第5位
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;//显示第6位
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;//显示第7位       
                }
                GPIO_DIG=DisplayData;//发送段码
                j=50;                                                 //扫描间隔时间设定
                while(j--);       
                GPIO_DIG=0x00;//消隐
        }
}
       

不知道带不带啊 但是我有例程  和  连接图
#ifndef          __XPT2046_H_
#define   __XPT2046_H_
//---包含头文件---//
#include<reg51.h>
#include<intrins.h>
//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint  unsigned int
#endif
#ifndef ulong
#define ulong  unsigned long
#endif
//---定义使用的IO口---//
sbit CLK  = P1^0;          //时钟         
sbit CS   = P1^1;          //片选
sbit DIN  = P1^2;          //输入
sbit DOUT = P1^3;          //输出
uint Read_AD_Data(uchar cmd);
uint SPI_Read(void);
void SPI_Write(uchar dat);
#endif

#include"XPT2046.h"
/****************************************************************************
*函数名:TSPI_Start
*输  入:无
*输  出:无
*功  能:初始化触摸SPI
****************************************************************************/
void SPI_Start(void)
{
        CLK = 0;
        CS  = 1;
        DIN = 1;
        CLK = 1;
        CS  = 0;               
}
/****************************************************************************
*函数名:SPI_Write
*输  入:dat:写入数据
*输  出:无
*功  能:使用SPI写入数据
****************************************************************************/
void SPI_Write(uchar dat)
{
        uchar i;
        CLK = 0;
        for(i=0; i<8; i++)
        {
                DIN = dat >> 7;          //放置最高位
                dat <<= 1;
                CLK = 0;                        //上升沿放置数据
                CLK = 1;
        }
}
/****************************************************************************
*函数名:SPI_Read
*输  入:无
*输  出:dat:读取 到的数据
*功  能:使用SPI读取数据
****************************************************************************/
uint SPI_Read(void)
{
        uint i, dat=0;
        CLK = 0;
        for(i=0; i<12; i++)                //接收12位数据
        {
                dat <<= 1;
                CLK = 1;
                CLK = 0;
                dat |= DOUT;
        }
        return dat;       
}
/****************************************************************************
*函数名:Read_AD_Data
*输  入:cmd:读取的X或者Y
*输  出:endValue:最终信号处理后返回的值
*功  能:读取触摸数据
****************************************************************************/
uint Read_AD_Data(uchar cmd)
{
        uchar i;
        uint AD_Value;
        CLK = 0;
        CS  = 0;
        SPI_Write(cmd);
        for(i=6; i>0; i--);         //延时等待转换结果
        CLK = 1;          //发送一个时钟周期,清除BUSY
        _nop_();
        _nop_();
        CLK = 0;
        _nop_();
        _nop_();
        AD_Value=SPI_Read();
        CS = 1;
        return AD_Value;       
}

#include"reg51.h"
#include"XPT2046.h"
//--定义使用的IO--//
#define GPIO_DIG P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//--定义全局变量--//
unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned char DisplayData[8];                //用来存放要显示的8位数的值
void DigDisplay(void);
void main(void)
{
        uint temp,count;
        while(1)
        {
          if(count==50)
          {
                  count=0;
        //        temp = Read_AD_Data(0x94);                //   AIN0 电位器
        //        temp = Read_AD_Data(0xD4);                //   AIN1 热敏电阻
                temp = Read_AD_Data(0xA4);                //   AIN2 光敏电阻
        //        temp = Read_AD_Data(0xE4);                //   AIN3 外部输入
          }
          count++;
          
          DisplayData[0]=DIG_CODE[0];
          DisplayData[1]=DIG_CODE[0];
          DisplayData[2]=DIG_CODE[0];
          DisplayData[3]=DIG_CODE[0];
          DisplayData[4]=DIG_CODE[temp%10000/1000];
          DisplayData[5]=DIG_CODE[temp%1000/100];
          DisplayData[6]=DIG_CODE[temp%100/10];
          DisplayData[7]=DIG_CODE[temp%10/1];
          DigDisplay();
        }
}
void DigDisplay(void)
{
        unsigned char i;
        unsigned int j;
        for(i=0;i<8;i++)
        {
                switch(i)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//显示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//显示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//显示第2位
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;//显示第3位
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;//显示第4位
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;//显示第5位
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;//显示第6位
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;//显示第7位       
                }
                GPIO_DIG=DisplayData;//发送段码
                j=50;                                                 //扫描间隔时间设定
                while(j--);       
                GPIO_DIG=0x00;//消隐
        }
}
       



以上是数码管显示光敏电阻阻值 但是我想实现lcd1206显示光敏电阻阻值 程序代码不会啊 我看霖锋视频教材他用lcd1206显示阻值代码特别简单  为甚么这个用数码管显示代码却这么复杂 费劲

因为数码管显示一般是利用位选数码管和眼睛的余辉扫描显示的,共用的数据线,需要进行数码管选通
LCD只要把字符串输进去就可以了,而且需要SPI协议,也不存在谁容易的概念吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top