单片机c52 用c语言编写的 要实现ad转换程序
作者&投稿:采祝 (若有异议请与网页底部的电邮联系)
芯片采样回来后,是一个AD值。需要转换成想要的一些内容的话,要做表格。
如温度转换。首先要制作一个温度对应的AD表格。多大的值是多少度。
查表可以采用顺序法进行。
从表格的第一个开始查起,比第一个大时,再比较第二个,依次类推。每比较一次,将计数器累加一次。
比上一个大,比下一个小时,就是上一个温度点,此时,把计数器的值拿出来就是对应的温度值。
图要看芯片资料连接了,应该很简单的。
1、传感器解决了?传感器输出电压调理到0~5V做好了?
2、A/D转换用什么芯片?要求多少分辨率?(由土壤最小湿度~最大湿度决定)
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CS=P3^0;
sbit CLK=P3^1; //时钟
sbit DIO=P3^2; //ADC0832输出引脚
sbit din=P0^7;
uchar code tab1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E}; //共阳数码表
uchar code tab[4]={0xfe,0xfd,0xfb,0xf7}; //数码管位选表
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
for(j=0;j<121;j++);
}
uint A_D() // A/D转换函数
{
unsigned char i,dat;
CS=0; //片选
CLK=0; //为第1个脉冲作准备
CLK=1; //第1个脉冲
DIO=1; // DI置1,规定的起始信号
_nop_();_nop_();
CLK=0; //第1个脉冲的下降沿
CLK=1; //第2个脉冲
DIO=1; // DI置1, 通道选择信号:1
_nop_();_nop_();
CLK=0; //第2个脉冲下降沿
CLK=0; //第3个脉冲
DIO=1; // DI置0,通道选择信号:0, 选通道0
_nop_();_nop_();
// CLK=0; //第3个脉冲下降沿,转换开始
// _nop_();_nop_();//第3个脉冲后,
// CLK=1;
for(i=0;i<8;i++) //高位在前
{
CLK=1; //第4个脉冲
if(DIO)
dat=(dat<<1)|0x80;//从高位至低位读取 "|"的优先级高于">>"
else
dat=(dat<<1)|0x00;
CLK=0;
}
for(i=0;i<8;i++) //高位在前
{
CLK=1; //第4个脉冲
if(DIO)
dat=(dat>>1)|0x80;//从高位至低位读取 "|"的优先级高于">>"
else
dat=(dat>>1)|0x00;
CLK=0;
}
CS=1;
CLK=1;
return dat;
}
void display(uint k)
{
P2=tab[1];
P0=tab1[k/100];
din=0;
delay(3);
P2=0xff;
P2=tab[2];
P0=tab1[k/10%10];
delay(3);
P2=0xff;
P2=tab[3];
P0=tab1[k%10];
delay(3);
P2=0xff;
}
void main(void) //主函数
{
uint temp;
while(1)
{
temp=A_D()*5.0/256*100; // 根据转换结果求出电压值
display(temp);
}
}
ADC0832程序 板子做出来 能用
楼主只要程序?
程序、电路,是配套的。
ad转换,用的什么器件、电路?
楼主先要提供出来电路,才能编写程序。
到我的百度空间看看吧,程序、电路都有。
at89s52这芯片没有AD啊,看你用的什么AD芯片了,芯片不同程序电路都不同
箕倪硫酸: #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit CS=P3^0;sbit CLK=P3^1; //时钟 sbit DIO=P3^2; //ADC0832输出引脚 sbit din=P0^7;uchar code tab1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,...
万年县14781819787: 用C语言编写程序使89C52单片机实现数字时钟功能,急求! - ?
箕倪硫酸: /*---------------------------------------------------------------*/ /* 文件名称:SZ01.c */ /* 程序功能:带定时闹铃时钟 */ /*---------------------------------------------------------------*/ #include <AT89X51.H> /*包含器件配置文件*/ #define uchar unsigned char #define uint ...
万年县14781819787: 【单片机】请用C语言写一个超级简单的单片机程序.万分感谢!! - ?
箕倪硫酸: 高级语言,使用的都是变量.一般来说,都不指定某个变量的 RAM 的具体地址号码.所以,C,不适宜针对 RAM 的具体地址单元进行操作.
万年县14781819787: 用c语言对单片机编程,对c语言的程度要求是怎样的? - ?
箕倪硫酸: 用c语言对单片机编程,对c语言的程度要求不高. 用c语言对单片机编程,对c语言的程度要求非常低,只要会用几个语句就可以了. 熟记“if ,while ,for ,switch”这四个命令语句和 “int char”变量类型,外加判断运算关系符和数组就可以了. ...
万年县14781819787: c52单片机c语言编程新手,下面是我编写的程序,为什么不会一直循环? - ?
箕倪硫酸: 猜想:你可能想通过P1口看程序运行的现象,但是失败了.分析:程序是一直在循环,但是由于程序问题,输出看不到变化.原理:P1口读入、修改、重写是有风险的,因为读入的值不是寄存器的值,而是端口的值. 而这个值是不定的. 解决:尽可能不要采取端口读入、修改、重写,而采用端口缓冲方法.即准备变量p1val, 读入、修改p1val,再往端口写入p1val 示例:void main () { unsigned char i, p1val; while(1) { p1val=0xfe; for (i=0; i { delay (50000); P1=p1val; p1valp1val |= 1; } } }
万年县14781819787: 用89C52单片机与PC串口通信,谁能帮忙写代码?要用C语言编写的 - ?
箕倪硫酸: 单片机定时发送字串给PC机#include < reg52.h >#include < intrins.h >#include < stdio.h >#define uchar unsigned char#define uint unsigned int/*********************************************************** ** 延时函数 ** *******************************************...
万年县14781819787: 求个单片机程序,我用的是stc的52,要求用c语言来完成,要求有注释哦~?
箕倪硫酸: #include<reg.52.h>//stc52 头文件 #define uchar unsigned char//宏定义 uchar temp;//读端口用的临时单元 void main() { wihle(1) { temp=P0;//读P0口 if(temp&=0x02);//读P0.2位是否为高 { P1=0xC4;//1100 0100 将P1的p1.2,p1.6,p1.7...
万年县14781819787: 用C语言编写单片机程序 - ?
箕倪硫酸: #include sbit csb_SAT= P1^0; //定义超声波发生脚 void delay(void) //延时25微秒,12T芯片用12M误差 0us { unsigned char a; for(a=11;a>0;a--); } void csb_fs(int dat) {while(dat--){csb_SAT=1;delay();csb_SAT=0;delay();}} //发射 void main() { ...
万年县14781819787: C语言在单片机中的应用 - ?
箕倪硫酸: 单片机就像是一个躯体,而程序就是它的灵魂.C语言就是制造(编写)它的灵魂的工具.单片机中的C语言与标准C语言有一些不同,有很多对位的定义和操作.在单片机应用中最常用的编译软件是KEIL C51,功能强大.C语言是一种高级语言,在单片机应用中其优点也是非常突出:编程灵活、可读性、可移植性都很强.当然,若能在学C之前懂一些汇编语言,就更好啦.既能熟悉位操作,又能发挥C语言的优势.
万年县14781819787: 现代单片机用C语言怎样编程 - ?
箕倪硫酸: 如果是用汇编语言编写程序,使用那些RAM单元,是由编程者自己安排的;那么占用的RAM空间,编程者就可以很容易的计算出来.如果是用C语言编写程序,使用那些RAM单元,编程者就不知道了;不同的编译软件、不同的编译条件,很复杂.必须由编译软件给出报告才能知道.