当前位置: 首页 > news >正文

51单片机学习:ADC模数转换实验--光敏电阻AD采集

实验名称:ADC模数转换实验--光敏电阻AD采集
接线说明:    
实验现象:下载程序后,数码管上显示AD模块采集光敏电阻的AD值
注意事项:                                                                                  
***************************************************************************************/
#include "public.h"
#include "smg.h"
#include "xpt2046.h"


/*******************************************************************************
* 函 数 名       : main
* 函数功能         : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{    
    u16 adc_value=0;
    u8 adc_buf[4];

    while(1)
    {                
        adc_value=xpt2046_read_adc_value(0xA4);//测量光敏电阻
        adc_buf[0]=gsmg_code[adc_value/1000];
        adc_buf[1]=gsmg_code[adc_value%1000/100];
        adc_buf[2]=gsmg_code[adc_value%1000%100/10];
        adc_buf[3]=gsmg_code[adc_value%1000%100%10];
        smg_display(adc_buf,5);        
    }        
}

#include "smg.h"

//共阴极数码管显示0~F的段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/*******************************************************************************
* 函 数 名       : smg_display
* 函数功能         : 动态数码管显示
* 输    入       : dat:要显示的数据
                   pos:从左开始第几个位置开始显示,范围1-8
* 输    出         : 无
*******************************************************************************/
void smg_display(u8 dat[],u8 pos)
{
    u8 i=0;
    u8 pos_temp=pos-1;

    for(i=pos_temp;i<8;i++)
    {
           switch(i)//位选
        {
            case 0: LSC=1;LSB=1;LSA=1;break;
            case 1: LSC=1;LSB=1;LSA=0;break;
            case 2: LSC=1;LSB=0;LSA=1;break;
            case 3: LSC=1;LSB=0;LSA=0;break;
            case 4: LSC=0;LSB=1;LSA=1;break;
            case 5: LSC=0;LSB=1;LSA=0;break;
            case 6: LSC=0;LSB=0;LSA=1;break;
            case 7: LSC=0;LSB=0;LSA=0;break;
        }
        SMG_A_DP_PORT=dat[i-pos_temp];//传送段选数据
        delay_10us(100);//延时一段时间,等待显示稳定
        SMG_A_DP_PORT=0x00;//消音
    }
}
 

#include "xpt2046.h"
#include "intrins.h"

/*******************************************************************************
* 函 数 名       : xpt2046_wirte_data
* 函数功能         : XPT2046写数据
* 输    入       : dat:写入的数据
* 输    出         : 无
*******************************************************************************/
void xpt2046_wirte_data(u8 dat)
{
    u8 i;

    CLK = 0;
    _nop_();
    for(i=0;i<8;i++)//循环8次,每次传输一位,共一个字节
    {
        DIN = dat >> 7;//先传高位再传低位
        dat <<= 1;//将低位移到高位
        CLK = 0;//CLK由低到高产生一个上升沿,从而写入数据
        _nop_();    
        CLK = 1;
        _nop_();
    }
}

/*******************************************************************************
* 函 数 名       : xpt2046_read_data
* 函数功能         : XPT2046读数据
* 输    入       : 无
* 输    出         : XPT2046返回12位数据
*******************************************************************************/
u16    xpt2046_read_data(void)
{
    u8 i;
    u16 dat=0;

    CLK = 0;
    _nop_();
    for(i=0;i<12;i++)//循环12次,每次读取一位,大于一个字节数,所以返回值类型是u16
    {
        dat <<= 1;
        CLK = 1;
        _nop_();
        CLK = 0; //CLK由高到低产生一个下降沿,从而读取数据
        _nop_();
        dat |= DOUT;//先读取高位,再读取低位。    
    }
    return dat;    
}

/*******************************************************************************
* 函 数 名       : xpt2046_read_adc_value
* 函数功能         : XPT2046读AD数据
* 输    入       : cmd:指令
* 输    出         : XPT2046返回AD值
*******************************************************************************/
u16 xpt2046_read_adc_value(u8 cmd)
{
    u8 i;
    u16 adc_value=0;

    CLK = 0;//先拉低时钟
    CS  = 0;//使能XPT2046
    xpt2046_wirte_data(cmd);//发送命令字
    for(i=6; i>0; i--);//延时等待转换结果
    CLK = 1;
    _nop_();
    CLK = 0;//发送一个时钟,清除BUSY
    _nop_();
    adc_value=xpt2046_read_data();
    CS = 1;//关闭XPT2046
    return adc_value;
}
 

#include "public.h"

/*******************************************************************************
* 函 数 名       : delay_10us
* 函数功能         : 延时函数,ten_us=1时,大约延时10us
* 输    入       : ten_us
* 输    出         : 无
*******************************************************************************/
void delay_10us(u16 ten_us)
{
    while(ten_us--);    
}

/*******************************************************************************
* 函 数 名       : delay_ms
* 函数功能         : ms延时函数,ms=1时,大约延时1ms
* 输    入       : ms:ms延时时间
* 输    出         : 无
*******************************************************************************/
void delay_ms(u16 ms)
{
    u16 i,j;
    for(i=ms;i>0;i--)
        for(j=110;j>0;j--);
}

相关文章:

  • postgresql源码学习(十五)—— 行锁③-死锁检测
  • 【linux】shell 编程之流程控制语句详解
  • [PAT练级笔记] 34 Basic Level 1034 有理数四则运算
  • 【探花交友】保存用户信息、上传用户头像、用户信息管理
  • ElasticSearch Client问题整理2
  • Python必知必会 os 模块详解
  • Promise系列学习
  • 线程同步的几种方式(2)
  • 第七章:面向对象编程(中级部分)
  • Redis知识-实战篇(1)
  • Pytorch搭建基本的GAN模型及训练过程
  • 3.7Docker consul的容器服务更新与发现
  • <位图(bitset)和布隆过滤器(BloomFilter)>——《C++高阶》
  • RxJava(四)-过滤操作符
  • 高级数据结构——图
  • 【Amaple教程】5. 插件
  • dva中组件的懒加载
  • ES6系列(二)变量的解构赋值
  • Laravel Mix运行时关于es2015报错解决方案
  • linux学习笔记
  • Mithril.js 入门介绍
  • Objective-C 中关联引用的概念
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • XForms - 更强大的Form
  • 机器学习学习笔记一
  • 巧用 TypeScript (一)
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 实战|智能家居行业移动应用性能分析
  • 跳前端坑前,先看看这个!!
  • 智能合约Solidity教程-事件和日志(一)
  • FaaS 的简单实践
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 交换综合实验一
  • 说说我为什么看好Spring Cloud Alibaba
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (二)linux使用docker容器运行mysql
  • (二十三)Flask之高频面试点
  • (十)T检验-第一部分
  • (十六)视图变换 正交投影 透视投影
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)Google的Objective-C编码规范
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ***通过什么方式***网吧
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