单片机--ad_da

这篇博客主要探讨了单片机中模拟数字(AD)和数字模拟(DA)转换的应用,通过分析ad_da.c和ad_da.h两个关键文件,详细解释了如何在单片机系统中实现数据的转换过程,对于理解和实施数字信号处理具有重要意义。
摘要由CSDN通过智能技术生成

ad_da.c

#include "myhead.h"

unsigned char AD_read()
{

      unsigned char temp;
    iic_start();
      iic_send_byte(0x90);
      if(0 == ack)
        {
              return ERR;
        }
        iic_send_byte(0x44);
        if(0 == ack)
        {
              return ERR;
        }

        iic_start();
        iic_send_byte(0x91);
        if(0 == ack)
        {
              return ERR;
        }

        temp = iic_rcv_byte();
    iic_noack();
        iic_stop();

        return temp;
}

// unsigned char DA_Write(unsigned char num)
// {
//    iic_start();
//    iic_send_byte(0x90);
//    if(0 == ack)
//      {
//            return ERR;
//      }
//      iic_send_byte(0x40);
//      if(0 == ack)
//      {
//            return ERR;
//      }
//      iic_send_byte(num);
//      if(0 == ack)
//      {
//            return ERR;
//      }
//      iic_stop();
//      
//      return SUCC;
// }



void DA()
{

//    电池
        unsigned char test;
        unsigned int  vol;
        unsigned int tmp;
      unsigned char flag = 1;
      unsigned char key;
        lcd_init();
        //电池外壳
//    lcd1602_write(0x40,LCD_WRITE_COM);
//      lcd1602_write(0x0e,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      //1-20%    0x1
//     lcd1602_write(0x48,LCD_WRITE_COM);
//      lcd1602_write(0x0e,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      //21-40%   0x2
//     lcd1602_write(0x50,LCD_WRITE_COM);
//      lcd1602_write(0x0e,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);    
//      //41-60%   0x3
//     lcd1602_write(0x58,LCD_WRITE_COM);
//      lcd1602_write(0x0e,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      //61-80%   0x4
//     lcd1602_write(0x60,LCD_WRITE_COM);
//      lcd1602_write(0x0e,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x11,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      //81-100%   0x5
//     lcd1602_write(0x58,LCD_WRITE_COM);
//      lcd1602_write(0x0e,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);
//      lcd1602_write(0x1f,LCD_WRITE_DATA);

        while(flag)
        {
              test = AD_read();
              vol = test / 255.0 * 500.0;
              tmp = vol * 2;

              lcd_dis_char(10,0,(vol / 100) + 0x30);
              lcd_dis_char(11,0,'.');
              lcd_dis_char(12,0,(vol % 100 / 10 + 0x30));
              lcd_dis_char(13,0,(vol % 10) + 0x30);
              lcd_dis_char(14,0,'V');
              delay_ms(200);
              if(vol < 500 && vol >= 50)
                {
                      lcd_dis_char(10,1,' ');
                        lcd_dis_char(11,1,(tmp / 100) + 0x30);
                        lcd_dis_char(12,1,(tmp % 100 / 10) + 0x30);
                        lcd_dis_char(13,1,'%');
                }
                if(vol == 500)
                {   
                      lcd_dis_char(10,1,'1');
                        lcd_dis_char(11,1,0x30);
                        lcd_dis_char(12,1,0x30);
                        lcd_dis_char(13,1,'%');
                }
        if(vol < 50)    
                {
                      lcd_dis_char(10,1,' ');
                        lcd_dis_char(11,1,' ');
                        lcd_dis_char(12,1,(tmp % 100 / 10) + 0x30);
                        lcd_dis_char(13,1,'%');                   
                }
//              lcd1602_write(0x80 + 15,LCD_WRITE_COM);
//              if(0 == vol)
//              {
//                  lcd1602_write(0x0,LCD_WRITE_DATA);
//              }
//              if(vol <= 100 && vol > 0)
//              {
//                    lcd1602_write(0x1,LCD_WRITE_DATA);
//              }
//            if(vol <= 200 && vol > 100)
//              {
//                    lcd1602_write(0x1,LCD_WRITE_DATA);
//              }       
//         if(vol <= 300 && vol > 200)
//              {
//                    lcd1602_write(0x2,LCD_WRITE_DATA);
//              }       
//            if(vol <= 400 && vol > 300)
//              {
//                    lcd1602_write(0x4,LCD_WRITE_DATA);
//              }       
//            if(vol <= 500 && vol > 400)
//              {
//                    lcd1602_write(0x5,LCD_WRITE_DATA);
//              }           

        key = key_scan();

        if(0xe7 == key)
                {
                      lcd_init();
                      lcd_over();
                      flag = 0;
                }                   
        }    
}

ad_da.h

#ifndef _AD_DA_H
#define _AD_DA_H

extern unsigned char AD_read();
//extern unsigned char DA_Write(unsigned char num);
extern void DA();


#endif 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值