数模

这里写图片描述

#include<reg51.h>

#define u8 unsigned char
#define u16 unsigned int

sbit wr=P3^6;
sbit rd=P3^2;

void init_DA0832()//DA芯片准备函数
{
    rd=0;
    wr=0;
}
void delay(u16 xms)
{
    u16 i,k;
    for(i=0;i<xms;i++)
    for(k=0;k<113;k++);
}
void main()
{
    u8 j;
    init_DA0832();  
    while(1)
    {
        for(j=225;j<255;j++)
        {
            P2=j; //数模转换 把模拟输入采样的信号 通过数模转换输出
            delay(55);
        }
        for(j=255;j>225;j--)
        {
            P2=j; //数模转换 把模拟输入采样的信号 通过数模转换输出
            delay(55);
        }   
    }
}

这里写图片描述

#include<reg51.h>
#include<intrins.h>
sbit OE=P2^1;//输出允许
sbit ST=P2^2;//START、ALE,启动转换、地址锁存
sbit EOC=P2^0;//转换结束
sbit CLOCK=P2^4;//时钟
sbit C0=P3^7;//数码管位选
sbit C1=P2^6;//数码管位选
sbit C2=P2^7;//数码管位选
sbit Dp=P2^5;//小数点
table[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};   //共阳极数码管0~9显示的数值表
unsigned int data dis[4]={0x00,0x00,0x00,0x00};  //用以计算存储输出电压的数组
unsigned char getData;

//延时函数
void delay(int t)                 //延时子函数
{
    int i,j;
    for(i=0;i<t;i++)
    for(j=0;j<50;j++);
}
void init()
{
  TMOD=0x02;      //打开中断计时器0
  TH0=255; 
  TL0=255;
  EA=1;
  ET0=1;
  TR0=1;
}
//主函数
void main()
{
    while(1)
    {
        init();
        OE=0;          //关闭输出允许位
        ST=0;
        ST=1;          
        _nop_();
        ST=0;          // 下降沿使ADC0809开始
        delay(10);     //等待转换完成
        if(EOC==1)     //如果转换结束位为1,标志转换已经完成
        {
            OE=1;          // 打开输出允许位
            getData=P0;    //把8位数字量输出赋值给变量getData
            OE=0;           //关闭输出允许位
            dis[3]=getData/51;   //每刻度值为5/256V,所以电压值为输出的8位数字值*5/256V,计算输出电压的整数值
            dis[2]=getData%51;   //dis[2]位中间暂存数据位
            dis[1]=dis[2]*10;    
            dis[1]=dis[1]/51;    //计算输出电压的小数值
            dis[0]=(((dis[2]*10)%51)*10)/51; //计算输出电压的第二位小数值

            C0=0;                //关闭第三位数码管
            C1=0;                //关闭第二位数码管
            C2=1;                //打开第一位数码管
            Dp=0;                //打开小数点
            P1=table[dis[3]];    //显示整数部分及小数点
            delay(2);           //延时一定时间

            C0=0;                //关闭第三位数码管
            C2=0;                //关闭第一位数码管
            C1=1;                //打开第二位数码管
            Dp=1;                //关闭小数点
            P1=table[dis[1]];     //显示小数部分
            delay(2);

            C2=0;                //关闭第一位数码管
            C1=0;                //关闭第二位数码管
            C0=1;                //打开第三位数码管
            Dp=1;                //关闭小数点
            P1=table[dis[0]];     //显示小数部分
        }
    }     
}

//中断函数
void t0(void) interrupt 1 using 0
{
    CLOCK=~CLOCK;             //利用C51的中断计时器给ADC0809输入时钟脉冲信号
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值