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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教:單片機數(shù)碼管位選問題和3秒后執(zhí)行判斷的問題

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:487930 發(fā)表于 2019-3-14 09:59 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我做一個根據(jù)液體壓力值進行電機相應(yīng)的實驗。
當壓力小于8MPa時電機啟動,啟動3秒后壓力沒有上升就報警。
當壓力大于12MPa時電機停止。
暫時用一個指示燈來模擬電機。用可調(diào)電阻模擬壓力輸入。
程序如下:

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit CLK=P1^3;
sbit ST=P1^2;
sbit EOC=P1^1;
sbit OE=P1^0;
sbit LED=P1^7;    //指示燈

sbit L1=P2^0;
sbit L2=P2^1;
sbit L3=P2^2;
sbit L4=P2^3;

sbit LED2=P2^7;

void DelayMS(uint ms)
{
        uchar i;
        while(ms--)
                for(i=0;i<120;i++);
}
/******************顯示采集的電壓**********************************/
void Display_Result(uint d)
{
        L1=0;L2=1;L3=1;L4=1;   //P2=0xf7;     //1111 0111最右邊的數(shù)碼管顯示
        P0=DSY_CODE[d%10];           
        DelayMS(5);
        
        L1=1;L2=0;L3=1;L4=1;    //P2=0xfb;     //左邊第三個數(shù)碼管  1111 1011
        P0=DSY_CODE[d%100/10];           
        DelayMS(5);
        
        L1=1;L2=1;L3=0;L4=1;     //P2=0xfd;     //左邊第二個數(shù)碼管  1111 1101
        P0=DSY_CODE[d%1000/100]|0x80;   //加小數(shù)點顯示
        DelayMS(5);
        
        L1=1;L2=1;L3=1;L4=0;    //P2=0xfe;     //左邊第一個數(shù)碼管  1111 1110
        P0=DSY_CODE[d/1000];   
        DelayMS(5);

/*        if(d>=600 && d<=1000)
                { LED2=0;DelayMS(5);}
          else
                   LED2=1;  
*/
}

void main()
{
        uint temp;

        TMOD=0x02;
        TH0=0x14;
        TL0=0x00;
        IE=0x82;
        TR0=1;
        
        P1=0xbf; //通道選擇  ABC=110表示選IN3為輸入端 1011 1111 其中0對應(yīng)的是C

        while(1)
        {
                ST=0;ST=1;ST=0;    //ADC啟動
                while(EOC==0);       //空循環(huán);轉(zhuǎn)換結(jié)束信號,沒結(jié)束時EOC一直為0,轉(zhuǎn)換結(jié)束為高電平
               
                OE=1;                //輸出使能
                temp=P3*1.0/255*500;     //ADC0808輸出和輸入之間的關(guān)系,P3是輸出值,temp是輸入值0-5V
                temp=3.4*temp;       //轉(zhuǎn)換為壓力顯示,有可能是4位數(shù)
                Display_Result(temp);

                //如果壓力小于8M,啟動電機,啟動后3秒,如果壓力沒有上升,就報警。如果壓力大于12MPa,電機停止。
                if(temp<=800)
                { LED=0;   
                           //保存啟動時的壓力值
                           //保存啟動時的時間
                }
                if(temp>=1200)
                        LED=1;

                OE=0;       //IF判斷必須加在“使能”的中間,否則P3沒有值了
        }
}

void Timer0_INT() interrupt 1
{
        CLK=~CLK;
}


現(xiàn)在的問題是:
1、指示燈接在P1.7可以正常實現(xiàn)效果。但是接在P2.7就不正常,只閃一下或者不停的閃爍。我想應(yīng)該是在數(shù)碼管位選時給的值導(dǎo)致的,如P2=0xfb  實際上把P1.7給置1(熄滅)了。
然后我把位選改成了只給定位選的4個端口,其它不賦值,但是P1.7還是不常亮,即使我在主程序開始給P2.7=0都不行,為什么?
2、啟動3秒后,如果壓力沒有上升就報警。  怎么實現(xiàn)?是不是要用到定時器?(定時器我還不是很理解)
首先要保存電機啟動時的壓力和時間,然后計時3秒,再比較當前壓力和保存的壓力。但是這個計時不能再用delay來實現(xiàn)了吧,delay好像是整個進程都停止的吧?

如果P2剩下的端口我不能用,好像沒有端口用來報警了?

位選問題.png (32.9 KB, 下載次數(shù): 26)

位選問題.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:96682 發(fā)表于 2019-3-14 11:04 | 只看該作者
程序上 P2 端口設(shè)置與 LED2 有沖突,位顯用 4 個就行
回復(fù)

使用道具 舉報

板凳
ID:487930 發(fā)表于 2019-3-14 12:14 | 只看該作者
本帖最后由 wtm_lxy 于 2019-3-14 15:44 編輯
wc86110 發(fā)表于 2019-3-14 11:04
程序上 P2 端口設(shè)置與 LED2 有沖突,位顯用 4 個就行

我把位選改成這樣了:L1=0;L2=1;L3=1;L4=1;   //P2=0xf7;  
但是D2還是 不常亮,不知道為什么?
回復(fù)

使用道具 舉報

