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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機60s倒計時程序為什么不能顯示?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:72649 發(fā)表于 2024-5-19 07:40 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
//60s倒計時
#include"stc8.h"
#include "intrins.h"

#define  uint unsigned int
#define  uchar unsigned char   

#define  SEG P1

sbit SCON1 = P3^7;            
sbit SCON2 = P3^6;   

sbit KEY = P3^2;

uchar count=0;
char num=60,ge,shi;
uchar flag;

uchar code table[]={      
        0x03,/*0*/
        0x9F,/*1*/
        0x25,/*2*/
        0x0D,/*3*/
        0x99,/*4*/
        0x49,/*5*/
        0x41,/*6*/
        0x1F,/*7*/
        0x01,/*8*/
        0x09,/*9*/};

void T0_init()                                //5毫秒@11.0592MHz
{
        AUXR &= 0x7F;                        //定時器時鐘12T模式
        TMOD &= 0xF0;                        //設(shè)置定時器模式
        TMOD |= 0x01;                        //設(shè)置定時器模式
        TL0 = 0x00;                                //設(shè)置定時初始值
        TH0 = 0xEE;                                //設(shè)置定時初始值
        TF0 = 0;                                //清除TF0標志
        TR0 = 1;                           
        ET0 = 1;                                //使能定時器0中斷
        EA = 1;
}

void IO_init()
{
    P3M0 = 0x00; P3M1 = 0x00;
    P1M0 = 0xff; P1M1 = 0x00;

}

void TM0_Isr() interrupt 1 //5毫秒
{
        TL0 = 0x00;                                //設(shè)置定時初始值
        TH0 = 0xEE;                                //設(shè)置定時初始值
        flag++;
        if (flag=20)
        {
        flag=0;
                num--;
                if (flag=0)
        {
        flag=60;
        }
}
}

