#include"stc12c5a60s2.h"
#include"stdio.h"
#include"intrins.h"
//------------------------------------------------------------------------------
void AD_init();
void serial_init();
void delay(unsigned int a);
float AD_work(unsigned char channel);
unsigned int AD_get(unsigned char channel);
//------------------------------------------------------------------------------
void main()
{
AD_init(); //A/D转换初始化
serial_init(); //串口初始化
while(1)
{
unsigned char i;
for(i=0;i<8;i++) //循环发送P1.0-P1.7的转换数值
{
TI=1; //使用printf函数前须先将发送标志位TI置1
printf("The P1.%bd voltage is %f\n",i,AD_work(i));
TI=0;
delay(1000); //延时约1s
}
}
}
//------------------------------------------------------------------------------
unsigned int AD_get(unsigned char channel)
{
ADC_CONTR=0x88|channel; //开启AD转换1000 1000 即POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0
_nop_(); _nop_(); _nop_(); _nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR 寄存器
while(!(ADC_CONTR&0x10)); //等待转换完成
ADC_CONTR&=0xe7; //关闭AD转换,ADC_FLAG位由软件清0
return(ADC_RES*4+ADC_RESL); //返回AD转换完成的10位数据(16进制)
}
//------------------------------------------------------------------------------
float AD_work(unsigned char channel)
{
float AD_val; //定义处理后的数值AD_val为浮点数
unsigned char i;
for(i=0;i<100;i++)
AD_val+=AD_get(channel); //转换100次求平均值(提高精度)
AD_val/=100;
AD_val=(AD_val*5)/1024; //AD的参考电压是单片机上的5v,所以乘5即为实际电压值
return AD_val;
}
//------------------------------------------------------------------------------
void delay(unsigned int a) //延时约1ms
{
unsigned int i;
while (--a!=0)
for(i=600;i>0;i--); //1T单片机i=600,若是12T单片机i=125
}
//------------------------------------------------------------------------------
void serial_init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd; //设置9600波特率
SCON=0x50; //串口方式1,允许接收
TR1=1;
}
//------------------------------------------------------------------------------
void AD_init()
{
P1ASF=0xff; //P1口全部作为模拟功能AD使用
ADC_RES=0; //清零转换结果寄存器高8位
ADC_RESL=0; //清零转换结果寄存器低2位
ADC_CONTR=0x80;//开启AD电源
delay(2); //等待1ms,让AD电源稳定
}
没有合适的资源?快使用搜索试试~ 我知道了~
DAC0832正弦波发生器C51兼频率计(三点频、幅度可调)
共59个文件
log:12个
zip:10个
h:6个
5星 · 超过95%的资源 需积分: 10 39 下载量 125 浏览量
2011-11-13
12:11:47
上传
评论 5
收藏 289KB RAR 举报
温馨提示
C51单片机配合DAC0832产生三点频正弦波,幅度可调,第二功能作为0~160kHz频率计,同时可测半峰值。附加配套硬件电路
资源推荐
资源详情
资源评论
收起资源包目录
DAC-sin.rar (59个子文件)
DAC-sin
测试 课程设计II
STC_AD.OBJ 5KB
STC_AD.Opt 1KB
DAC0832.hex 12KB
STC_AD.Uv2 2KB
STC_AD.plg 163B
dac0832.h 13KB
DAC0832_Uv2.Bak 2KB
STC12C5A60S2.H 17KB
DAC0832.LST 6KB
STC_AD_Uv2.Bak 0B
DAC0832.M51 30KB
STARTUP.LST 11KB
buttom4x4.h 2KB
LCD_1602.h 2KB
DAC0832.Uv2 2KB
DAC0832.lnp 47B
DAC0832_Opt.Bak 2KB
DAC0832.c 2KB
STC_AD.M51 3KB
DAC0832.plg 6KB
STC_AD_Opt.Bak 1KB
STARTUP.A51 5KB
DAC0832.OBJ 25KB
ADC.H 1KB
STC_AD.lnp 45B
DAC0832 23KB
DAC0832.Opt 2KB
STC_AD.c 2KB
STARTUP.OBJ 749B
frequency.h 645B
STC_AD.LST 4KB
课程设计II集成版
History
DA-SIN.~(4).PcbDoc.Zip 19KB
DA-SIN.~(3).PcbDoc.Zip 17KB
DA-SIN.~(1).PcbDoc.Zip 10KB
DA-SIN.~(1).SchDoc.Zip 1KB
DA-SIN.~(5).PcbDoc.Zip 39KB
DESIGNEDBY-YP.~(1).PRJPCB.Zip 3KB
DA-SIN.~(2).PcbDoc.Zip 17KB
DA-SIN.~(6).PcbDoc.Zip 38KB
DA-SIN.~(2).SchDoc.Zip 15KB
DA-SIN.~(3).SchDoc.Zip 16KB
DA-SIN SCH ECO 2011-11-4 13-36-04.LOG 330B
LM311.SchLib 5KB
DA-SIN.SchDoc 148KB
DA-SIN PCB ECO 2011-11-4 13-35-20.LOG 243B
DA-SIN PCB ECO 2011-11-4 13-28-23.LOG 286B
DA-SIN PCB ECO 2011-11-4 13-45-42.LOG 84B
DA-SIN PCB ECO 2011-11-4 13-37-15.LOG 82B
DA-SIN SCH ECO 2011-11-4 13-35-39.LOG 132B
DA-SIN PCB ECO 2011-11-4 13-32-42.LOG 83B
DAC.SchLib 8KB
DA-SIN.PcbDoc 236KB
DA-SIN PCB ECO 2011-11-4 13-38-16.LOG 84B
DA-SIN PCB ECO 2011-11-4 13-36-23.LOG 606B
designedby-yp.PrjPcbStructure 48B
DA-SIN PCB ECO 2011-11-4 13-25-52.LOG 4KB
DA-SIN PCB ECO 2011-11-4 13-59-59.LOG 360B
DESIGNEDBY-YP.PRJPCB 28KB
DA-SIN PCB ECO 2011-11-4 13-38-57.LOG 172B
共 59 条
- 1
资源评论
- zbydown22012-03-17这个非常不错 内含Proteus模拟电路 就是频率不准 还要再调
- sandsmoke2012-10-30非常典型的程序和电路,只是如何成功运行还是没有看懂,注释对我来说有点少。
- hx54092013-08-19这个非常不错 内含Proteus模拟电路
余清风
- 粉丝: 9
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功