地板
ID:234075 發(fā)表于 2019-3-14 16:23 | 只看該作者
1、你設(shè)置了兩個LED,分別是P17和P27,沖突時自己造成的,和數(shù)碼管的位選沒有關(guān)系,因為你的位選是單獨設(shè)置的L1\L2\L3\L4而不是直接對P2的操作,所以P2的其他幾個IO口是可以正常使用的;
2、使用定時器中斷是最好的選擇,主函數(shù)中設(shè)置定時器中斷(暫不啟動)--循環(huán)檢測到壓力小于8MPa時電機啟動,同時啟動定時器開始計時--計時達到3秒且壓力沒有上升,則報警并停止中斷(累加計時變量清零)
。這樣的程序最好自己先畫一個流程圖,然后按照流程圖進行程序的設(shè)計。

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

5#
ID:213173 發(fā)表于 2019-3-14 17:12 | 只看該作者
/******************顯示采集的電壓**********************************/
//不影響P2高4位狀態(tài)的寫法
void Display_Result(uint d)
{
        static uint count=0;
        static uchar i=0;
        if(++count>=500)//不影響其他程序運行的計數(shù)延時
        {
                count=0;
                P0=0x00;//消隱
                switch(i)
                {
                        case 0: P2&=0xf0;P2|=0xf7;P0=DSY_CODE[d%10];i++; break;
                        case 1: P2&=0xf0;P2|=0xfb;P0=DSY_CODE[d%100/10];i++; break;
                        case 2: P2&=0xf0;P2|=0xfd;P0=DSY_CODE[d%1000/100]|0x80;i++; break;
                        case 3: P2&=0xf0;P2|=0xfe;P0=DSY_CODE[d/1000];i=0; break;
                }
        }
}
回復(fù)

使用道具 舉報

6#
ID:487930 發(fā)表于 2019-3-15 08:23 | 只看該作者
zhb2004xp 發(fā)表于 2019-3-14 16:23
1、你設(shè)置了兩個LED,分別是P17和P27,沖突時自己造成的,和數(shù)碼管的位選沒有關(guān)系,因為你的位選是單獨設(shè)置 ...

1、不好意思,這個沖突應(yīng)該是沒有的了。我修改了單片機中的程序引用目錄,忘記更新對應(yīng)關(guān)系了,所以修改了程序?qū)嶋H上沒有生效。
2、定時器我試試看,還需要更努力的學習。

非常感謝您的回復(fù)。
回復(fù)

使用道具 舉報

7#
ID:487930 發(fā)表于 2019-3-15 08:47 | 只看該作者
wulin 發(fā)表于 2019-3-14 17:12
/******************顯示采集的電壓**********************************/
//不影響P2高4位狀態(tài)的寫法
voi ...

非常感謝您的回復(fù)。
意思大概看懂了。
每計數(shù)500(延時多少?)就顯示一個數(shù)字
4個數(shù)字顯示完后,再循環(huán)。

順便請教一下:
P2&=0xf0;   //P2=P2&0xf0;   邏輯與,高4位不變,低4位清零
P2|=0xf7;    //P2=P2|0xf7;   邏輯或,相加,高4為置1,第4位為7
后面這句還是用邏輯與吧?保持高四位不變,只修改低4位的值
回復(fù)

使用道具 舉報

8#
ID:213173 發(fā)表于 2019-3-15 09:48 | 只看該作者
wtm_lxy 發(fā)表于 2019-3-15 08:47
非常感謝您的回復(fù)。
意思大概看懂了。
每計數(shù)500(延時多少?)就顯示一個數(shù)字

1.《每計數(shù)500(延時多少?)就顯示一個數(shù)字 》由于顯示程序被主程序調(diào)用,主循環(huán)周期基本固定,所以每計數(shù)500延時多少不確定,這只是看你的程序做的估計,實際調(diào)試時以數(shù)碼管不閃爍為準。一般在500us~2ms之間為宜。
2.邏輯與:&&,邏輯或:||,按位與:&、按位或:|。
P2&=0xf0;   //P2=P2&0xf0;   xxxx 0000
P2|=0xf7;    //P2=P2|0xf7;   xxxx 0111
回復(fù)

使用道具 舉報

9#
ID:491172 發(fā)表于 2019-3-15 10:28 | 只看該作者
從圖上可以看出,你p2.7是高電平,你這樣怎么能點亮二極管呢?應(yīng)該是p2.7是低電平才對.
好好再想一想,重敲一下代碼!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人a视频在线观看 | 亚洲综合色视频在线观看 | av天天爽| 欧洲精品在线观看 | 久久精品国产久精国产 | 性网站免费 | 久久久久久成人 | 成人在线免费视频 | 一级二级三级黄色 | 国产91在线 | 欧美 | 亚洲国产中文字幕 | 亚洲欧洲国产视频 | 国产在线精品区 | 黄色在线免费网站 | 中文久久| 日本在线视频一区二区 | 国产精品久久精品 | 久久中文字幕一区 | 国产精品久久久久久久久久久久 | 国产精品99999999 | 精品国产精品国产偷麻豆 | h视频免费在线观看 | 国产高清精品一区二区三区 | www.久| 色接久久 | 日韩一区二区三区在线看 | 国产精品国产精品国产专区不卡 | 久久在线精品 | 国产精品久久久久久久久久久久久 | 黄视频网站免费观看 | 欧美日韩精品在线一区 | 亚洲国产一区在线 | 亚洲狠狠爱一区二区三区 | 欧美激情va永久在线播放 | 国产一级毛片视频 | 二区中文字幕 | 中文字幕亚洲欧美 | 日本三级黄视频 | 久久一区| 999免费网站 | 久久久精品一区二区三区 |