找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7067|回复: 0
打印 上一主题 下一主题
收起左侧

stc15单片机ADC设置和DS1302应用

[复制链接]
跳转到指定楼层
楼主
ID:100029 发表于 2015-12-22 21:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

stc15ADC模块使用

和ADC转换有关的寄存器

P1ASF     //设置P1口做普通IO口还是ADC输入口,0--普通IO口,1--ADC入。二)P1M0P1M1、这两个寄存器的相同位状态决定P1口的输入状态,00  01  10  11,四种状态,其中:

00是传统准双向I/O口(弱上拉,灌电流20mA,拉电流为230uA)

01推挽输出(强上拉输出,电流可达20mA,需加限流电阻,建议尽量少用)

10高阻输入(电流既不能流入也不能流出,在I/O做AD转换时可用此模式)

11开漏,此模式也可做为ADC转换常采用的状态

三)ADC_CONTR不能位寻址,最好赋值   D7是开关ADC电源开关,0关,1开;D6D5为转换速度,00最慢,11最快,D4转换标志位,当转换完成后自动为1,未完成就为0,D3为转换开始位,1开始,0等待,D2D1D0为输入选择,由于是8路可转换,选择那一路有着三位确定。000---111分别P10---P17。
四)CLK_DIV,这个寄存器主要是分频用,但是它的D5位用来设置转换结果的存储方式,0时CLK_DIV的D5位为0,转换结果高8位存ADC_RES,低2位存ADC_RESL的低两位,1时转换结果低8位存ADC_RESL,高2位存ADC_RES的低两位;

#include"stc15.h"

#include"intrins.h"

#define uchar unsigned char

#define uint unsigned int

uint ADC_DATA;

void delay(uchar ms)

{

uchar i;

  while(ms--)

for(i=0;i<120;i++);

}

void ADC_init(void)

{

        P1=0xff;
        P1ASF=0x08;            //P1ASF的哪一位为1,对于的P1脚位ADC输入模式,为0是普通IO模式
        CLK_DIV   | = 0x20;  //CLK_DIV的D5位为0,转换结果高8位存ADC_RES,低2位存ADC_RESL的低两位;
                                         //CLK_DIV的D5位为1,转换结果低8位存ADC_RESL,高2位存ADC_RES的低两位;

        ADC_CONTR |=0x80;  //开AD转换电源             1000 0000

        delay(80);

        P1M0=0x04;                 //0000 0100

        P1M1=0x04;                 //0000 0100 //设置P1.3为AD转换输入模式

}

uint ADC()

{

        unsigned char DATA_H,DATA_L;

        ADC_DATA  =0;    //清除转换结果

        ADC_CONTR =0xE0; //保持电源开,设置转换速度          1110 0000

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        ADC_CONTR =0xE3; /保持电源开,保持转换速度,并选择P1.3输入 1110  0011

        delay(10);

        ADC_CONTR =0xEB; // 开转换开关 ,开始转换            1110 1011

        while(ADC_CONTR & 0x10==0);//查询转换是否结束,结束后读取结果        

         ADC_CONTR &=0xE7;/清除转换结果标志位,关闭转换

         DATA_H=ADC_RES;

          DATA_L=ADC_RESL;

           

          ADC_DATA=DATA_H;

          ADC_DATA=ADC_DATA<<2;

          ADC_DATA |=ADC_RESL;

          ADC_CONTR=0x00;

          return(ADC_DATA);   //返回转化结果

}

void main(void)

{

   ADC_init();

   while(1)

        {

          ADC();

        }

二、DS1302芯片的使用

SPI通信时序图


#include"reg52.h"

#include"intrins.h"

#define uchar unsigned char

sbit rs=P2^0;

sbit rw=P2^1;

sbit en=P2^2;

sbit rst =P2^3;

sbit sclk=P2^4;

sbit DI  =P2^5;

sbit A7=ACC^7;

sbit A0=ACC^0;

sbit B0=B^0;

uchar tt0[]="Time:";

uchar tt1[]="Data:";

void delay(uchar us)

{ 

       while(us--);

}

void w1602(uchar dat,bit r)

{

   rs=r;

       rw=0;

       P3=dat;

       en=0;

       delay(2);

       en=1;

       delay(4);

       en=0;

}

void init1602()

{

   w1602(0x38,0);

       w1602(0x06,0);

       w1602(0x0c,0);

       w1602(0x01,0);

}

uchar r1302(uchar addr)

{

  uchar n;

       rst=0;

       sclk=0;

       _nop_();

       rst=1;

       B=addr;

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

         {

       sclk=0;

                     DI=B0;

                     sclk=1;

                     B=B>>1;                    

    }

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

         {                    

       A7=DI;

                     sclk=1;

                     ACC=ACC>>1;

                     sclk=0;                    

    }

       rst=0;

       return(ACC);

}

void main()

{

  uchar i;

       init1602();

       while(1)

       {

              w1602(0x80,0);

              for(i=0;i<5;i++)

                     w1602(tt0[i],1);

              w1602(0x30+(r1302(0x85)>>4 & 0x0f),1);

              w1602(0x30+(r1302(0x85) & 0x0f),1);

              w1602(0x2d,1);

              w1602(0x30+(r1302(0x83)>>4 & 0x0f),1);

              w1602(0x30+(r1302(0x83) & 0x0f),1);

              w1602(0x2d,1);

              w1602(0x30+(r1302(0x81)>>4 & 0x0f),1);

              w1602(0x30+(r1302(0x81) & 0x0f),1);

             

              w1602(0xc0,0);

              for(i=0;i<5;i++)

                     w1602(tt1[i],1);

              w1602(0x30+(r1302(0x87)>>4 & 0x0f),1);

              w1602(0x30+(r1302(0x87) & 0x0f),1);

              w1602(0x2d,1);

              w1602(0x30+(r1302(0x89)>>4 & 0x0f),1);

              w1602(0x30+(r1302(0x89) & 0x0f),1);

              w1602(0x2d,1);

              w1602(0x30+(r1302(0x8d)>>4 & 0x0f),1);

              w1602(0x30+(r1302(0x8d) & 0x0f),1);

             

       }

}

 

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表