找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4127|回复: 0
收起左侧

基于MSP430的电池电压检测仿真+程序

[复制链接]
ID:511094 发表于 2020-5-23 17:54 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
S~N[6_@S6N%_L5%XU)39W.png {CHFHZ(VUVBK5A6A`]RPE{G.png RH1SLBEYR(U]3}[5JXZGX.png

单片机源程序如下:

  1. //******************************************************************//

  2. #include <MSP430x24x.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,  //共阴数码管段选码表,无小数点
  6.                                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  7. uchar table_volt[4] = {0};               //数组,存储电压值
  8. uchar Index;                            //变量
  9. //*******延时函数************//
  10. void Delay_ms(unsigned int t)
  11. {
  12.     unsigned int num;
  13.     while(t--)
  14.       for(num=1330;num>0;num--);
  15. }


  16. //ADC管脚定义

  17. #define ADCST0          P5OUT &= ~BIT4
  18. #define ADCST1          P5OUT |= BIT4
  19. #define ADCALE0         P5OUT &= ~BIT5
  20. #define ADCALE1         P5OUT |= BIT5
  21. #define ADCEOC0         P5OUT &= ~BIT6
  22. #define ADCEOC1         P5OUT |= BIT6
  23. #define ADCOE0          P5OUT &= ~BIT7
  24. #define ADCOE1          P5OUT |= BIT7  
  25. #define ADC_Channel0          P5OUT &= ~BIT0
  26. #define ADC_Channel1          P5OUT |= BIT0
  27. unsigned int  ADC1 = 0;                                  //变量,采集电池电压值

  28. //*******ADC采集启动函数************//
  29. void ADC_START(void)
  30. {
  31.   ADCALE1;
  32.   ADCST1;
  33.   Delay_ms(1);
  34.   ADCALE0;
  35.   ADCST0;
  36.   Delay_ms(1);
  37. }

  38. //*******ADC采集时序实现函数************//
  39. unsigned int ADC_READ(void)
  40. {
  41.   unsigned int data;
  42.   data=0x00;
  43.   Delay_ms(1);
  44.   ADCOE1;
  45.   ADC_START();
  46.   Delay_ms(5);
  47.   data=P4IN;                    //读取数据
  48.   ADCOE0;
  49.   return data;                          //返回数据
  50. }

  51. //*******主函数************//
  52. void main(void)
  53. {
  54.    
  55.     WDTCTL=WDTPW + WDTHOLD; // 关闭看门狗
  56.     P2DIR=0xFF;            // 设置方向
  57.     P2SEL=0;            // 设置为普通I/O 口
  58.    
  59.     P3DIR=0xFF;            // 设置方向
  60.     P3SEL=0;            // 设置为普通I/O 口
  61.    
  62.     P2OUT=0x00;
  63.     P3OUT=0xFF;
  64.    
  65.     P5SEL = 0x00;
  66.     P5DIR |= BIT0+BIT4+BIT5+BIT6;               //ADC芯片接口
  67.    
  68.   
  69.    
  70.     while(1)
  71.     {
  72.       
  73.          P3OUT=0xFF;
  74.          if( Index == 0 )                       //如果第一个数码管显示,加入小数点
  75.          {
  76.             P2OUT=table[table_volt[Index]]+0x80;//小数点
  77.          }
  78.          else                                           //其他不加
  79.          {
  80.             P2OUT=table[table_volt[Index]];             //显示电压值
  81.          }
  82.             P3OUT=~(1<<Index);
  83.           if(++Index==4) Index=0;
  84.          Delay_ms(1);                   //延时
  85.       
  86.         ADC1 = ADC_READ()*20-80;                //ADC电池电压采集,放大
  87.         table_volt[0] = ADC1/1000;               //千位               
  88.         table_volt[1] = ADC1%1000/100;            //百位
  89.         table_volt[2] = ADC1%100/10;                            //十位
  90.         table_volt[3] = ADC1%10;                        //个位
  91.          
  92.     }

  93.    
  94. }
复制代码

所有资料51hei提供下载:
代码.rar (313.3 KB, 下载次数: 66)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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