历史上的今天
返回首页

历史上的今天

今天是:2025年07月24日(星期四)

正在发生

2020年07月24日 | MSP430单片机制作智能数字万用表

2020-07-24 来源:51hei

电路原理图如下:

单片机源程序如下:

/*

* 简易低功耗万用表

*/

#include

#include "LCD12864P.h"


unsigned int ADC_flag,ADC_flag1,shua_xin;

unsigned int ADC_data[8],ADC_result[8],mser,song,liang_cheng = 0,s,wen_pt,pt100 = 0,zu_zhi = 0;


unsigned int data0,data1,data2,data3,data4,data5,data6,data7;


//double data0,data1,data2,data3,data4,data5,data6,data7;

unsigned int table[]={0x00,0x02,0x01,0x04,0x08,0xEF,0xdf,0xcf,0x80};//量程选择 【1】直流10v   【2】直流1v  【3】电阻值10k


/*

*初始化

*/

void int_t()

{


    WDTCTL = WDT_MDLY_8;    //看门狗定时器的初始化设置

    IE1 |= WDTIE;

    Ini_Lcd();                                 //lcd初始化

        BCSCTL1 = CALBC1_8MHZ;

        DCOCTL  = CALDCO_8MHZ;

        /*

        P1DIR &= BIT3+BIT4;/////////将按键口设置为输入

        P1REN |= BIT3+BIT4;////////打开上拉电阻,目的为产生触发沿高电平往低电平

        P1IE  |= 0X18;//////////设置按键口中断

        P1IES |= 0X18;///////////下降沿中断。只有在松手时触发中断的产生

        */

        P1DIR &= BIT3;/////////将按键口设置为输入

        P1REN |= BIT3;////////打开上拉电阻,目的为产生触发沿高电平往低电平

        P1IE  |= 0X08;//////////设置按键口中断

        P1IES |= 0X08;///////////下降沿中断。只有在松手时触发中断的产生


        P2DIR &= ~(BIT2+BIT3+BIT4+BIT5);/////////将功能选择按键口设置为输入        1.直流电压   2.交流电压   3.电阻量程    4.电容测量


        P1DIR |= BIT5 + BIT6 + BIT7 ;                        //        将扩展口为输出


        _EINT();                                          //使能中断,这是一个C编译器支持的内部过程。


}

/*

* 按键延时程序

*/

void delay(unsigned int n)//带参数有返回值的函数

{

        unsigned int i;

        unsigned int j;

        for(i=n;i>0;i--)

                for(j=100;j>0;j--)

                        _nop();

}

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

*名称:ADC()

*功能:AD设置转换  中断

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


void  ADC()

{

        P1SEL |= BIT0 + BIT1 + BIT2 + BIT4;//+ BIT3;//+ BIT4 + BIT5 + BIT6 + BIT7;                  //设置为模拟输入

        ADC10AE0  |= BIT0 + BIT1 + BIT2+ BIT4;// + BIT3;//+ BIT4 + BIT5 + BIT6 + BIT7;   //开启通道A1/A2/A4/A5/A6/A7

        ADC10CTL0|=ADC10ON+MSC+ADC10SHT_2+ADC10IE;                        //打开ADC转换  ,ADC10使能 ,设置采用频率16个周期,允许中断

        ADC10CTL0 |=SREF_1 + REFON + REF2_5V;                           //开内部参考电压为2.5V,允许中断

        ADC10CTL1|=CONSEQ_3+INCH_7;                                                 //使用双(4)通道、循环采集模式

        ADC10DTC1|=0x08;                                                                      //每一通道连续采样1次

        _BIS_SR(GIE);

}

/*

*功能:AD数据处理

*/

void ADC_DATA()

