您的位置 首页 基础

51单片机 ADC0804操控

现在大多单片机都带有ADC模块,对于精度要求不是很高的场合,一般都能够满足的。这里例程重在理解控制过程。原理图:代码如下:头文

现在大多单片机都带有ADC模块,关于精度要求不是很高的场合,一般都能够满意的。这儿例程重在了解操控进程。

原理图:

代码如下:

//头文件
#include
#include //_nop_延时一个机械周期函数地点头文件
//界说宏
#define uint unsigned int
#define uchar unsigned char
//端口声明
sbit duanxuan=P2^6;
sbit weixuan=P2^7;
sbit ADC0804_WR=P3^6; //写信号输入,低电平有用
sbit ADC0804_RD=P3^7; //读信号输入,低电平有用
//变量界说
uint number; //寄存模数转化后的数字量
uint baiwei,shiwei,gewei; //寄存模数转化后的数字量的百位、十位、各位

//编码界说
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
//数组声明,其内部元素代表的是位选端口选通讯号数值,如0xfe代表选通第一个数码管,包含选通ADC0804的CS端
uint weixuan_shuzu[]={
0x7e,0x7d,0x7b,
0x77,0x6f,0x5f};
//函数声明
void delay(uint); //延时函数声明
void quwei(uint); //整数取出每一位函数声明
void display(uint); //显现函数声明
void ADC0804_writting(); //ACD0804写入操作函数声明
void ADC0804_reading(); //ACD0804读取操作函数声明
//主函数
void main()
{
uint aa; //用于模数转化前得屡次显现,保证转化完结
weixuan=1;
P0=0x7f; //首要挑选ADC0804的CS端口,选中ACD0804(假如没有这儿的,那么接下来的ADC0804写操作函数不能进行)
weixuan=0;
while(1)
{
ADC0804_writting(); //发动AD转化
for(aa=10;aa>0;aa–) //10次显现转化成果
{
display(number); //显现转化成果
}
ADC0804_reading(); //读取AD转化成果
}
}
//延时函数主体
void delay(uint xs)
{
uint i,j;
for(i=xs;i>0;i–)
{
for(j=110;j>0;j–)
{
}
}
}
//整数取出每一位函数主体
void quwei(uint digital_data0)
{
baiwei=digital_data0/100; //取出百位
shiwei=digital_data00/10;
gewei=digital_data0;
}
//显现函数主体
void display(uint digital_data)
{
quwei(digital_data); //首要取出成果的每一位
//显现第一位
duanxuan=1;
P0=table[baiwei];
duanxuan=0;
P0=0xff;
weixuan=1;
P0=weixuan_shuzu[0];
weixuan=0;
delay(2);
//显现第二位
duanxuan=1;
P0=table[shiwei];
duanxuan=0;
P0=0xff;
weixuan=1;
P0=weixuan_shuzu[1];
weixuan=0;
delay(2);
//显现第三位
duanxuan=1;
P0=table[gewei];
duanxuan=0;
P0=0xff;
weixuan=1;
P0=weixuan_shuzu[2];
weixuan=0;
delay(2);
}
//ACD0804写入操作函数主体
void ADC0804_writting()
{
ADC0804_WR=1; //首要拉高写使能端
_nop_(); //延时一个机械周期
ADC0804_WR=0; //写使能端低电平有用,开端转化
_nop_();
ADC0804_WR=1; //转化完毕
}
//ACD0804读取操作函数主体
void ADC0804_reading()
{
P1=0xff; //读取成果之前,先拉高P1口一次
ADC0804_RD=1; //读取之前先拉高读取使能端
_nop_(); //延时一个机械周期
ADC0804_RD=0; //读取使能端低电平有用,开端读取
_nop_();
number=P1; //读取的成果寄存到number中,留意:number不需要转化为十进制,直接当成十进制用就OK
ADC0804_RD=1; //读取完毕
}

以上,完毕。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/259182.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部