void main()
{
IO_init();
T0_init() ;
        while (1)
  {
                SEG=0xff;
                shi=num/10;
                ge=num%10;
                switch (count)
    {
            case0:SCON1 = 0;SCON2=1; SEG = table[ge];
                    break;
            case1:SCON1 = 1;SCON2=0; SEG = table[shi];
                    break;
            default:
                    break;
    }
                count++;
                if (count>1)count=0;
  }

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

使用道具 舉報

沙發(fā)
ID:1109793 發(fā)表于 2024-5-19 10:19 | 只看該作者
每當flag++到20時,flag = 0然后立刻flag=60,然后flag++以后就得等他++到255再變0,重復(fù)++到20時再變60,再重復(fù)。就是大概flag計數(shù)215次num--一次,1075ms減一次,應(yīng)該可以啊。為啥不顯示?是不顯示還是不計時?另外,SEG=0XFF是想消隱,但是你這是共陰的,因為你的SCON是設(shè)置的標準IO,那么只能共陰極了。共陰極的段碼要給0x00才行消隱,你這0xff不是一直亮著嗎?還有掃描切換不要放到主循環(huán),這掃描速度得有多快啊。一個位的顯示時間可能太短了。消隱也可以把兩個SCON都置1。
回復(fù)

使用道具 舉報

板凳
ID:619259 發(fā)表于 2024-5-19 11:23 | 只看該作者
原程序有多處錯誤:1.  if (flag=20),應(yīng)改為 if (flag==200)
2.  動態(tài)刷新時間太快,需合理設(shè)置count++的時間間隔
3.  case0、case1應(yīng)為case 0、case 1
……
程序修改如下,僅供參考:
void TM0_Isr() interrupt 1 //5毫秒
{
        TL0 = 0x00;           //設(shè)置定時初始值
        TH0 = 0xEE;           //設(shè)置定時初始值
        flag++;
        if(flag==200)
        {
                flag=0;
                num--;
                if (num==0)
                {
                    num=60;
                       }
         }

        //動態(tài)掃描刷新周期為10毫秒
        count++;
             if (count>1)
             {
                       count=0;
             }
}

void main()
{
        IO_init();
        T0_init() ;
        while(1)
          {
                shi=num/10;
                ge=num%10;
                SCON1 = 1;  SCON2 = 1;  //消隱
                switch(count)
                    {
                            case 0:  SCON1 = 1;  SCON2 = 0;  SEG = table[ge];  break;
                            case 1:  SCON1 = 0;  SCON2 = 1;  SEG = table[shi]; break;
                            default: break;
                    }
          }
}


回復(fù)

使用道具 舉報

地板
ID:72649 發(fā)表于 2024-5-19 13:43 | 只看該作者
xiaobendan001 發(fā)表于 2024-5-19 10:19
每當flag++到20時,flag = 0然后立刻flag=60,然后flag++以后就得等他++到255再變0,重復(fù)++到20時再變60, ...

共陽數(shù)碼管

51hei圖片_20240518215731.png (53.96 KB, 下載次數(shù): 35)

51hei圖片_20240518215731.png
回復(fù)

使用道具 舉報

5#
ID:72649 發(fā)表于 2024-5-19 13:44 | 只看該作者
xiaobendan001 發(fā)表于 2024-5-19 10:19
每當flag++到20時,flag = 0然后立刻flag=60,然后flag++以后就得等他++到255再變0,重復(fù)++到20時再變60, ...

void TM0_Isr() interrupt 1 //5毫秒
{
        TL0 = 0x00;                                //設(shè)置定時初始值
        TH0 = 0xEE;                                //設(shè)置定時初始值
        flag++;
        if (flag=20)
        {
        flag=0;
                num--;
                if (num=0)
        {
        num=60;
        }
}
}
回復(fù)

使用道具 舉報

6#
ID:72649 發(fā)表于 2024-5-19 13:48 | 只看該作者
xiaobendan001 發(fā)表于 2024-5-19 10:19
每當flag++到20時,flag = 0然后立刻flag=60,然后flag++以后就得等他++到255再變0,重復(fù)++到20時再變60, ...

//倒計時
#include"stc8.h"
#include "intrins.h"

#define  uint unsigned int
#define  uchar unsigned char   

#define  SEG P1

sbit SCON1 = P3^7;            
sbit SCON2 = P3^6;   
  
sbit KEY = P3^2;

uchar count=0;
char num=60,ge,shi;
uchar flag;

uchar code table[]={      
        0x03,/*0*/
        0x9F,/*1*/
        0x25,/*2*/
        0x0D,/*3*/
        0x99,/*4*/
        0x49,/*5*/
        0x41,/*6*/
        0x1F,/*7*/
        0x01,/*8*/
        0x09,/*9*/};

void T0_init()                                //5毫秒@11.0592MHz
{
        AUXR &= 0x7F;                        //定時器時鐘12T模式
        TMOD &= 0xF0;                        //設(shè)置定時器模式
        TMOD |= 0x01;                        //設(shè)置定時器模式
        TL0 = 0x00;                                //設(shè)置定時初始值
        TH0 = 0xEE;                                //設(shè)置定時初始值
        TF0 = 0;                                //清除TF0標志
        TR0 = 1;                           
        ET0 = 1;                                //使能定時器0中斷
        EA = 1;
}

void IO_init()
{
    P3M0 = 0x00; P3M1 = 0x00;
    P1M0 = 0xff; P1M1 = 0x00;

}

void TM0_Isr() interrupt 1 //5毫秒
{
        TL0 = 0x00;                                //設(shè)置定時初始值
        TH0 = 0xEE;                                //設(shè)置定時初始值
        flag++;
        if (flag=20)
        {
        flag=0;
                num--;
                if (num=0)
        {
        num=60;
        }
}
}

void main()
{
IO_init();
T0_init() ;
        while (1)
  {
                SEG=0;
                shi=num/10;
                ge=num%10;
                switch (count)
    {
            case0:SCON1 = 0;SCON2=1; SEG = table[ge];
                    break;
            case1:SCON1 = 1;SCON2=0; SEG = table[shi];
                    break;
            default:
                    break;
    }
                count++;
                if (count>1)count=0;
  }

}



















回復(fù)

使用道具 舉報

7#
ID:72649 發(fā)表于 2024-5-19 13:50 | 只看該作者
hjx5548 發(fā)表于 2024-5-19 13:44
void TM0_Isr() interrupt 1 //5毫秒
{
        TL0 = 0x00;                                //設(shè)置定 ...

這樣也不能顯示?
回復(fù)

使用道具 舉報

8#
ID:1109793 發(fā)表于 2024-5-19 17:28 | 只看該作者

共陽極的那你得吧兩個SCON設(shè)置為推挽才行啊。要不然標準IO的高電平電流同時點亮8個段,即使亮也幾乎看不到吧。消隱要讓SCON=0,輸出SEG之后再把對應(yīng)的SCON=1
回復(fù)

使用道具 舉報

9#
ID:619259 發(fā)表于 2024-5-19 20:08 | 只看該作者

共陽的數(shù)碼管,你用共陰的代碼,提問之前請先說明清楚。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产在线观看网站 | 国产精品福利网站 | 国产欧美一区二区三区日本久久久 | 久久久精 | 欧美日韩不卡 | 手机av免费在线 | 国产美女视频黄a视频免费 国产精品福利视频 | 波多野结衣精品在线 | 精品麻豆剧传媒av国产九九九 | 久久99精品国产 | 久草热在线 | 亚洲成av人片在线观看无码 | 97在线超碰 | 久久精品亚洲欧美日韩精品中文字幕 | 干出白浆视频 | 一区二区三区不卡视频 | 欧美精品一区二区免费 | 国产精品一二三区 | 日韩插插| 日本中文字幕视频 | 欧美一级视频在线观看 | 亚洲综合大片69999 | 99亚洲精品 | 免费一看一级毛片 | 亚洲视频免费观看 | 久久国内 | 国产精品1 | 国产精品久久久久久一级毛片 | 国产精品欧美一区二区三区 | 亚洲欧美激情视频 | 亚洲综合成人网 | 精品欧美一区二区精品久久久 | 中文字幕男人的天堂 | 精品一区二区三区在线观看 | 欧美日韩国产一区二区三区 | 国产情侣啪啪 | 欧美成人一区二区三区 | 久久久女| 九九综合 | 日韩精品一区二区在线观看 | 日韩一二三区视频 |