立即注册 登录
返回首页

uid:205616的个人空间

日志

基于stc15w408的ad电压表

热度 2已有 4937 次阅读2017-5-28 17:24 | 电压表

基于stc15w408的ad电压表

#include    "intrins.h"
#include<HD7279.c>
#define     MAIN_Fosc       11059200L   //定义主时钟
#define uchar unsigned char
#define uint unsigned int

typedef     unsigned long   u32;



uchar a,b,c,d,temp,vin,vout;
/***********************************************************/

#define DIS_DOT     0x20
#define DIS_BLACK   0x10
#define DIS_        0x11

#define P1n_pure_input(bitn)        P1M1 |=  (bitn),    P1M0 &= ~(bitn)

/****************************** 用户定义宏 ***********************************/

    #define Cal_MODE    0   //每次测量只读1次ADC. 分辨率0.01V
//  #define Cal_MODE    1   //每次测量连续读16次ADC 再平均计算. 分辨率0.01V


#define Timer0_Reload   (65536UL -(MAIN_Fosc / 1000))       //Timer 0 中断频率, 1000次/秒
/*************  本地变量声明    **************/

u8  display_index;  //显示位索引
bit B_1ms;          //1ms标志

u16 msecond;

u16 Bandgap;    //

u16 Get_ADC10bitResult(u8 channel); //channel = 0~7




/**********************************************/
void main(void)
{
    u8  i;
    u16 j;

    P0M1 = 0;   P0M0 = 0;   //设置为准双向口
    P1M1 = 0;   P1M0 = 0;   //设置为准双向口
    P2M1 = 0;   P2M0 = 0;   //设置为准双向口
    P3M1 = 0;   P3M0 = 0;   //设置为准双向口
    P4M1 = 0;   P4M0 = 0;   //设置为准双向口
    P5M1 = 0;   P5M0 = 0;   //设置为准双向口
    P6M1 = 0;   P6M0 = 0;   //设置为准双向口
    P7M1 = 0;   P7M0 = 0;   //设置为准双向口
    

    P1M1 |= (1<<3);     // 把ADC口设置为高阻输入
    P1M0 &= ~(1<<3);
    P1ASF = (1<<3);     //P1.3做ADC
    ADC_CONTR = 0xE0;   //90T, ADC power on
    
    AUXR = 0x80;    //Timer0 set as 1T, 16 bits timer auto-reload, 
    

    
    while(1)
    {  
vin=Get_ADC10bitResult(3);
vin=vin*(5.0)/256*10; //转换ad值为电压值
    temp=vin;

a=temp/10; 
b=temp%10;   
c=temp%10%1/0.1;

SEND7279_CMD_DATA(0x80,a+0x80);
SEND7279_CMD_DATA(0x80+1,b);
SEND7279_CMD_DATA(0x80+2,c);
            }
        }
   

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

//========================================================================
// 函数: u16    Get_ADC10bitResult(u8 channel)
// 描述: 查询法读一次ADC结果.
// 参数: channel: 选择要转换的ADC.
// 返回: 10位ADC结果.
// 版本: V1.0, 2012-10-22
//========================================================================
u16 Get_ADC10bitResult(u8 channel)  //channel = 0~7
{
    ADC_RES = 0;
    ADC_RESL = 0;

    ADC_CONTR = (ADC_CONTR & 0xe0) | 0x08 | channel;    //start the ADC
    _nop_();
    _nop_();
    _nop_();
    _nop_();

    while((ADC_CONTR & 0x10) == 0)  ;   //wait for ADC finish
    ADC_CONTR &= ~0x10;     //清除ADC结束标志
    return  (((u16)ADC_RES << 2) | (ADC_RESL & 3));
}



1

路过

鸡蛋
1

鲜花

握手

雷人

刚表态过的朋友 (2 人)

评论 (0 个评论)

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

Powered by 单片机教程网

返回顶部