历史上的今天

今天是:2024年11月08日(星期五)

2019年11月08日 | stc12c5a60s2 0-30电压测量 有注释

发布者:虚拟现实迷 来源: 51hei关键字:stc12c5a60s2  0-30  电压测量  AD电压 手机看文章 扫描二维码
随时随地手机看文章

#include <STC12C5A60S2.H>

#include "intrins.h"


#define uchar unsigned char

#define uint  unsigned int

#define ulong unsigned long



/*Define ADC operation const for ADC_CONTR*/

#define ADC_POWER   0x80            //ADC 电源控制位  10000000  0X80  /

#define ADC_FLAG    0x10            //ADC 完成标志          00010000  0x10

#define ADC_START   0x08            //ADC 启动ADC开关 00001000        0x08  /

#define ADC_SPEEDLL 0x00            //420 转换速度          00000000        0x00  /

#define ADC_SPEEDL  0x20            //280 转换速度          00100000  0x20

#define ADC_SPEEDH  0x40            //140 转换速度          01000000  0x40

#define ADC_SPEEDHH 0x60            //70  转换速度          01100000        0x60 



/*----------------------------------------------------------------------------------------------

meidangzuidivoltage:表示AD最高电压5V对应10bit_AD转换的最小电压是多少 5/1024= 0.00488V 也就是AD在

//10bit下测量的最小电压,

//那么在计算AD电压值的时候将公式 “GetADCResult(ch)*5/1024”分两步进行 方便后面对数据分离显示到

//1602上面  先计算ADC_jiancedaozuidivoltage=5*10000000/1024  先将这个数放大100万倍

//最后在算AD_jie_guo=(ADC_jiancedaozuidivoltage*GetADCResult(ch);

----------------------------------------------------------------------------------------------*/ 

ulong  ADC_jiancedaozuidivoltage,temp,AD_jie_guo;          //长整形数据  16bit


float OVP;                 //定义一个浮点数  以保留小数点 提高进度


uint num,i,vlue;//ADC_mV,ADC_RESX,VCC_V=5.2;


sbit    lcden = P2^7;

sbit    rs = P2^6;

sbit    rw = P2^5;

sbit    LED = P3^0;


void Delay(uint n);              //延时函数

uint GetADCResult(uchar ch);                 // ad转换函数

void InitADC();                                         //ad初始化函数

void OCP_1();                                         //过压 欠压  提醒函数声明

float count(uchar ch);       //AD值100次平均值函数

//ulong  count(uchar ch);  //ad计算函数测量0-5V时候用的

uchar code table[20]= {"     Shu Kong QuDong"};        //  开机画面的布置

uchar code table2[20]={"     CQDZ Alan V1.01"};



/*-----------------

  延时函数

  -----------------*/

void delayms(uint xms)           //延时函数

{                                        

     uint i,j;                                         

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

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

}


/*--------------------

写命令

---------------------*/

void   lcd_write_com(uchar com)

{


         rw=0;

                 rs=0;        //写命令状态

                 P0=com;

                 lcden=1;

             delayms(5);

                 lcden=0;

}


/**-----------------

写数据

--------------- ***/

void  write_date_(uchar date)

{

         rw=0; //写数据

                 rs=1; //写数据状态

                 P0=date;

                 delayms(5);

                 lcden=1;  //使能

             delayms(5);

                 lcden=0;    

}


/*---------------

初始化显示屏

---------------*/

void lcd_init(void)

{


                  lcden=0;

                  lcd_write_com(0x38); //设置8位格式,2行,5*7

                  lcd_write_com(0x0c); //整体显示,关光标,不显示

                  lcd_write_com(0x06); // 设定输入方式,增量不移位

                  lcd_write_com(0x01);//清屏幕

                  delayms(5);  //延?



}


/*-----------------------

函数名称    格式定义

函数的介绍  在某个屏幕位置上显示一个字符,X(0-16),y(1-2)

X:表示字的格式 一共16个  Y:表示行 一共2行

-------------------------*/

