单片机多通道AD采集源程序(8路) STC15w系列

发布者:asa1670最新更新时间:2020-09-23 来源: 51hei关键字:单片机  多通道  AD采集  STC15w系列 手机看文章 扫描二维码
随时随地手机看文章

12864为串行接法。AD0~AD4接的5V电源。
AD5~AD7接的GND。

STC15W408AS 自带8路10位AD  
程序只使用了高八位。量程为255.
程序里面含10位AD采集。1024。
代码已注释。
新手上路。有错误还请斧正。

制作出来的实物图如下:
 

单片机源程序如下:

#include

#include"intrins.h"

#define uchar unsigned char;

#define uint unsigned int;


uchar a1,b1; //接收高八位,低八位

uint ad1;    //用于接收10位AD数据


#define  ADC_POWER 0X80; // 上电状态

#define  ADC_FLAG  0x10; // FLAG=1,结束转换。ADC_FLAG:A/D转换结束标志位

#define  ADC_START 0X08; // START=1,开始转换。

#define  ADC_SPEEDLL 0X00; //540个时钟

#define  ADC_SPEEDL  0X20; //360个时钟

#define  ADC_SPEEDH  0X40; //180个时钟

#define  ADC_SPEEDHH  0X60;//90个时钟

/*12864显示*/

unsigned char tab[]= {"AD1:    AD2:    "};

unsigned char tab1[]={"AD3:    AD4:    "};

unsigned char tab2[]={"AD5:    AD6:    "};

unsigned char tab3[]={"AD7:    AD8:    "};

