亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

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

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)用按鍵來(lái)控制數(shù)碼管倒數(shù)總是有問(wèn)題 小白求助

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
我在做一個(gè)用按鍵來(lái)控制數(shù)碼管倒數(shù),當(dāng)小時(shí)、分鐘、秒都為零時(shí),報(bào)警響起,大佬們幫忙看一下哪里錯(cuò)了吧,,寫到后面我自己都亂了。。

#include<reg52.h>
sfr P0M0=0x93;
sfr P0M1=0x94;
sfr P1M0=0x91;
sfr P1M1=0x92;
sfr P2M0=0x95;
sfr P2M1=0x96;
sfr P3M0=0xb1;
sfr P3M1=0xb2;
#define fosc 11059200L
#define TO_50ms(65536-50000*(fosx/12000000L))   //50ms定時(shí)參數(shù)
sbit en1=P2^6;                   //個(gè)位  秒
sbit en2=P2^7;                   //十位  秒
sbit en3=P2^5;                   //個(gè)位  分
sbit en4=P2^4;         //十位  分
sbit en5=P2^3;         //個(gè)位  時(shí)
sbit en6=P2^2;         //十位  時(shí)
sbit clear=P1^0;           //清零                           
sbit char display_num,count_in_TO;     //計(jì)數(shù)值、進(jìn)入定時(shí)器的次數(shù)
sbit alert=P3^2;     //報(bào)警輸入
sbit speaker=P0^2;   //報(bào)警輸出
sbit led=P0^0;       //工作指示
/*
共陰級(jí)數(shù)碼管0~9的字形碼
*/
coust unsigned char seg7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int init_port()
{
        //配置P0模式為開(kāi)漏輸出
        P0M1=0xff;
        P0M0=0xff;
        P1M1 |=0x01;                                                          //P1.0輸入
        P1M0 |=0x00;
        P2M1 |=0xc0;
        P2M0 |=0xc0;

        clear=1;
}

bit run_flag;        //工作標(biāo)志
int ms_delay(unsigned int t)
{
         unsigned int i;
        for(t;t>0;t--)                         //外層循環(huán)t次
                for(i=110;i>0;i--);                          //內(nèi)層循環(huán)110次
}
//INTO中斷服務(wù)程序
int INTO_interrupt() interrupt 0
{
        EXO=0;                   //關(guān)INTO中斷
        run_flag=0;
}
int init_int()
{
        ITO=1;                                                //設(shè)置INTO為下降沿觸發(fā)
        EXO=1;                                                //允許INTO中斷
}
int INTO_interrupt() interrupt 1                 
{
        running=~running;     //切換暫停/計(jì)時(shí)
        if(running)
        {                                          //切換為運(yùn)行
                TRO=1;
        }
        else
        {                                          //切換為暫停
                TRO=0;
        }
}
int TimerO_interrupt() interrupt 2
{
        THO=TO_50ms >>8;      //重新初值
        TLO=TO_50ms;
        if((++ count_in_TO)==20) //count_in_TO自加到20.計(jì)時(shí)1s
        {
                count_in_TO=0;
                if((++display_num)==60)
                {                                  //display_num自加1后判斷是否等于60
                        dispaly_num=0;
                }
        }
}
int init_timer()
{
        TMOD=0x09;         //定時(shí)器0模式1,16bit
        THO=TO_50ms >>8;   //THO=TO_50ms/256
        TLO=TO_50ms;       //TLO=TO_50ms%256
        ETO=1;
}
int display1(unsigned char c2,unsigned char c1)
{
        P0=seg7[c2];                     //送入秒十位的段碼
        en2=0;                                         //顯示DS2
        ms_delay(10);
        en1=1;                                         //關(guān)閉DS2

        P0=seg7[c1];                          //送入秒個(gè)位的段碼
        en1=0;                //顯示DS1
        ms_delay(100);
        en1=1;                 //顯示DS1
}
int display2(unsigned char c3,unsigned char c4)
{
        P0=seg7[c3];                     //送入分個(gè)位的段碼
        en3=0;                                         //顯示DS2
        ms_delay(10);
        en1=1;        

        P0=seg7[c4];                     //送入分十位的段碼
        en4=0;                                         //顯示DS2
        ms_delay(10);
        en1=1;        
}
int display3(unsigned char c5,unsigned char c6)
{
        P0=seg7[c5];                     //送入時(shí)個(gè)位的段碼
        en5=0;                                         //顯示DS2
        ms_delay(10);
        en1=1;        

        P0=seg7[c6];                     //送入時(shí)十位的段碼
        e6=0;                                         //顯示DS2
        ms_delay(10);
        en1=1;        
}
int        while(1)                //報(bào)警程序
        {
                if(display3_num=0)
                {                                 //正常運(yùn)行
                        if(display2_num=0)
                        {
                                if(display1_num=0)
                                           speaker=1;
                        }
                }
        }