//格式定义


void lcd_disp_char(uchar y,uchar x, uint dat)

{

         uint  address;

             if(y==1)                   //y为1  在第一行

                   address=0x80+0x10+4+x;          //整屏左移动以后 从新定义新的起始位置 但是要加上之前移动后的地址

             else

               address=0xc0+0x10+x;           //y为2 在第二行  X显示字的位置   0XC0是 0x80+0x40的结果


           lcd_write_com(address);          //写入要写的位置

                   write_date_( dat);       //写入你要写的数据         

}         



/*------------------

显示函数2

-------------------*/

void  disp()

{


     AD_jie_guo = count(0);   //经过上面的计算求出来100次的平均值存放在AD_jie_guo里面



/*-------------------------------------------------------------------------------

        //扩大电压   我的量程是0-30V  分压电阻是 10k 2k 电阻比的6  反推 当测试电压为5v

   //的时候 最高电压为30V 测量后调试OK 因电阻误差 调整了数据为6.02  

  //同时这里也可以用(temp/0.167)/100  这个是电压比也就是30V分压为5V  

  //然后5/30=0.167的结果也是一样的

---------------------------------------------------------------------------------*/

         temp=((ADC_jiancedaozuidivoltage*AD_jie_guo)*6.02)/100;

//         temp=(temp*6.02)/100;    //备用算法 这样太占用位置 我把这步合并到上面了         

                 

                                                          

        //0x30是显示数字 0-9 30表示第一个数0  

        lcd_disp_char(1,0, temp%10000000/1000000+0x30 );   //十位

        lcd_disp_char(1,1, temp%1000000/100000+0x30);   //个位        

        lcd_disp_char(1,2,'.' );                                 // 小数点

        lcd_disp_char(1,3, temp%100000/10000+0x30 ); //个分位

        lcd_disp_char(1,4, temp%10000/10000+0x30 ); //百分位

        lcd_disp_char(1,5,'V' );

}

                                          //count(0)

/*-----------------------------------

名称  开机画面                  

功能  开机的时候显示一下铭牌

      for来完成 屏幕左移动

----------------------------------*/

void init()


