单片机实验11:ADC实现电位器
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实现电位器相关推荐
- AVR单片机模数转换的ADC实验 ATmega16
6.2 模数转换的ADC实验 6.2.1.实例功能 AVR的模数转换器ADC具有下列特点: 10位精度: 0.5LSB积分非线形误差 ±2LSB的绝对精度: 13µs~260µs的转换时间: 在最大精 ...
- 普中科技51单片机的ADC采样电位器功能实现以及特点
ADC模数转换的目的: **单片机能够接受和处理的数据都是离散的数字量,而不是连续的模拟量,**就和机器语言不能和普通语言一样通用,要先转换成单片机能够接受的数据,才能进行对模拟量数据(比如,温度,受 ...
- STM32单片机学习(11) DS18B20温度传感器实验
STM32单片机学习(11) DS18B20温度传感器实验 本程序主要实现 DS18B20温度传感器数据获取,并利用串口通信把温度数据传至计算机 注:使用普中科技开发板测试时,需要拔掉Boot1插口, ...
- PLC单片机实验开发系统装置QY-DPJ12
一.装置简介 QY-DPJ12PLC单片机实验开发系统综合装置可完成51/96/8088/8086等CPU的单片机.微机的全部软.硬件实验.在单片机仿真实验系统的基础上,增加8088十六位微机原理和接 ...
- MCS-51单片机实验开发系统实验箱,QY-JXSY33
MCS-51单片机的编程语言可以是汇编语言也可以是高级语言(如C语言),高级语言编程快捷,但程序长,占用存储空间大,执行慢:汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功 ...
- STC32G单片机内置ADC及应用编程
一 STC32G单片机内置ADC模块简介 STC32G单片机内部集成了一个12位高速ADC转换器,ADC的最高时钟频率为系统频率的1/2.其输入通道多达15个(第15通道为专门测量内部1.19V参考 ...
- 单片机c语言实验,单片机实验C语言编程.doc
单片机实验C语言编程.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所 ...
- 单片机模数转换实验c语言程序,单片机实验AD转换实验
<单片机实验AD转换实验>由会员分享,可在线阅读,更多相关<单片机实验AD转换实验(5页珍藏版)>请在人人文库网上搜索. 1.实验报告课程名称: 单片机原理及应用 实验项目: ...
- PWM控制直流电机(单片机实验)
PWM控制直流电机(单片机实验) 有问题欢迎私信哦 一.题目 设计电路,使用定时器实现PWM对直流电机的转速控制,并且实现按键切换转动方向.并进行软件仿真,做出实物. 二.基本要求 1.设置按键控制直 ...
最新文章
- java翻转单词顺序split_剑指offer解题报告(Java版)——翻转单词顺序 左旋字符串 42...
- 一小时Docker教程
- 【CyberSecurityLearning 6】IIS之WEB服务器和FTP服务器
- 洛谷P2822组合数问题
- # javascript 总结
- Centos7 安装Rabbitmq-server和Erlang 仓库汇总
- Python面向对象编程三大特性之多态
- Angular2 依赖注入
- MySql大数据量恢复
- 自学python买什么教材-Python 有哪些入门学习方法和值得推荐的经典教材?
- 关于使用JAVA正则表达式报java.lang.StackOverflowError错误问题
- 《java程序员全攻略:从小工到专家》连载一:外行人眼中的IT人
- Windows 8 Consumer Preview
- 模块无法导入_你真的会用Python模块与工具包吗?
- 20191118每日一句
- c语言课程设计交通处罚单系统,交通处罚单管理系统课程设计.doc
- 零基础学习Java编程培训需要了解哪些知识
- 人工智能+大数据+云计算
- 01_搭建百度apollo环境实操可用
- 网上讲的比较清晰的VOT跟踪评价指标EAO