历史上的今天
返回首页

历史上的今天

今天是:2024年12月05日(星期四)

正在发生

2019年12月05日 | 单片机+ADC0832简易数字电压表proteus仿真与程序源码

2019-12-05 来源:51hei

ADC0832电压表仿真原理图如下

单片机电压表源程序如下:

#include

#include


#define uint unsigned int

#define uchar unsigned char

        

sbit CS =P3^4;              //片选使能端

sbit DI =P1^1;               //数据信号输入端,选择通道控制(SIG/DIF和ODD/EVEN)

sbit DO =P1^1;             //数据输出端

sbit CLK =P1^0;           //时钟脉冲


sbit S_1 = P2^3;

sbit S_2 = P2^4;

sbit S_3 = P2^5;

sbit S_4 = P2^6;


unsigned char wd[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //不带小数点的段选码

unsigned char yd[]={0x40,0x79,0x024,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点的段选码


// ===========延时子程序=================

void delay_ms(unsigned int x) 

{

        unsigned int i,j;

        for(i=0;i             for(j=0;j<123;j++);              //延时1ms

}

/*=============读ADC0832函数=============*/

/*=============采集并返回=================*/

unsigned int Adc0832(unsigned char channel)  //AD转换,返回结果

{

    uchar i=0;   

                uchar j;

                uint dat=0;            //正向输入数据

                uchar ndat=0;       //反向输入数据

//****************初始化操作**************

                if(channel==0)channel=2;     //10B对应SGL/DIF=1,ODD/EVEN=0

                if(channel==1)channel=3;     //11B对应SGL/DIF=1,ODD/EVEN=1

//****************写操作,将通道数据写入ADC0832**************

           DI=1; _nop_();_nop_();     //发起始位,固定为1(1位)

                 CS=0;_nop_();_nop_();     //拉低CS端,让ADC0832使能

                 CLK=1;_nop_();_nop_();   //拉高CLK端,DI端的数据移入ADC0832内部的多路移位寄存器

                 CLK=0;_nop_();_nop_();    //拉低CLK端,形成下降沿1,第一个周期开始

                 CLK=1;    //拉高CLK端,在第一个时钟周期内,DI为高电平,表示启动位

                                         //紧接着输入两位配置位进行通道选择

                        DI=channel&0x1;_nop_();_nop_(); //假设选取通道0,则10&01=0,即SGL/DIF=0,为差分输入(2位)

                        CLK=0;_nop_();_nop_();    //拉低CLK端,形成下降沿2,第二个周期开始

                        CLK=1;                                //拉高CLK端

                        DI=(channel>>1)&0x1;_nop_();_nop_();  //假设选取通道0,则01&01=1,ODD/EVEN=1,表示通道0

            CLK=0;                                 //拉低CLK端,形成下降沿3

                        DI=1;_nop_();_nop_();        //控制命令结束 

                        dat=0;

                //*************读操作,将AD转换的数从DO口输出****************

                        for(i=0;i<8;i++)   //每一个CLK下降沿输出一位数,先输出高位

                        {

                                 dat|=DO;    //收数据,“|”位或,如果2位中有一位为1,则结果为1,否则为0

                                 CLK=1;_nop_();_nop_();

                                 CLK=0;_nop_();_nop_();      //形成一次时钟脉冲

                                 dat<<=1;

                                 if(i==7)dat|=DO;

                        } 

                        

                        for(i=0;i<8;i++)  //每一个CLK下降沿输出一位数,先输出低位

                        {

                                 j=0;

                                 j=j|DO;    //收数据

                                 CLK=1;_nop_();_nop_();

                                 CLK=0;_nop_();_nop_();    //形成一次时钟脉冲

                                 j=j<<7;

                                 ndat=ndat|j;

                                 if(i<7)ndat>>=1;

                        }

//*********************结束AD转换,并返回转换的数***********************

                        CS=1;     //拉低CS端

                        CLK=0;   //拉低CLK端

                        DO=1;     //拉高数据端,回到初始状态

                        dat<<=8;

                        dat|=ndat;

                        return(dat);            //返回数据

                        }

//============数码管显示函数==========================

        void display(uchar p)                  //数码管显示函数

        {

        uchar S1,S2,S3;


        S1=p/51;                       //个位

        S2=(p*10/51)%10;        //十分位

        S3=(p*100/51)%10;      //百分位

                

        //个位

        S_1 = 1;                 //第一个数码管

        S_2 = 0;

        S_3 = 0;

        S_4= 0;

        P0=yd[S1];             //选取带有小数点的段选码

        delay_ms(5);               //延时

        S_1 = 0;                        //消隐

                

  //十分位

        S_1 = 0;

        S_2 = 1;                   //取第二个数码管

        S_3= 0;

        S_4= 0;

        P0=wd[S2];              //选取不带有小数点的段选码

  delay_ms(5);

        S_2 = 0;                    //消隐

        

  //百分位

        S_1 = 0;

        S_2 = 0;

        S_3= 1;                      //取第三个数码管

        S_4= 0;

        P0=wd[S3];                //选取不带有小数点的段选码

        delay_ms(5);  

  S_3= 0;                       //消隐

        }

//===========主函数================

        int main(void)

{

        while(1)                    //无限循环

        display(Adc0832(0));//数码管显示

//Adc0832(0):选择通道0,单端模式

//调用Adc0832(0),SIG/DIF=0,ODD/EVEN=1,表示工作在差分输入方式,且CH0为-,CH1为+

……………………



推荐阅读

史海拾趣

FTDI [Future Technology Devices International Ltd.]公司的发展小趣事

近年来,FTDI通过并购等方式不断拓展其业务范围。例如,电连技术通过发行股份及支付现金的方式收购了FTDI的部分股权,使FTDI成为其控股子公司。这一并购不仅为电连技术带来了FTDI在USB桥接芯片领域的领先技术,还促进了双方在产品、客户和销售渠道等方面的协同效应。同时,FTDI也借此机会进一步提升了其在新兴市场如汽车电子、物联网等领域的竞争力。

Clover Display Limited公司的发展小趣事

随着中国内销市场的不断扩大,Clover Display Limited看到了巨大的商机。为了更好地服务中国内销客户,公司在2001年在深圳南山区成立了高华电子显示(深圳)有限公司。这家子公司以独资经营方式运作,可以开具增值税发票,以人民币结算,从而更加便捷地服务中国客户。深圳子公司的成立不仅拓宽了公司的销售渠道,也为其在中国市场的进一步发展奠定了坚实基础。

DILABS公司的发展小趣事

DILABS公司成立于XX世纪初,由一群热衷于电子技术的工程师创立。在公司初创时期,他们面临了资金短缺、技术瓶颈和市场竞争等多重挑战。然而,他们坚持创新,经过无数次实验,终于在芯片封装技术上取得了突破。这一突破性的技术为DILABS赢得了业界的关注,也为公司的发展奠定了坚实的基础。

D3公司的发展小趣事

D3公司始终将产品质量放在首位。公司建立了严格的质量管理体系,从原材料采购到产品生产、检验,每一个环节都严格把控。这种对品质的执着追求,使得D3公司的产品在市场上赢得了良好的口碑。同时,公司还注重售后服务,为消费者提供全方位的支持和保障。这种以品质为核心的发展策略,让D3公司在电子行业中树立了良好的品牌形象。

深圳杜因特(DOINGTER)公司的发展小趣事

经过数年的技术研发和产品迭代,杜因特成功开发出多款高性能的MOS场效应管产品,这些产品广泛应用于开关电源、液晶电视、充电器等多个领域。随着产品质量的不断提升和市场份额的逐步扩大,杜因特逐渐在电子行业树立了良好的品牌形象。

BRIGHT公司的发展小趣事

BRIGHT公司不仅在电子产品领域取得了成功,还积极拓展酒店业务。他们成立了伯瑞特酒店集团,并在全国范围内开设了多家酒店。这些酒店以高品质的服务和独特的文化特色赢得了广大消费者的喜爱。其中,宁波伯瑞特酒店荣获了全国钻级酒店评定中的五钻酒家称号,千岛湖伯瑞特度假酒店也获得了金鼎特色文化主题饭店的荣誉。这些荣誉的获得不仅彰显了BRIGHT公司在酒店业务方面的实力,也为其未来的发展奠定了坚实的基础。

问答坊 | AI 解惑

Keil51仿真时为什么一开始就会自动出现Disassembly 窗口?

Keil51仿真时为什么一开始就会自动出现Disassembly 窗口?谢谢…

查看全部问答>

wince 编译问题

大伙或许对编译比较模糊 这是我对explorer编译时的观察记录 Build for Windows CE (Release) (Built on Apr 14 2005 13:54:39) File names: Build.log Build.wrn Build.err Build.dat BUILD: [Thrd:Sequence:Type  ] Message B ...…

查看全部问答>

做一个计数器、不会!提问

    受朋友所托帮他做个计数器,但是之前硬件方面的都没接触过,所以到这里来请教各位大侠,望不吝赐教,谢谢。 功能是这样的:有十条生产线,要统计每一条生产线上生产的产品个数(0-99),输入的方法就是按一下按钮,每按一次计数器值 ...…

查看全部问答>

想用PROTEL99做电路设计,遇到安装问题

安装protel 99时出现的错误信息为:Error extracting support files:服务器运行失败 请问这是因为什么? 如何处理,是不是需要安装什么WINXP的组件或者服务?…

查看全部问答>

关于 wince设备调用web services(高手请进)

各位大侠:     小弟最近做了一个wince上的程序,要求与数据库实时传输数据,于是小弟就采用了部署web service中间层的做法。现在在模拟器上程序运行良好,但是当部署到真机上的时候问题就出现了。当web service返回一个DataSet的时候出 ...…

查看全部问答>

TI于2007年8月2日厦门举办MSP430DAY,免费报名中

TI于2007年8月2日厦门举办MSP430DAY,免费报名中。 欢迎广大单片机爱好者及技术爱好者参加,免费报名中。 请参考网站http://www.morrihan.com.cn/msp430.htm 欢迎大家参加,也可发送邮件到dennyzheng@morrihan.com.cn报名。或致电021-58369345 ...…

查看全部问答>

我将以前的MIDI键盘程序弄到万利的STM32板上来了,哈哈~~~

代码看得比较晕,经过一个晚上加一个上午的奋斗,终于把程序改好了~~~~ 我是拿原来的USB摇杆的那个程序来改的,所以里面还有很多原来的摇杆方面的东东, 懒得去改它了,能用就行了。 源代码包下载: https://bbs.eeworld.com.cn/upfiles/img/20 ...…

查看全部问答>

【TI文献】小尺寸逻辑器件迷你指南

小尺寸逻辑器件迷你指南,欢迎大家下载!…

查看全部问答>