{        




//        lcd_write_com(0x80+0x10);  //定义显示的位置 起始地址        

        lcd_write_com(0x80);           //定义显示的位置 起始地址


        for(num=0;num<20;num++)

         {        

                

                        write_date_(table[num]);               //初始化屏幕的初始数字“0000”

                        delayms(5);                          

     }

                 

//        lcd_write_com(0x80+0x40+0x10);   //定义第二排,显示的地址 0x80是显示屏寄存器第一排起始地址

        lcd_write_com(0xc0);                  //定义显示的位置 起始地址

    for(num=0;num<20;num++)                         //0x40是第二排起始地址

      {

                   write_date_(table2[num]); 

                   delayms(5);                  

          } 


          for(num=0;num<20;num++)        //整屏左移动 这里的21就是指可以移动多少格  

          {                                                        //可以是100可以是1000 相当于是电子屏幕一样

[1] [2]
关键字:stc12c5a60s2  0-30  电压测量  AD电压 引用地址:stc12c5a60s2 0-30电压测量 有注释

上一篇:蓝牙定时开关APP软件(附51单片机参考程序)
下一篇:LED8x8点阵显示屏设计报告+PCB原理图与单片机程序

推荐阅读

据外媒报道,荷兰科技公司里吉斯(RGS)推出E-magy纳米多孔硅,据说该材料可以显著提高锂离子的吸收率,并能够解决电池充电循环中发生的膨胀情况。此类特殊硅材料可用于锂离子电池的阳极,用于提升电池容量。据该公司所说,E-magy可以增加锂离子电池阳极容量,甚至可增加行业目标额外50%的容量。增加的容量可以让电动汽车无需其他电池,就可达到500公里以...
法雷奥展示了其最新创新技术,致力引领移动出行变革。此次车展,法雷奥展出了其低压(48V)纯电动城市原型车,这是法雷奥为满足不同出行需求及用途的电气化解决方案之一。该原型车是一辆全功能两座电动汽车,其最高时速可达100公里/小时,行驶里程数可达150公里,可通过任何电源插座充电。这也为未来城市出行提供了一种高性价比的理想解决方案。此外,法雷...
BOSS在看汽车杂志,突然自言自语了一句:"现在的真是越来越大了。"漫哥好奇地递头过去瞄,也笑着说:"嘿嘿真的挺大的。"谁知BOSS一个暴扣,说:"我说这车的屏幕。"漫哥唯有把视线从车灯移到旁边的图片,的确是个挺大的中控屏。现在确实中控屏越做越大,像不用钱似的,尤其国内车企,新车二话不说,先考虑把中控屏做大。吃瓜群众们纷纷吐槽三大件不够,只能...
广告摘要声明广告当前,中国靶材制造业普遍是劳动密集型产业,工人依赖程度高,工人劳动强度大,加上工作环境极为恶劣,长期以来面临招工难、招工贵、以及难控制成本等痛点。由于LCD靶材生产过程中浸润焊接、检测、上下料、打磨抛光等,需要大批人力在高温、高湿、高粉尘的环境中作业,且靶材产品的尺寸及重量较大,导致劳动强度很大,恶劣的环境影响着工...

史海拾趣

问答坊 | AI 解惑

向斑竹请教(2)

      谢谢斑竹。      斑竹也知道我肯定不是学微波的。事情是这样的:我们的实验需要将一路微波均分成两路,再将其中一路适当衰减,移相,所以就需要功分器,衰减器(可调),移相器。国外类似 ...…

查看全部问答∨

PIC系列单片机数据存储器的特点和功能(下)

3 A/D转换寄存器 这里摘录一段笔者从网上下载的用PIC16F877单片机芯片(带Flash存储器的)完成有关A/D转换的源程序部分指令,并用它说明有关A/D转换寄存器在指令中的用法。这里先引用部分源程序,源程序中的注释是笔者按照指令在程序中的作用所加 ...…

查看全部问答∨

推荐CPLD+单片机开发板。。。

联华众科CPLD开发板 CA127 北京联华众科科技有限公司 http://www.lianhua-zhongke.com.cn Abstract  摘 要:联华众科CPLD开发板CA127核心器件为 Altera MAX II系列的EPM1270,CA127具有丰富的板载资源,由于板载有51 ...…

查看全部问答∨

发几个红外解码程序

发几个红外解码程序…

查看全部问答∨

有没有办法从应用程序得到windowmessage的值

因我要拦截系统自定义的系统消息,只知道消息名字,不知道值,如何得到其值。谢谢Q…

查看全部问答∨

请教高手模电知识

题目与问题都在附件里,麻烦各位高手不吝赐教,详细帮我分解分解,谢谢…

查看全部问答∨

感言

本帖最后由 ddllxxrr 于 2016-1-7 17:06 编辑 从此eeworld 有了我的影踪啦,,努力 …

查看全部问答∨

【整合】MSP430F5529 USB实验板相关资料

MSP430F5529 USB实验板TI官网资料https://bbs.eeworld.com.cn/thread-366160-1-1.html SEED-EXP430F5529 USB实验板 及相关资料(2楼还有)https://bbs.eeworld.com.cn/thread-366435-1-1.html…

查看全部问答∨

G2553 I2C与MPU6050的通讯协议

上面的是发送程序,下面的是接收协议; 通过示波器得到的波形如下,为什么收不到数据?貌似关键在    I2CReadInit();    UCB0CTL1 |= UCTXSTT;这两句,但是应该没错啊,为什么读不出来数据呢…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved