ADC模拟信号转换为数字信号,该实验使用的芯片信号为STC89C52,A/D芯片为XPT2046。

点击了解XPT2046

单片机晶振为11.0592

实验源代码:

  • XPT2046.h
#include <reg52.h>
#include <intrins.h>#define uint unsigned int
#define uchar unsigned charsbit DIN = P3^4;
sbit ADCS = P3^5;
sbit DCLK = P3^6;
sbit DOUT = P3^7;sbit led2 = P2^2;
sbit led3 = P2^3;
sbit led4 = P2^4;
  • XPT2046.c
 #include "XPT2046.h"void WRITE_AD(uchar dat)   //写入数据函数
{uchar i;DCLK = 0;              for(i=0;i<8;i++){DIN = dat >> 7;       //将dat右移7位赋值给DIN,值得注意的是dat本身并没有变化dat <<= 1;           //将dat左移1位赋值给dat,此时dat本身发生了变化DCLK = 0;DCLK = 1;}
}uint READ_AD()             //读取写入的数据
{uchar i;uint dat=0;DCLK = 0;for(i=0;i<12;i++){dat <<= 1;            //读取时要先位移DCLK = 1;DCLK = 0;dat |= DOUT;      //将DOUT口的数据取反再赋值给dat}return dat;
}uint LOAD_AD(uchar cmd)        //载入数据函数
{uint AD_value;uchar i;ADCS = 0;               //拉低片选DCLK = 0;WRITE_AD(cmd);          //先写入数据for(i=6;i>0;i--);        //给写入的数据一点转换的时间DCLK = 1;_nop_();               //_nop_()延时一个机器周期_nop_();DCLK = 0;_nop_();_nop_();AD_value = READ_AD();   //读取写入后的数据ADCS = 1;                //调高片选return AD_value;
}
  • Main.c
#include "reg52.h"
#include "XPT2046.h"uint LOAD_AD(uchar cmd);  //声明函数存在number[4];                  //数组用于P0的段选
uchar code duanxuan[] = {0x3f,0x06,0x5b,0x4f,    //0,1,2,30x66,0x6d,0x7d,0x07,   //4,5,6,70x7f,0x6f,0x77,0x7c,   //8,9,A,B0x39,0x5e,0x79,0x71};      //C,D,E,F     段选void delay_xms(uchar i)       //延时函数
{uchar m;for(;i>0;i--)for(m=110;m>0;m--);
}void data_AD()    //获得电位器的数据
{static uchar n=0; //声明静态无符号字符型n,注意这里一点要是静态变量uint temp;            if(n == 50)           //n用于调控使用LOAD_AD获取数据的频率{temp = LOAD_AD(0x94);n=0;}n++;number[0] = duanxuan[temp/1000];    //给数组内的数组分别赋值,千number[1] = duanxuan[temp%1000/100];   //百number[2] = duanxuan[temp%100/10];    //十number[3] = duanxuan[temp%10];          //个
}void dispaly()    //数码管显示函数
{int i;for(i=0;i<4;i++)  //4代表只有前四位数码管显示{switch(i){case(0):led2=1,led3=1,led4=1;break;case(1):led2=0,led3=1,led4=1;break;case(2):led2=1,led3=0,led4=1;break;case(3):led2=0,led3=0,led4=1;break;case(4):led2=1,led3=1,led4=0;break;          case(5):led2=0,led3=1,led4=0;break;case(6):led2=1,led3=0,led4=0;break;case(7):led2=0,led3=0,led4=0;break;}P0 = number[i];      //P0的段选来调控每一位显示的内容delay_xms(10);    //延时10msP0 = 0x0;          //消影}
}void main()
{while(1){data_AD();         //获取数据dispaly();        //将数据显示}
}

静态变量

1、 未被初始化的静态变量自动初始化为0
2、静态存储区的数据不会因为函数退出而释放空间在定义静态变量之后只初始化一次,以后的再次调用不会再重新初始化,而是用上次运行后的结果。
3、因为静态变量的值存储在静态存储区,而函数的参数存储在堆中,所以静态变量不能作为形参进行传递。
4、静态局部变量作用域需要注意,静态局部变量与静态全局变量不同,静态局部变量只在作用域内起作用。

这个实验的源代码中Main.c中的static uchar n 就必须使用static静态局部变量,如果没有static,每次主函数调用data_AD()函数n就会被重新初始化为0,从而影响 if 的判定而且还不会报错,而静态局部变量则不会,这样就可以做为 if 的条件来调节LOAD_AD()函数的使用频率。(对应静态变量第二条)

单片机实验11:ADC实现电位器相关推荐

  1. AVR单片机模数转换的ADC实验 ATmega16

    6.2 模数转换的ADC实验 6.2.1.实例功能 AVR的模数转换器ADC具有下列特点: 10位精度: 0.5LSB积分非线形误差 ±2LSB的绝对精度: 13µs~260µs的转换时间: 在最大精 ...

  2. 普中科技51单片机的ADC采样电位器功能实现以及特点

    ADC模数转换的目的: **单片机能够接受和处理的数据都是离散的数字量,而不是连续的模拟量,**就和机器语言不能和普通语言一样通用,要先转换成单片机能够接受的数据,才能进行对模拟量数据(比如,温度,受 ...

  3. STM32单片机学习(11) DS18B20温度传感器实验

    STM32单片机学习(11) DS18B20温度传感器实验 本程序主要实现 DS18B20温度传感器数据获取,并利用串口通信把温度数据传至计算机 注:使用普中科技开发板测试时,需要拔掉Boot1插口, ...

  4. PLC单片机实验开发系统装置QY-DPJ12

    一.装置简介 QY-DPJ12PLC单片机实验开发系统综合装置可完成51/96/8088/8086等CPU的单片机.微机的全部软.硬件实验.在单片机仿真实验系统的基础上,增加8088十六位微机原理和接 ...

  5. MCS-51单片机实验开发系统实验箱,QY-JXSY33

    MCS-51单片机的编程语言可以是汇编语言也可以是高级语言(如C语言),高级语言编程快捷,但程序长,占用存储空间大,执行慢:汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功 ...

  6. STC32G单片机内置ADC及应用编程

    一  STC32G单片机内置ADC模块简介 STC32G单片机内部集成了一个12位高速ADC转换器,ADC的最高时钟频率为系统频率的1/2.其输入通道多达15个(第15通道为专门测量内部1.19V参考 ...

  7. 单片机c语言实验,单片机实验C语言编程.doc

    单片机实验C语言编程.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所 ...

  8. 单片机模数转换实验c语言程序,单片机实验AD转换实验

    <单片机实验AD转换实验>由会员分享,可在线阅读,更多相关<单片机实验AD转换实验(5页珍藏版)>请在人人文库网上搜索. 1.实验报告课程名称: 单片机原理及应用 实验项目: ...

  9. PWM控制直流电机(单片机实验)

    PWM控制直流电机(单片机实验) 有问题欢迎私信哦 一.题目 设计电路,使用定时器实现PWM对直流电机的转速控制,并且实现按键切换转动方向.并进行软件仿真,做出实物. 二.基本要求 1.设置按键控制直 ...

最新文章

  1. java翻转单词顺序split_剑指offer解题报告(Java版)——翻转单词顺序 左旋字符串 42...
  2. 一小时Docker教程
  3. 【CyberSecurityLearning 6】IIS之WEB服务器和FTP服务器
  4. 洛谷P2822组合数问题
  5. # javascript 总结
  6. Centos7 安装Rabbitmq-server和Erlang 仓库汇总
  7. Python面向对象编程三大特性之多态
  8. Angular2 依赖注入
  9. MySql大数据量恢复
  10. 自学python买什么教材-Python 有哪些入门学习方法和值得推荐的经典教材?
  11. 关于使用JAVA正则表达式报java.lang.StackOverflowError错误问题
  12. 《java程序员全攻略:从小工到专家》连载一:外行人眼中的IT人
  13. Windows 8 Consumer Preview
  14. 模块无法导入_你真的会用Python模块与工具包吗?
  15. 20191118每日一句
  16. c语言课程设计交通处罚单系统,交通处罚单管理系统课程设计.doc
  17. 零基础学习Java编程培训需要了解哪些知识
  18. 人工智能+大数据+云计算
  19. 01_搭建百度apollo环境实操可用
  20. 网上讲的比较清晰的VOT跟踪评价指标EAO

热门文章

  1. Uber 四年时间增长近 40 倍,背后架构揭秘
  2. 哈利·波特考试(c/c++)
  3. 利用Matplotlib绘制第一张图
  4. 服务器系统linux下载软件,Linux服务器管理系统一键安装包(wdcp Lanmp)
  5. 华语乐坛到底姓什么?------酷狗篇
  6. 使用Powerdesigner绘制数据流图
  7. 网络设备和常见网络拓扑
  8. 冒险岛发假信息给服务器,大家不要群假冒险岛
  9. 快速掌握linux常用命令
  10. android手机可以换字体吗,安卓手机字体怎么改?安卓手机爱字体换字体教程