{

        unsigned char i;

        ADC10CTL0&=~ENC;

        while(ADC10CTL1&ADC10BUSY);                                                //检测AD是否繁忙

        ADC10CTL0|=ENC+ADC10SC;                                                  //启动ADC

        ADC10SA=(unsigned int)ADC_result;                                //获取ADC_result[]的首地址。首先对A1、A0采样,放入ADC_result[0]和ADC_result[1]中,如此循环下去。

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

    {

                ADC_data[i]=0;

                ADC_data[i]=ADC_result[i];

        //        ADC_data[i]=(ADC_data[i]*25)/1023;                     //将ADC转换成实际的电压值

    }

}

/*

* 扩展芯片595写入程序

*/

void kuo_zhan(unsigned int dat)

{

        unsigned int i;

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

        {

                if((dat<                        P1OUT|=BIT5;

                else

                P1OUT &= ~BIT5;

                P1OUT &= ~BIT7;

                _NOP();

                P1OUT |= BIT7;

                _NOP();

        }

        P1OUT &= ~BIT6;

        _NOP();

        P1OUT |= BIT6;

        _NOP();

}

/*

* 直流电压检测

*/

void zhi_liu()

{

        unsigned int song_chao;


        lcd_pos(1,0);

        Disp_HZ("★低功耗万用表★",8);


        lcd_pos(2,0);

        Disp_HZ("直流电压",4);


        lcd_pos(3,0);

        Disp_HZ("测量量程",4);


        lcd_pos(4,0);

        Disp_HZ("测量电压",4);


        if(liang_cheng == 1)                                                //量程为10v的时候数据处理

        {

                kuo_zhan(table[1]);                                                //打开10v通道

                song_chao = data0*5.8585*0.002443*100;                                        //

                if(ADC_flag1 == 1)

                {

                        ADC_flag1 = 0;

                        lcd_pos(3,5);

                        Disp_SZ(10/10);

                        Disp_SZ(10%10);

                        lcd_pos(3,6);

                        Disp_HZ("V",1);


                        lcd_pos(4,5);

                        Disp_SZ(song_chao/1000);

                        Disp_SZ(song_chao%1000/100);

                        Disp_SZ(song_chao%100/10);

                        Disp_SZ(song_chao%10);


                        lcd_pos(4,7);

                        Disp_HZ("V",1);

                }

        }

        else if(liang_cheng == 2)                                                //量程为10v的时候数据处理

        {

                kuo_zhan(table[2]);                                                //打开10v通道

                song_chao = data0*1.9825*0.002443*1000;                                        //

                if(ADC_flag1 == 1)

                {

                        ADC_flag1 = 0;

                        lcd_pos(3,5);

                        Disp_SZ(01/10);

                        Disp_SZ(01%10);

推荐阅读

史海拾趣

CQR SECURITY公司的发展小趣事

CQR SECURITY公司最初是一家专注于网络安全技术研发的小型创业公司。在创始人的带领下,公司团队攻克了一系列网络安全难题,开发出了具有高度创新性的安全协议。这一技术突破迅速吸引了业界关注,多家大型企业开始与CQR合作,共同推动产品的商业化应用。随着合作的深入,CQR逐渐在电子安全领域建立了自己的地位,最终发展成为一家业内知名的安全解决方案提供商。

GSG公司的发展小趣事
使用万用表等工具检查电路中的电阻、电容、电感等元件是否损坏,以及电路连接是否良好。
Excelics [Excelics Semiconductor, Inc.]公司的发展小趣事

为了进一步拓展国际市场,Excelics Semiconductor积极寻求与国际知名企业的合作。他们与欧洲一家领先的芯片制造商签订了战略合作协议,共同开发新一代的智能芯片。这一合作不仅提升了Excelics Semiconductor的技术实力,也为其在国际市场上赢得了更多的份额。

Changzhou Galaxy Century Microelectronics Co.,Ltd公司的发展小趣事

银河微电在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,在生产过程中严格控制污染排放,推广绿色生产技术。此外,银河微电还积极参与社会公益事业,捐款捐物支持灾区重建、教育扶贫等项目。这些举措不仅提升了公司的社会形象,也为公司的长远发展积累了良好的口碑。

这五个故事只是银河微电发展历程中的一部分缩影,但它们充分展示了公司在技术创新、市场拓展、资本运作、战略合作和社会责任等方面的努力和成就。正是这些因素的共同作用,使得银河微电在电子行业中脱颖而出,成为一家备受瞩目的高新技术企业。

ERNI Electronics公司的发展小趣事

ERNI Electronics的源头可以追溯到1947年,当时其瑞士母公司成立。而在1956年,ERNI Electronics以生产继电器为起点,正式进入电子行业。在创立初期,公司专注于继电器的开发和制造,积累了丰富的电子行业经验。随着市场需求的不断变化,ERNI在1967年开发了第一个背板连接器,这一创新产品迅速成为公司的核心产品,并推动了公司的快速发展。

佰宏(BHFUSE)公司的发展小趣事

随着国内市场的稳定发展,佰宏公司开始积极拓展海外市场。他们的产品被多个海外电商平台上架,受到了国际客户的青睐。这一举措不仅提升了公司的国际化水平,也为公司的长期发展注入了新的动力。

问答坊 | AI 解惑

谁知道如何用AutoCAD制作元件的PCB封装?

有资料或者可以总结一点经验的请告知…

查看全部问答>

关于有线电视数字机顶盒的关键技术详解

本帖最后由 jameswangsynnex 于 2015-3-3 20:03 编辑 1.有线电视数字机顶盒的基本原理 有线电视数字机顶盒的基本功能是接收数字电视广播节目,示意图如图1所示,调谐模块接收射频信号并下变频为中频信号,然后进行A/D转换变为数字信号,再送 ...…

查看全部问答>

ITU-T文档下载

ITU-T文档下载 谁有资源啊?…

查看全部问答>

rt73的问题

cpu:arm926ej-s rt2571 内核:linux2.6.14 driver:rt73 1.0.4.0 现在是系统能够识别网卡芯片,ifconfig rausb0 inet 192.168.5.123 up也是好的,但是ping不通ap,iwconfig rausb0 essid \"dlink\"的时候并没有设置进去,iwgetid还是空,iwlist rausb0 ...…

查看全部问答>

cygwin安装mips编译器后不识别库函数,请高手指教,谢谢!

cygwin下安装了mips的编译器,但不能识别函数,即使写一个“Hello World”,使用mips-elf-gcc编译时也会提示“undefined reference to `printf\'”,直接用gcc编译就没问题。不知是何原因,望高手指教,谢谢!…

查看全部问答>

关于pb5.0中编译内核,加入蓝牙并能使用虚拟串口问题

我是wince的初学者,以前没有接触过,对于我问的小白问题大家请不要介意,给我点明就好 ,谢谢了 我要做一个项目,这个项目就是用wince5.0实现 gps导航功能应用程序方面用mapx插件做。 主要是我这里只有蓝牙gps模块,所以在编译内核的时候要 ...…

查看全部问答>

SMBUS的SLAVE地址

最近需要写个读写SMBUS设备的寄存器的程序,好象挂在SMBUS上的各类设备都有自己固定的SLAVE ADDRESS,所以想问下是否有相关的资料记录了各类设备预先分配好的地址,如果有相关资料的话,是否可以提供下哪里下载?比如SPD的SLAVE ADDRESS为A0,A2,A4 ...…

查看全部问答>

如何用PLL做主时钟

我想把PLL做主时钟用,请问SysCtlClockSet函数中的参数应该怎么设置?…

查看全部问答>

怎样控制430芯片复位

请注意是由430程序控制,效果要等同于外部复位引脚复位…

查看全部问答>

来讨论下STM32的DSP库吧.附FFT例程~

最近被要求看DSP库.也不知道是干啥..信号与系统当时学就没明白..现在只能摸石头过河了..额..话说好像一直都是在摸石头过河...看了小一天.现在感觉FFT的意义就是吧时域下的信号(横轴是时间.纵轴幅度)变换成频域下(横轴是频率.纵轴是幅度(幅度=sqrt( ...…

查看全部问答>