uchar num[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0~9

sbit rw=P2^6;                //12864 input

sbit e=P2^7;                 //12864 clock

uint ADC_data;               //高八位数据

void chushihua();            //12864初始化

void zhiling(unsigned char zhiling);

void shuru(unsigned char n);

void shuju(unsigned char shuju);

void guding();

void ADC_init();

uchar ADC_P(unsigned char ch);

void delay(unsigned char x)

{

        while(x--);

}

void main()

{

        TMOD=0X11;

        TH0=0X3C;

        TL0=0XB0;

        EA=1;

        ET0=1;

        TR0=1;

        chushihua();//12864初始化程序

        ADC_init(); //ADC初始化程序

       

        while(1)

        {


                ADC_data=ADC_P(0);//ad通道1

          delay(5);

                tab[4]=num[ADC_data/1000];

                delay(5);

                tab[5]=num[ADC_data%1000/100];

                delay(5);

                tab[6]=num[ADC_data%100/10];

                delay(5);

                tab[7]=num[ADC_data%10];

               

                ADC_data=ADC_P(1);//ad通道2

          delay(5);

                tab[12]=num[ADC_data/1000];

                delay(5);

                tab[13]=num[ADC_data%1000/100];

                delay(5);

                tab[14]=num[ADC_data%100/10];

                delay(5);

                tab[15]=num[ADC_data%10];

       

                ADC_data=ADC_P(2);//ad通道3

          delay(5);

                tab1[4]=num[ADC_data/1000];

                delay(5);

                tab1[5]=num[ADC_data%1000/100];

                delay(5);

                tab1[6]=num[ADC_data%100/10];

                delay(5);

                tab1[7]=num[ADC_data%10];

               

                ADC_data=ADC_P(3);//ad通道4

          delay(5);

                tab1[12]=num[ADC_data/1000];

                delay(5);

                tab1[13]=num[ADC_data%1000/100];

                delay(5);

                tab1[14]=num[ADC_data%100/10];

                delay(5);

                tab1[15]=num[ADC_data%10];

               

                ADC_data=ADC_P(4);//ad通道5

          delay(5);

                tab2[4]=num[ADC_data/1000];

                delay(5);

                tab2[5]=num[ADC_data%1000/100];

                delay(5);

                tab2[6]=num[ADC_data%100/10];

                delay(5);

                tab2[7]=num[ADC_data%10];

               

                ADC_data=ADC_P(5);//ad通道6

          delay(5);

                tab2[12]=num[ADC_data/1000];

                delay(5);

                tab2[13]=num[ADC_data%1000/100];

                delay(5);

                tab2[14]=num[ADC_data%100/10];

                delay(5);

                tab2[15]=num[ADC_data%10];

               

                ADC_data=ADC_P(6);//ad通道7

          delay(5);

                tab3[4]=num[ADC_data%1000/100];

                delay(5);

                tab3[5]=num[ADC_data%1000/100];

                delay(5);

                tab3[6]=num[ADC_data%100/10];

                delay(5);

                tab3[7]=num[ADC_data%10];

               

                ADC_data=ADC_P(7);//ad通道8

          delay(5);

                tab3[12]=num[ADC_data/1000];

                delay(5);

                tab3[13]=num[ADC_data%1000/100];

                delay(5);

                tab3[14]=num[ADC_data%100/10];

                delay(5);

                tab3[15]=num[ADC_data%10];

                guding();

        }

}

/****************

*以下关于ADC

*****************/

void ADC_init() //adc初始化

{

        P1ASF=0XFF;     //设置P1为ADC采集

        ADC_RES=0;                        //清除高八位结果寄存器

        ADC_CONTR=0XE0; //ADC上电  A/D转换周期90个时钟周期

        delay(5);

}


uchar ADC_P(unsigned char ch) //ADC处理函数

{

        ADC_CONTR&=~ADC_FLAG;  //关闭标志位

        ADC_CONTR=0X80|0X00|0X08|ch;

        _nop_();_nop_();_nop_();_nop_();

        while(!(ADC_CONTR&0x10));//等待ADC转换完成


        return ADC_RES;  //返回ADC结果  8位AD

       

/*   ADC_CONTR &= !ADC_FLAG;         //清除ADC中断标志

          delay(30);

    ADC_CONTR=0x80|0x00|0x08|0x00;

          a1=ADC_RES;  //高8位

          b1=ADC_RESL; //低8位

          delay(60);

//        ADC_data=(a1<<2)|(b1>>6); //10AD  */

}

/*************************

*

*

*以下12864相关子函数

*

*************************/

void shuru(unsigned char n)

{

        unsigned char a;

        for(a=0;a<8;a++)

        {

                e=0;

                if((n<                {

                        rw=1;

                }                                            

                else

                {

                        rw=0;

                }

                e=1;        //移位时钟

                e=0;

[1] [2]
关键字:单片机  多通道  AD采集  STC15w系列 引用地址:单片机多通道AD采集源程序(8路) STC15w系列

上一篇:Sdcc编译环境下中断函数的编写
下一篇:STC15F2K60S2单片机数字电压表制作(不用外围A/D换换)

推荐阅读最新更新时间:2024-11-08 21:46

TI MSP430F525x MCU为新一代移动设备实现高级环境计算
德州仪器 (TI) 宣布推出可降低常开智能手机、平板电脑及配件功耗的最新 MSP430™ 微控制器 (MCU),为新一代手持消费类设备实现高级环境计算。开发人员可采用 MSP430F525x MCU 实现传感器集线器、键盘控制与电池/电源管理功能传输,创建的便携式消费类设备能够使高功耗应用处理器及触摸屏控制器处于待机状态,而不是消耗系统电池。 MSP430F525x MCU 采用 1.8V 分轨 I/O 架构,无需外部电平转换电路便可实现与应用处理器的无缝连接。客户现在可创建能够将 I/O 保持为 1.8V,将 MCU 保持在最大工作性能下的智能手机、平板电脑与配件。这些微控制器支持 3.5µs 的快速唤醒时间以及低至 1.6
[单片机]
51单片机之寄存器-3.2单片机中断
讲单片机中断之前,先来个通俗的例子。假如今天有快递来,你要知道快递什么时候到有两种方式,第一种,每隔一分钟你到楼下看快递到了没,这样总有一次能碰到快递。第二种,快递来了,给打电话,然后你去取快递。第一种称为查询法,很明显这种方式很浪费体力。第二种就是中断了,比较轻松。这样我们来详细的探讨一下这个过程。假如你在家里正在看电影,忽然电话响了通知你取快递,于是你把电影暂停,下楼取快递,然后回来继续看电影,如下图所示 图1 日常生活中的中断 这个就是日常生活中的中断场景。我们再概述一下这个过程,当你正在处理某件事情的时候(看电影),外界发生了比较急的事件请求(电话通知快递到了), 你暂停当前的工作(看电影),转而去处理这个比较急的
[单片机]
51<font color='red'>单片机</font>之寄存器-3.2<font color='red'>单片机</font>中断
基于ATMEGA 16的开关电源设计与制作
开关电源是利用现代电力电子技术,控制开关管开通和关断的时间比率,维持稳定输出电压的一种电源。开关稳压电源具有效率高、稳压性能好、保护措施完善等优点,由于控制信号一般通过精密稳压器TL4331、光耦等获得,使输出电压很难做到宽范围内调节。特别是不能输出低电压( 3 V)。将ATMEGA16单片机应用于电源的控制,可以提高开关电源的输出电压控制精度,同时利用ATMEGA16的计算功能,通过软件编程,采用反馈控制使得电压输出趋于恒定。 1 电源硬件电路设计与计算 1.1 系统总体设计 系统组成框图如图1所示。市电经整流滤波电路输出直流,采用EMI共模滤波器抑制市电中的干扰;+5 V单片机供电电源由MC34063构成;系统输出电压经反馈
[单片机]
基于ATMEGA 16的开关电源设计与制作
满足效率与性能的全面要求,新创公司瞄准节能型微控制器
一组来自挪威的研究人员和企业高官日前组建了无晶圆厂芯片公司Energy Micro AS,将基于强大的微处理器架构开发业界最节能的微控制器。前Chipcon公司CEO兼创始人之一Geir Forre担任Energy Micro的总裁兼CEO。Chipcon公司是一家低功率RF和ZigBee芯片专业提供商,2006年1月被德州仪器以2亿美元收购。 Energy Micro 的首席技术官yvind Janbu也来自Chipcon公司,并曾在该公司担任多个重要的技术职位。Energy Micro计划聘用一个由10人组成的新开发团队,而据Forre表示,Energy Micro将于2008年1月开始全面投入运营。 Forre指出:“我
[焦点新闻]
51单片机用C语言实现精确延时的程序
在晶振11.0592下实现15 s的延时: for ( i=0; i 3; i++); 延时程序 (在11.0592的晶振下调用本函数需24 s,每次计数需16 s) void delay( int useconds){ int s; for (s=0; s useconds; s++); } 若需要延时的时间为480 s,那么useconds的数值取值为: (480-24)/ 16 = 28.5 ,取29
[单片机]
基于上位机控制自动接线的单片机实验系统研究
  0 引言   对单片机实验系统的基本需求是:在有限的IO 接口上可以进行多个项目的实验。为了实现这个基本需求,在进行多个不同项目实验时,要对单片机各个IO口进行现场重接线。传统的单片机实验装置现场重接线方法有2类:   一类是现场手工插拔自锁紧接插件;   另一类是现场手工插拔积木式实验模块。   这两类接线方式的实质都属于机械式金属接触。单片机实验系统经过较长时间的使用,都难免会发生金属接触件之间的接触不良现象。特别是自锁紧接插件,问题更为严重:即使线芯开路了,从表面也难以通过肉眼发觉。导致实验成功率低下,占用学生甚至指导老师的排故时间,严重影响了实验效果。现代单片机实验或单片机开发都离不开上位机对软件的编译和程序的
[单片机]
基于上位机控制自动接线的<font color='red'>单片机</font>实验系统研究
HD4478U显示LCD与51单片机驱动程序
#include SST89x5x4.H #include absacc.h #include intrins.h sbit LCDRSPIN = P3^7; sbit LCDRWPIN = P3^6; sbit LCDEPIN = P2^6; #define UCHAR unsigned char void delay(unsigned int i) { UCHAR j; for(i; i 0; i--) for(j = 200; j 0; j--); } /////////////////////////////// //控制LCD unsigned char XPOS,YPOS; //测
[单片机]
MCU晶体两边各接一对地电容的原因
很多MCU开发者对MCU晶体两边要各接一个对地电容的做法表示不理解,因为这个电容有时可以去掉。参考很多书籍,却发现书中讲解的很少,提到最多的往往是:对地电容具稳定作用或相当于负载电容等,都没有很深入地去进行理论分析。 另外一方面,很多爱好者都直接忽略了晶体旁边的这两个电容,他们认为按参考设计做就行了。但事实上,这是MCU的振荡电路,又称“三点式电容振荡电路”,如下图所示。 MCU三点式电容振荡电路 其中,Y1是晶体,相当于三点式里面的电感;C1和C2是电容,而5404和R1则实现了一个NPN型三极管(大家可以对照高频书里的三点式电容振荡电路)。 接下来将为大家分析一下这个电路 首先,上面电路图中5404必须搭一个电阻,不
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved