给你一个51单片机读取模拟信号并转换成数字信号的例程,峰峰值什么的自己再根据需求自己加条件判断吧。
#include<reg51h>#include <intrinsh>
#define uint unsigned int
#define uchar unsigned char
sbit adrd=P3^7; //IO口定义
sbit adwr=P3^6;
sbit diola=P2^5;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char j,k,adval;
void delay(unsigned char i) //延时程序
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void display(uchar bai_c,uchar sh_c,uchar g_c) //显示程序
{
P0=table[bai_c]; //显示百位
dula=1;
dula=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
dula=0;
P0=table[sh_c]; //显示十位
dula=1;
dula=0;
wela=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
P0=table[g_c]; //显示个位
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(5);
}
void main() // 主程序
{
uchar a,A1,A2,A2t,A3;
while(1)
{
wela=1;
P0=0; //选通ADCS
adwr=0; //AD写入(随便写个什么都行,主要是为了启动AD转换)
_nop_();
adwr=1;
P0=0xff; //关闭ADCS
delay(10);
wela=0; //关闭有AD片选信号锁存器的锁存端以防止在 *** 作数码管时使AD的片选发生变化
for(a=20;a>0;a--) //需要注意的是ADC0804在写和读之间的时间间隔要足够长否则无法读出数据
{ //这里把显示部分放这里的原因也是为了增加写读之间的时间间隔
display(A1,A2,A3);
} //送去显示各位。
wela=1; //重新打开有AD片选信号锁存器的锁存端
P1=0xff; //读取P1口之前先给其写全1
P0=0; //选通ADCS
adrd=0; //AD读使能
adval=P1; //AD数据读取赋给P1口
adrd=1;
P0=0xff; //关闭ADCS
adwr=0;
P1=adval; //同时把AD的值送八个发光二极显示
A1=adval/100; //分出百,十,和个位
A2t=adval%100;
A2=A2t/10;
A3=A2t%10;
};
}
第1篇入门篇
11单片机概述
111什么是单片机
112单片机标号信息及封装类型
113单片机能做什么
114如何开始学习单片机
1251单片机外部引脚介绍
13电平特性
14二进制与十六进制
141二进制
142十六进制
15二进制的逻辑运算
151与
152或
153非
154同或
155异或
16单片机的C51基础知识介绍
161利用C语言开发单片机的优点
162C51中的基本数据类型
163C51数据类型扩充定义
164C51中常用的头文件
165C51中的运算符
166C51中的基础语句
167学习单片机应该掌握的主要内容
21Keil工程建立及常用按钮介绍
211Keil工程的建立
212常用按钮介绍
22点亮第一个发光二极管
23while语句
24for语句及简单延时语句
25Keil仿真及延时语句的精确计算
26不带参数函数的写法及调用
27带参数函数的写法及调用
28利用C51库函数实现流水灯
第2篇内外部资源 *** 作篇
31数码管显示原理
32数码管静态显示
33数码管动态显示
34中断概念
35单片机的定时器中断
41独立键盘检测
42矩阵键盘检测
51模拟量与数字量概述
52A/D转换原理及参数指标
53ADC0804工作原理及其实现方法
54D/A转换原理及其参数指标
55DAC0832工作原理及实现方法
56DAC0832输出电流转换成电压的方法
第6章串行口通信原理及 *** 作流程
61并行与串行基本通信方式
62RS-232电平与TTL电平的转换
63波特率与定时器初值的关系
6451单片机串行口结构描述
65串行口方式1编程与实现
66串行口打印在调试程序中的应用
第7章通用型1602,12232,12864液晶 *** 作方法
71液晶概述
72常用1602液晶 *** 作实例
73常用12232液晶 *** 作实例
74常用12864液晶 *** 作实例
第8章I2C总线AT24C02芯片应用
81I2C总线概述
82单片机模拟I2C总线通信
83E2PROMAT24C02与单片机的通信实例
第9章基础运放电路专题
91运放概述及参数介绍
92反相放大器
93同相放大器
94电压跟随器
95加法器
96差分放大器
97微分器
98积分器
第3篇提高篇
第10章定时器/计数器应用提高
101方式0应用
102方式2应用
103方式3应用
10452单片机定时器2介绍
105计数器应用
第11章串行口应用提高
111方式0应用
112方式2和方式3应用
113单片机双机通信
114单片机多机通信
第12章指针
121指针与指针变量
1211内存单元、地址和指针
1212指针变量的定义、赋值与引用
122指针变量的运算
123指针与数组
1231指针与一维数组
1232指针与多维数组
124指针与函数
1241指针作为函数的参数
1242指向函数的指针
1243指针型函数
125指针与字符串
1251字符串的表达形式
1252字符指针作为函数参数
1253 使用字符指针与字符数组的区别
126指针数组与命令行参数
1261 指针数组的定义和使用
1262指向指针的指针
1263 指针数组作为main()函数的命令行参数
127指针小结
1271指针概念综述
1272指针运算小结
1273等价表达式
128C51中指针的使用
1281指针变量的定义
1282指针应用
第13章STC系列51单片机功能介绍
131单片机空闲与掉电模式应用
132“看门狗”概念及其应用
133用软件实现系统复位
134内部扩展RAM的应用
135扩展P4口的应用
136内部E2PROM的应用
137STC89系列单片机内部A/D应用
138STC12系列单片机内部A/D应用
139STC12系列单片机的PCA/PWM介绍
1310STC12系列单片机的SPI接口介绍
1311STC12系列单片机的“576MHz”超速运行
第4篇实战篇
第14章利用51单片机的定时器设计一个时钟
141如何从矩阵键盘中分解出独立按键
142原理图分析
143实例讲解
第15章使用DS12C887时钟芯片设计高精度时钟
151时钟芯片概述
152DS12C887时钟芯片介绍
153如何用TX-1C实验板扩展本实验
154原理图分析
155实例讲解
第16章使用DS18B20温度传感器设计温控系统
161温度传感器概述
162DS18B20温度传感器介绍
163实例讲解
第17章太阳能充/放电控制器
171控制器原理图分析
172控制器板上元件介绍
173实例讲解
第18章VC、VB(MSCOMM控件)与单片机通信实现温度显示
181VCMSCOMM控件与单片机通信实现温度显示
182VBMSCOMM控件与单片机通信实现温度显示
第5篇拓展篇
第19章使用Protell99绘制电路图全过程
191绘制电路板概述
192建立工程
193制作元件库
194添加封装及制作PCB封装库
195错误检查及生成PCB
196布线电气特性设置
197自动布线和手动布线
第20章ISD400x系列语音芯片应用
201ISD400x系列语音芯片介绍
202ISD400x系列语音芯片 *** 作规则
203ISD400x系列语音芯片应用实现
第21章电机专题
211直流电机原理及应用
212步进电机原理及应用
213舵机原理及其应用
第22章常用元器件介绍
221二极管
222电容
223场效应管
224光耦
225蜂鸣器
226继电器
227自恢复保险
228瞬态电压抑制器
229晶闸管(可控硅)
2210电荷泵
第23章直流稳压电源专题
231整流电路
232滤波电路
233稳压电路
234集成稳压模块的使用
235串联开关型稳压电源
第24章运放扩展专题
241简单低通滤波器
242“电流-电压”转换电路
243光电放大器
244精密电流源
245可调参考电压源
246复位稳定放大器
247模拟乘法器
248全波整流器和平均值滤波器
249正弦波振荡器
2410三角波发生器
2411自动跟踪对称电源
2412可调实验电源
2413运放相关术语表
附录A天祥电子开发实验板简介
A1TX-1C51单片机开发板(配套详细视频教程)
A2AVR单片机开发板(配套详细视频教程)
A3PIC单片机开发板(配套详细视频教程)
A4J-Link全功能ARM仿真器
A5三星S3C44B0ARM7入门级开发板
A6三星S3C44B0ARM7提高级开发板
A7TX-51STAR51单片机开发板(配套详细视频教程)
参考文献
1、对于问题解决应该采取最简单有效的方法,说一下我的观点:对于大部分网友采用AD配合DA来实现,个人觉得是多此一举。如果是保留采用AD来采集的话,我们大可以使用定时器控制输出频率可变的方波至外界电阻上(PWM实现DA输出的方法,这里采用定时器模拟PWM输出)实现可变的电压输出。
2、问题很直白,我们这样来看,17-1=07 07/2=035
不知道您有没有使用过AT89C2051这个片子,比较早的一款51片子,看一下他的P10和P11的用法,内部集成模拟比较器(可配合程序实现你需要的)
3、这样的功能也可以直接使用模拟电路来实现,说下思路:做一个17V的基准电压,通过一个减法器也就是基准电压-被测电压。减法器输出接增益为05的放大电路即可实现转换。
4、对于你的信号不知道您需要用来做什么,考虑现实中的细节选取最好的方案。
5、常在线,Hi我。祝您成功
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)