int while(2)
{
          TR1=0;                                //若按下K1鍵,則定時(shí)器T1關(guān)閉,時(shí)鐘暫停
        if(K2==0)                                //若按下K2鍵
         {
                Delay_ms(10);                //延時(shí)去抖
                if(K2==0)
                {
                        while(!K2);                //等待K2鍵釋放
                        hour++;                //小時(shí)調(diào)整
                        if(hour==24)
                        {
                                hour = 0;
                        }
                }
        }
        if(K3==0)                                //若按下K3鍵
         {
                Delay_ms(10);
                if(K3==0)
                {
                        while(!K3);                //等待K3鍵釋放
                           min++;                //分鐘調(diào)整
                        if(min==60)
                        {
                                min = 0;
                        }               
                }
        }
        if(K4==0)                                //若按下K4鍵
         {
                Delay_ms(10);
                if(K4==0)
                {
                        while(!K4);                //等待K4鍵釋放
                                                   sec++;
                                                if(sec==60)
                                                {
                                                        sec=0;
                                                }
                        TR1=1;                //調(diào)整完畢后,時(shí)鐘恢復(fù)走時(shí)
                        K1_FLAG=0;                //將K1鍵按下標(biāo)志位清0
                }
        }        
}
int while(3)                                         //按鍵
{
        shi=display1_num/10;
        ge=display1_num%10;
        display1(shi,ge);
        shi=ge=0;
        shi=display2_num/10;
        ge=display2_num%10;
        display2(shi,ge);
        shi=ge=0;
        shi=display3_num/10;
        ge=display3_num%10;
        display3(shi,ge);
        //檢測(cè)清零按鍵
        if(clear==0)
        {
                ms_delay(10)
                if(clear==0)
                {                                  //確認(rèn)按下清零按鈕
                        if(!running)   //如果處于暫停狀態(tài)
                        display=0;
                }
        }
}
int while(4)
{
        int num;
        num=display3*3600+display*60+display;
        if(num==0)
        {
                speaker=1;
        }
        else
        {
                display3_num=num/3600;
                display2_num=(num%3600)/60;
                display1_num=(num%3600)%60;

        }
        
}
main()
{
        //配置端口模式
        P0M1=0x03;              //P0.1、P0.0輸出
        P0M0=0x03;
        P3M1=0x04;                            //P3.2輸入
        P3M0=0x00;

        unsigned char shi,ge;          //定義十位、個(gè)位要輸出的數(shù)據(jù)
        init_port();
        init_int();
        init_timer();

        display1_num=0;
        display2_num=0;
        display3_num=0;
        count_in_TO=0;
        running=0;
        //把兩個(gè)數(shù)碼管都關(guān)閉
        en2=1;
        en1=1;


        ITO=0;      //設(shè)置INTO為低電平觸發(fā)
        EXO=1;      //允許INTO中斷
        EA=1;       //開(kāi)總中斷

        while(2)                 //按鍵
        while(4)                 //倒數(shù)
        while(3)                 //暫停

        alert=1;
        speaker=1;

        while(1)
        
}

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

使用道具 舉報(bào)

沙發(fā)
ID:123289 發(fā)表于 2017-10-8 00:25 | 只看該作者
學(xué)會(huì)先畫程序流程圖、框圖,再按圖寫程序,就不會(huì)亂了。
回復(fù)

使用道具 舉報(bào)

板凳
ID:236614 發(fā)表于 2017-10-8 08:28 | 只看該作者
調(diào)用的函數(shù)全部錯(cuò)誤,程序上太多while,while會(huì)給你放坑,而且while也不是那樣用的。
回復(fù)

使用道具 舉報(bào)

地板
ID:237524 發(fā)表于 2017-10-8 09:35 | 只看該作者
yzwzfyz 發(fā)表于 2017-10-8 00:25
學(xué)會(huì)先畫程序流程圖、框圖,再按圖寫程序,就不會(huì)亂了。

嗯嗯,,,好的,,我試試啊
回復(fù)

使用道具 舉報(bào)

5#
ID:111634 發(fā)表于 2017-10-8 15:18 | 只看該作者
實(shí)例96  能預(yù)置初值的倒計(jì)時(shí)秒表
Proteus仿真一下,確認(rèn)有效。
實(shí)例96 能設(shè)置初值的倒計(jì)時(shí)秒表.rar (40 KB, 下載次數(shù): 5)

以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,書中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,電路與程序真實(shí)可靠可信可行,程序語(yǔ)句條條有注解。若需99.99秒,硬件電路增加一位595。軟件程序增加0.01s10ms計(jì)數(shù)器,并修改相應(yīng)計(jì)數(shù)顯示程序。仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購(gòu)買。
回復(fù)

使用道具 舉報(bào)

6#
ID:237812 發(fā)表于 2017-10-8 15:23 | 只看該作者
你這個(gè)在主程序用while(2),這個(gè)是死循環(huán),按鍵怎么能得到處理。程序怪怪的
回復(fù)

使用道具 舉報(bào)

7#
ID:237524 發(fā)表于 2017-10-25 21:34 | 只看該作者
zl2168 發(fā)表于 2017-10-8 15:18
實(shí)例96  能預(yù)置初值的倒計(jì)時(shí)秒表
先Proteus仿真一下,確認(rèn)有效。
以上摘自張志良編著《80C51單片機(jī)仿真設(shè) ...

嗯嗯,,謝謝大佬費(fèi)心了。我看看啊
回復(fù)

使用道具 舉報(bào)

8#
ID:212797 發(fā)表于 2017-10-27 12:31 | 只看該作者
程序里面的int while(2)這些是什么?函數(shù)嗎?感覺(jué)有些怪
回復(fù)

使用道具 舉報(bào)

9#
ID:242454 發(fā)表于 2017-10-27 13:48 | 只看該作者
這個(gè)程序真心有點(diǎn)看不大懂,程序?qū)懙奶侠?nbsp;  ,WHILE里面?zhèn)數(shù)值 那肯定是進(jìn)私循環(huán)了,

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表