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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1967|回復: 8
打印 上一主題 下一主題
收起左側

我這個程序有個bug就是倒數到4482得時候直接變成4480了,沒有經過4481.請問一下是....

[復制鏈接]
跳轉到指定樓層
樓主
ID:490950 發表于 2019-5-26 09:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar number[4],a;
uint num=4500,cen;
void time()
{
TMOD=0x01;
TH0=0xfc;
TL0=0x67;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
time();
while(1)
{
  if(cen>1000)
  {
   cen=0;
   number[0]=seg[num%10];
   number[1]=seg[num/10%10];
   number[2]=seg[num/100%10];
   number[3]=seg[num/1000%10];
   num--;
   if(num==4480)
   {
    number[0]=seg[4480%10];
    number[1]=seg[4480/10%10];
    number[2]=seg[4480/100%10];
    number[3]=seg[4480/1000%10];
    while(1);
   
   }
  }
}
}
void timer() interrupt 1
{
uchar i;
TH0=0XFC;
TL0=0X67;
cen++;
switch(i)
{
  case 0:P1=0x01;i++;P0=number[0];break;
  case 1:P1=0x02;i++;P0=number[1];break;
  case 2:P1=0x04;i++;P0=number[2];break;
  case 3:P1=0x08;i=0;P0=number[3];break;
}
}

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

使用道具 舉報

沙發
ID:94031 發表于 2019-5-26 10:24 | 只看該作者
實際上有num=4481這個過程,只是停的時間短,沒有觀測到。
回復

使用道具 舉報

板凳
ID:487604 發表于 2019-5-26 10:37 | 只看該作者
你把:while(1)
{
  if(cen>1000)
  {
   cen=0;
   number[0]=seg[num%10];
   number[1]=seg[num/10%10];
   number[2]=seg[num/100%10];
   number[3]=seg[num/1000%10];
   num--;
   if(num==4480)
   {
    number[0]=seg[4480%10];
    number[1]=seg[4480/10%10];
    number[2]=seg[4480/100%10];
    number[3]=seg[4480/1000%10];
    while(1);
   
   }
  }
這一段代碼替換成:
while(1)
{
  if(cen>1000)
  {
   cen=0;
   if(num>4480)
   {
     number[0]=seg[num%10];
     number[1]=seg[num/10%10];
     number[2]=seg[num/100%10];
     number[3]=seg[num/1000%10];
     num--;
   }
   else
   {
     number[0]=seg[4480%10];
     number[1]=seg[4480/10%10];
     number[2]=seg[4480/100%10];
     number[3]=seg[4480/1000%10];
     while(1);
   }
  }


回復

使用道具 舉報

地板
ID:541189 發表于 2019-5-26 10:50 來自手機 | 只看該作者
這個問題我也遇到過,應該是定時太短,if還沒檢測到,定時中斷里的cen又執行了加動作,所以一直執行不了!
回復

使用道具 舉報

5#
ID:213173 發表于 2019-5-26 11:00 | 只看該作者
num--;放的位置不當,4481的過程是有的,只是時間太短暫,你看不到而已。
void main()
{
        time();
        while(1)
        {
                if(cen>1000)
                {
                        cen=0;
                        num--;
                        number[0]=seg[num%10];
                        number[1]=seg[num/10%10];
                        number[2]=seg[num/100%10];
                        number[3]=seg[num/1000%10];

                        if(num==4480)
                        {
                                number[0]=seg[4480%10];
                                number[1]=seg[4480/10%10];
                                number[2]=seg[4480/100%10];
                                number[3]=seg[4480/1000%10];
                                while(1);
                        }
                }
        }
}
回復

使用道具 舉報

6#
ID:105364 發表于 2019-5-26 12:19 | 只看該作者
改成 if(num==4479) 就能顯示4481
因為你的顯示是在 num-- 之前 ,所以這里要多減1
另外,if(num==4479)
   {
    //number[0]=seg[4480%10]; //因為已經顯示4480了,所以可以不用這幾條
    //number[1]=seg[4480/10%10];
   // number[2]=seg[4480/100%10];
   // number[3]=seg[4480/1000%10];
    while(1);
   
   }
回復

使用道具 舉報

7#
ID:105364 發表于 2019-5-26 12:26 | 只看該作者
wulin 發表于 2019-5-26 11:00
num--;放的位置不當,4481的過程是有的,只是時間太短暫,你看不到而已。
void main()
{

num放到前面,有個問題,上電是顯示4499而不是4500
回復

使用道具 舉報

8#
ID:213173 發表于 2019-5-26 13:49 | 只看該作者
47okey 發表于 2019-5-26 12:26
num放到前面,有個問題,上電是顯示4499而不是4500

這個問題處理極其簡單,main()程序初始化時就把緩存賦初值即可
void main()
{
        time();
        number[0]=seg[num%10];
        number[1]=seg[num/10%10];
        number[2]=seg[num/100%10];
        number[3]=seg[num/1000%10];
        while(1)
        {
                if(cen>1000)
                {
                        cen=0;
                        num--;
                        number[0]=seg[num%10];
                        number[1]=seg[num/10%10];
                        number[2]=seg[num/100%10];
                        number[3]=seg[num/1000%10];

                        if(num==4480)
                        {
                                number[0]=seg[4480%10];
                                number[1]=seg[4480/10%10];
                                number[2]=seg[4480/100%10];
                                number[3]=seg[4480/1000%10];
                                while(1);
                        }
                }
        }
}
回復

使用道具 舉報

9#
ID:511890 發表于 2019-5-26 16:37 | 只看該作者
最外面的while最前面加個延時就行了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.中文字幕.com| 国产农村妇女精品一区 | 亚洲精品一区在线观看 | 国产欧美一区二区三区日本久久久 | 99热这里都是精品 | 国产一级久久久久 | 欧美在线观看免费观看视频 | 懂色一区二区三区免费观看 | 国产1区2区在线观看 | 欧美日韩精品免费 | 久久成人国产精品 | 国产一区二区电影 | 免费视频一区二区 | aaaaaa大片免费看最大的 | 成人国产精品久久 | 中文精品视频 | 亚洲精品中文字幕中文字幕 | 欧美激情精品久久久久久变态 | 91精品国产综合久久久久久 | 久久综合久久自在自线精品自 | 成人免费视频网站在线观看 | 97久久精品 | 国产一区二区三区四区在线观看 | 欧美在线一区二区视频 | 久久精品视频网站 | 国产精品91久久久久久 | 亚洲精品免费在线观看 | 羞羞的视频在线看 | 午夜资源 | 黄色成人国产 | 午夜精品一区二区三区在线观看 | 99精品视频一区二区三区 | 久久久久亚洲 | 中文字幕中文字幕 | 91国内外精品自在线播放 | 一级做a爰片性色毛片视频停止 | 狠狠操在线| 国产专区视频 | 欧美成人精品一区二区三区 | 久艹av | 黄色精品|