久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2361|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

萌新提問(wèn):STC51單片機(jī)如何根據(jù)電池中電壓的大小來(lái)控制LED亮暗的個(gè)數(shù)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:811125 發(fā)表于 2020-8-9 15:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
      我?guī)煾到o我布置了一個(gè)任務(wù)(如下),我自己編寫了一段代碼(如下),但是只能和一個(gè)給定的電壓值進(jìn)行比較,但是我不知道怎么樣和多個(gè)給定的電壓值進(jìn)行,比較,有沒(méi)有懂哥告訴我一下呀。        利用stc15w204S內(nèi)部的比較器,設(shè)計(jì)一款3.7V電壓比較器,用來(lái)判斷電池電壓,用4顆LED作為電量指示燈。
當(dāng)電池電壓大于3.3V顯示1顆LED,
電壓大于3.4V顯示2顆LED,
電壓大于3.5V顯示3顆LED,
電壓大于3.6V顯示4顆LED;


#include        "STC15.h"
#define u8  uint8_t
#define u16 uint16_t
#define u32 uint32_t
typedef unsigned char    uint8_t;
typedef unsigned int     uint16_t;
typedef unsigned long    uint32_t;
sfr CMOCR1  =   0XE6;
sfr CMPCR2  =   0XE7;
#define CMPEN   0x80
#define CMPIE   0x40
#define PIE     0x20
#define NIE     0x10
#define PIS     0x08
#define CMPOE   0x02
#define CMPRES  0x01
#define INVCMPO 0x80
#define DLSFLT  0x40
#define LCDTY   0x3F

void cmp_int() interrupt 21

void main(void)
{
    unsigned int j=0;
          P4^6=0;
          CMOCR1=0;
          CMPCR2=0;
          PIS=0;
          NIS=0;
          CMPOE=0;
          INVCMPO=0;
          DISFLT=0;
          CMPCR2|=(DISFLT&0x10);
          PIE=1;
          CMPEN=1;
          EA=1;
          while(1)
                {
      if((CMPCR1&0x01)==0)
                        {
        P4^6=1;
      }
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2020-8-9 20:59 | 只看該作者
最好用有內(nèi)置ADC的芯片,例如15WS404AS。非得用STC15W204S那只能模擬ADC功能,把下面程序的串口發(fā)送部分改成LED顯示即可。
/*------------------------------------------------------------------*/
/* --- STC MCU International Limited -------------------------------*/
/* --- STC 1T Series MCU RC Demo -----------------------------------*/
/* --- Mobile: (86)13922805190 -------------------------------------*/
/* --- Fax: 86-755-82944243 ----------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------*/
/* If you want to use the program or the program referenced in the  */
/* article, please specify in which data and procedures from STC    */
/*------------------------------------------------------------------*/

/*

功能描述: 使用STC15F系列C版本做的RC測(cè)量電壓的例子.

*/
#include "reg51.h"
/********宏定義*******/
#define MAIN_Fosc                22118400L        //定義主時(shí)鐘
#define        uchar        unsigned char
#define uint        unsigned int
/********特殊功能寄存器*******/
sfr AUXR = 0x8e;    //Auxiliary register
sfr P3M1  = 0xB1;        //P3M1.N,P3M0.N         =00--->Standard,        01--->push-pull
sfr P3M0  = 0xB2;        //                                        =10--->pure input,        11--->open drain
/********端口定義*******/
sbit P_TXD1  = P3^1;        //定義模擬串口發(fā)送腳,打印信息用
sbit P_RC = P3^2;                //RC 檢測(cè)端口
/********變量與子程序聲明*******/
uchar        SampleCnt;                //發(fā)送結(jié)果的采樣間隔計(jì)數(shù)
uchar        LineCnt;                //每行顯示結(jié)果計(jì)數(shù)
bit                B_Over;                        //超量程標(biāo)志
bit                B_ADC_OK;                //檢測(cè)完成標(biāo)志
uint        adc;                        //RC做的ADC值

void        RC_start(void);                //RC檢測(cè)開始
void        Tx1Send(uchar dat);        //發(fā)送數(shù)據(jù)
void         InitTimer(void);        //初始化定時(shí)器
void        delay_ms(uchar ms);        //延時(shí)

///////////////////////////////////////////////////////////

void main(void)
{        
        InitTimer();                //初始化定時(shí)器
        P3M1 |=  1 << 2;         //P3.2 開漏模式
        P3M0 |=  1 << 2;
        P_RC = 0;               //RC 檢測(cè)端口

        while (1)
        {
                delay_ms(5);                //放電時(shí)間        
                B_ADC_OK = 0;                //清除ADC結(jié)束標(biāo)志        
                B_Over = 0;                        //清除超量程標(biāo)志
                RC_start();         //RC 檢測(cè)開始
                while(!B_ADC_OK && !B_Over);        //等待ADC結(jié)束或超量程
                if(B_ADC_OK)                                        //檢測(cè)完成標(biāo)志為1
                {
                        if(++SampleCnt >= 100)        //1秒鐘發(fā)一個(gè)結(jié)果給串口
                        {
                                SampleCnt = 0;
                                Tx1Send(adc / 10000 + '0');           //send to PC from the UART
                                Tx1Send(adc % 10000 / 1000 + '0');
                                Tx1Send(adc % 1000 / 100 + '0');
                                Tx1Send(adc % 100 / 10 + '0');
                                Tx1Send(adc % 10 + '0');
                                Tx1Send(' ');
                                Tx1Send(' ');
                                if(++LineCnt >= 10)                //10個(gè)結(jié)果后換行
                                {
                                        LineCnt = 0;
                                        Tx1Send(0x0d);   //send CR
                                        Tx1Send(0x0a);
                                }
                        }
                }
        }
}

/***************延時(shí)函數(shù)*****************/
void  delay_ms(uchar ms)
{
        uint i;
        do
        {
                i = MAIN_Fosc / 14000L;        //1T
                while(--i)        ;   //13T per loop
        }while(--ms);
}
/**************** Timer初始化函數(shù) ************/
void InitTimer(void)
{
        TMOD = 0;                //16位自動(dòng)重裝
        TH0  = 0;                //
        TL0  = 0;                //
        TR0  = 0;                //關(guān)定時(shí)器0
        ET0  = 1;                //開定時(shí)器0中斷
        EA   = 1;                //開總中斷
}
/********************* INT0外部中斷函數(shù) *************************/
void INT0_int () interrupt 0                //
{
        if(INT0 && !B_Over)                //上升沿中斷,無(wú)超時(shí)
        {
                TR0 = 0;            //關(guān)定時(shí)器0
                P_RC = 0;           //RC 檢測(cè)端口置0
                adc = TH0;          //讀定時(shí)寄存器高8位數(shù)據(jù)
                adc =(adc<<8)+TL0;        //高8位數(shù)據(jù)+低8位數(shù)據(jù)
                B_ADC_OK = 1;                //標(biāo)志ADC結(jié)束
        }
}
/********************** Timer0中斷函數(shù)************************/
void timer0 (void) interrupt 1
{
        TR0 = 0;        //超量程關(guān)閉
        B_Over = 1;        //標(biāo)志超量程
}
/**************** RC啟動(dòng)函數(shù) ******************************/
void RC_start()
{                                       //使用定時(shí)器0計(jì)時(shí)
        TH0 = 0;            //計(jì)數(shù)寄存器清0
        TL0 = 0;
        B_Over = 0;                        //超時(shí)標(biāo)志清0
        P_RC = 1;           //RC 檢測(cè)端口置1
        TR0 = 1;            //開啟定時(shí)器
        IE0 = 0;                        //外部中斷0請(qǐng)求標(biāo)志清0
        EX0 = 1;                        //INT0 開外中斷
        IT0 = 0;                        //INT0 上升/下降沿均可觸發(fā)中斷        
}
/********************** 模擬串口相關(guān)函數(shù)************************/

void BitTime(void)        //位時(shí)間函數(shù)
{
        uint i;
        i = ((MAIN_Fosc / 100) * 104) / 130000L - 1;                //根據(jù)主時(shí)鐘來(lái)計(jì)算位時(shí)間
        while(--i);
}

//模擬串口發(fā)送
void Tx1Send(uchar dat)                //9600,N,8,1                發(fā)送一個(gè)字節(jié)
{
        uchar        i;
        EA = 0;
        P_TXD1 = 0;
        BitTime();
        for(i=0; i<8; i++)
        {
                if(dat & 1)
                        P_TXD1 = 1;
                else
                        P_TXD1 = 0;
                dat >>= 1;
                BitTime();
        }
        P_TXD1 = 1;
        EA = 1;
        BitTime();
        BitTime();
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2020-8-10 13:30 | 只看該作者
改行吧,不太適合學(xué)這個(gè)專業(yè)。
回復(fù)

使用道具 舉報(bào)

地板
ID:811125 發(fā)表于 2020-8-12 15:47 | 只看該作者
wulin 發(fā)表于 2020-8-9 20:59
最好用有內(nèi)置ADC的芯片,例如15WS404AS。非得用STC15W204S那只能模擬ADC功能,把下面程序的串口發(fā)送部分改 ...

謝謝您!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久av | 九九九精品视频 | 欧美xxxx网站 | 麻豆久久久9性大片 | 欧美h视频| 国产亚洲欧美在线 | 久久99精品久久 | 国产大毛片 | eeuss国产一区二区三区四区 | 国产免费一区二区 | 国产精品久久av | 99久久久无码国产精品 | 成人免费毛片片v | 国产男女猛烈无遮掩视频免费网站 | 久久久国产一区二区三区 | 网页av | 国产免费一区二区 | 日本免费一区二区三区 | 日韩精品中文字幕在线 | 欧美日韩一 | 久久免费精品 | 欧美一区永久视频免费观看 | 成人性生交大片 | 亚洲精品欧美一区二区三区 | 国产日韩久久久久69影院 | 极品销魂美女一区二区 | av手机在线播放 | 97av视频| 精品国产欧美 | 国产自产21区 | 日韩美女一区二区三区在线观看 | 老外几下就让我高潮了 | 久久久久av | 一区视频 | 综合激情久久 | 18性欧美| 久久噜噜噜精品国产亚洲综合 | 日韩在线精品强乱中文字幕 | 一区二区三区免费 | 中文字幕91av | 国产精品成人国产乱一区 |