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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2597|回復: 7
收起左側

求教大神,為什么這個單片機程序千位和百位顯示不出來,感覺邏輯上沒問題。

[復制鏈接]
ID:702446 發表于 2020-3-4 17:53 來自手機 | 顯示全部樓層 |閱讀模式
#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char



uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,    //定義編碼表數組//

                              0x7d,0x07,0x7f,0x6f,0x77,0x7c,

                              0x39,0x5e,0x79,0x71,0x00     };

sbit dula=P2^6;

sbit wela=P2^7;

uchar wei;

uint temp,t;

uint qian,bai,shi,ge;                                                   //定義變量

void display(uint qian,bai,shi,ge);                                //顯示函數聲明

void delay(uint);                                                        //延時函數申明

void init();                                                                 //初始化函數申明



void main()

{

        init();

        

        while(1)

        {

               

                if(t==20)

                        {

                         t=0;

                         temp++;

                         if(temp==3600)

                                 temp=0;

                         qian=temp/1000;                                //分離參數

                         bai=temp%1000/100;

                         shi=temp%1000%100/10;

                            ge=temp%10;

                        }

                 

                 display(qian,bai,shi,ge);                               //調用顯示函數

                        

                        

        }

}



void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

         for(y=110;y>0;y--);

}



void display(uint qian,bai,shi,ge)

{

        

        if(temp<10)

                wei='a';

    else if(10<=temp<100)

                wei='b';

        else if(100<=temp<1000)

                wei='c';

        else if(1000<=temp<10000)

                wei='d';

        switch(wei)

        {

         case 'a':              wei=0;

                                                 dula=1;

                                                P0=table[ge];

                                                dula=0;

                                                        P0=0xff;

                                                wela=1;

                                                P0=0x7f;

                                                wela=0;

                                                delay(5);break;

        

         case 'b':          wei=0;

                                                 dula=1;

                                                P0=table[shi];

                                                dula=0;

                                                        P0=0xff;

                                                wela=1;

                                                P0=0xbf;

                                                wela=0;

                                                delay(5);        

                                

        

                                                dula=1;

                                                P0=table[ge];

                                                dula=0;

                                                        P0=0xff;

                                                wela=1;

                                                P0=0x7f;

                                                wela=0;         

                                                delay(5);break;

                                       



          case'c':                wei=0;

                                                  wela=1;

                                                P0=0xdf;

                                                wela=0;

                            dula=1;

                                                P0=table[bai];

                                                dula=0;

                                                        P0=0xff;

                                                delay(5);



                                       

                                                dula=1;

                                                P0=table[shi];

                                                dula=0;

                                                        P0=0xff;

                                                wela=1;

                                                P0=0xbf;

                                                wela=0;

                                                delay(5);



                                       

                                                dula=1;

                                                P0=table[ge];

                                                dula=0;

                                                        P0=0xff;

                                                wela=1;

                                                P0=0x7f;

                                                wela=0;

                                                delay(5);break;

                                          

          case 'd':                wei=0;

                                                  dula=1;

                                                P0=table[qian];

                                                dula=0;

                                                        P0=0xff;

                                                wela=1;

                                                P0=0xef;

                                                wela=0;

                                                delay(5);



                                       

                                                dula=1;

                                                P0=table[bai];

                                                dula=0;

                                                        P0=0xff;

                                                wela=1;

                                                P0=0xdf;

                                                wela=0;

                                                delay(5);



                                       

                                                dula=1;

                                                P0=table[shi];

                                                dula=0;

                                                        P0=0xff;

                                                wela=1;

                                                P0=0xbf;

                                                wela=0;

                                                delay(5);



                                       

                                                dula=1;

                                                P0=table[ge];

                                                dula=0;

                                                        P0=0xff;

                                                wela=1;

                                                P0=0x7f;

                                                wela=0;

                                                delay(5);                          break;

                                       

                                       

        }

}        

        

void init()

{

         t=0;

        dula=0;

        wela=0;

        temp=99;

        TMOD=0x01;

        EA=1;

        ET0=1;

        TH0=(65536-50000)/256;

        TL0=(65536-50000)%256;

        TR0=1;

}



void timer0() interrupt 1

{

         TH0=(65536-50000)/256;

        TL0=(65536-50000)%256;

        t++;

}
回復

使用道具 舉報

ID:160500 發表于 2020-3-4 21:11 | 顯示全部樓層
沒有這種寫法的
回復

使用道具 舉報

ID:213173 發表于 2020-3-4 21:18 | 顯示全部樓層
恰恰是因為顯示程序邏輯錯誤才不正常。修改如下:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. uchar code table[]={
  7. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,//定義編碼表數組
  8. 0x7d,0x07,0x7f,0x6f,0x77,0x7c,
  9. 0x39,0x5e,0x79,0x71,0x00};
  10. uchar wei=0;
  11. uint temp,t;
  12. uint qian,bai,shi,ge;     //定義變量
  13. void display();           //顯示函數聲明
  14. void delay(uint);         //延時函數申明
  15. void init();              //初始化函數申明

  16. void main()
  17. {
  18.         init();
  19.         while(1)
  20.         {
  21.                 if(t==20)
  22.                 {
  23.                         t=0;
  24.                         temp++;
  25.                         if(temp==3600)
  26.                                 temp=0;
  27.                         qian= temp/1000%10;   //分離參數
  28.                         bai = temp/100%10;
  29.                         shi = temp/10%10;
  30.                         ge  = temp%10;
  31.                 }
  32.                 display();//調用顯示函數
  33.         }
  34. }
  35. void delay(uint z)
  36. {
  37.         uint x,y;
  38.         for(x=z;x>0;x--)
  39.                 for(y=110;y>0;y--);
  40. }
  41. void display()
  42. {
  43.         P0=0x00;//消隱
  44.         dula=1;
  45.         dula=0;
  46.         switch(wei)
  47.         {
  48.                 case 0:
  49.                         P0=0xf7;
  50.                         wela=1; //送位碼
  51.                         wela=0; //鎖存
  52.                         P0=table[ge];
  53.                         dula=1; //送段碼
  54.                         dula=0;  //鎖存
  55.                 break;
  56.                 case 1:
  57.                         P0=0xfb;
  58.                         wela=1;
  59.                         wela=0;
  60.                         P0=table[shi];
  61.                         dula=1;
  62.                         dula=0;
  63.                 break;
  64.                 case 2:
  65.                         P0=0xfd;
  66.                         wela=1;
  67.                         wela=0;
  68.                         P0=table[bai];
  69.                         dula=1;
  70.                         dula=0;
  71.                 break;
  72.                 case 3:
  73.                         P0=0xfe;
  74.                         wela=1;
  75.                         wela=0;
  76.                         P0=table[qian];
  77.                         dula=1;
  78.                         dula=0;
  79.         }
  80.         delay(1);
  81.         wei++;
  82.         wei%=4;
  83. }        
  84. void init()
  85. {
  86.         t=0;
  87.         dula=0;
  88.         wela=0;
  89.         temp=99;
  90.         qian= temp/1000%10;
  91.         bai = temp/100%10;
  92.         shi = temp/10%10;
  93.         ge  = temp%10;
  94.         TMOD=0x01;
  95.         TH0=(65536-50000)/256;
  96.         TL0=(65536-50000)%256;
  97.         TR0=1;
  98.         EA=1;
  99.         ET0=1;
  100. }
  101. void timer0() interrupt 1
  102. {
  103.         TH0=(65536-50000)/256;
  104.         TL0=(65536-50000)%256;
  105.         t++;
  106. }
復制代碼
回復

使用道具 舉報

ID:644141 發表于 2020-3-4 22:22 | 顯示全部樓層
建議使用插入代碼功能,便于查看
回復

使用道具 舉報

ID:702446 發表于 2020-3-5 17:19 | 顯示全部樓層
wulin 發表于 2020-3-4 21:18
恰恰是因為顯示程序邏輯錯誤才不正常。修改如下:

感謝,但是我想要的效果是:比如說還沒加到千位則千位不亮,現在這種情況與我之前弄的一樣,即便還沒加到千位,千位也一直顯示0
回復

使用道具 舉報

ID:702446 發表于 2020-3-5 18:29 | 顯示全部樓層
經過多番求證今天我發現錯誤了, 程序邏輯上沒有問題,主要是switch(  里面表達式分離語法的錯誤 )
原來的是:        if(temp<10)
                wei='a';
        else if(9<temp<100)
                        wei='b';
             else if(99<temp<1000)
                             wei='c';
                      else if(999<temp<10000)
                                  wei='d';
實際上if語句的括號里不能按照數學的寫法去寫不等式,他只會判斷第一個不等號,所以永遠都是執行到99<temp就直接進入case'b',只要把括號里面的判別式用邏輯“與”代替即可。
修改后的程序如下:
        if(temp<10)
                wei='a';
        else if(9<temp&temp<100)
                        wei='b';
             else if(99<temp&temp<1000)
                             wei='c';
                      else if(999<temp&temp<10000)
                                  wei='d';
回復

使用道具 舉報

ID:702446 發表于 2020-3-5 18:32 | 顯示全部樓層
wulin 發表于 2020-3-4 21:18
恰恰是因為顯示程序邏輯錯誤才不正常。修改如下:

問題找到了,回去翻了一下C的相關資料發現錯誤了, 程序邏輯上沒有問題,主要是switch(  里面表達式分離語法的錯誤 )
原來的是:        if(temp<10)
                wei='a';
        else if(9<temp<100)
                        wei='b';
             else if(99<temp<1000)
                             wei='c';
                      else if(999<temp<10000)
                                  wei='d';
實際上if語句的括號里不能按照數學的寫法去寫不等式,他只會判斷第一個不等號,所以永遠都是執行到99<temp就直接進入case'b',只要把括號里面的判別式用邏輯“與”代替即可。
修改后的程序如下:
        if(temp<10)
                wei='a';
        else if(9<temp&temp<100)
                        wei='b';
             else if(99<temp&temp<1000)
                             wei='c';
                      else if(999<temp&temp<10000)
                                  wei='d';
回復

使用道具 舉報

ID:213173 發表于 2020-3-5 23:17 | 顯示全部樓層
Amlee 發表于 2020-3-5 17:19
感謝,但是我想要的效果是:比如說還沒加到千位則千位不亮,現在這種情況與我之前弄的一樣,即便還沒加到 ...

沒加到千位則千位不亮,沒加到百位則百位不亮,沒加到十位則十位不亮。
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. uchar code table[]={
  7. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,//定義編碼表數組
  8. 0x7d,0x07,0x7f,0x6f,0x77,0x7c,
  9. 0x39,0x5e,0x79,0x71,0x00};
  10. uchar code weia[]={0xf7,0xfb,0xfd,0xfe};
  11. uchar data dis_buf[6];
  12. uchar wei=0;
  13. uint temp,t;
  14. //uint qian,bai,shi,ge;     //定義變量
  15. void display();           //顯示函數聲明
  16. void delay(uint);         //延時函數申明
  17. void init();              //初始化函數申明

  18. void main()
  19. {
  20.         init();
  21.         while(1)
  22.         {
  23.                 if(t==500)
  24.                 {
  25.                         t=0;
  26.                         temp++;
  27.                         if(temp==3600)
  28.                                 temp=0;
  29.                         dis_buf[0] = table[temp%10];
  30.                         if(temp<10)dis_buf[1]=0x00;                       
  31.                         else dis_buf[1] = table[temp/10%10];
  32.                         if(temp<100)dis_buf[2]=0x00;                       
  33.                         else dis_buf[2] = table[temp/100%10];
  34.                         if(temp<1000)dis_buf[3]=0x00;
  35.                         else dis_buf[3] = table[temp/1000%10];
  36.                 }
  37.         }
  38. }
  39. /*
  40. void delay(uint z)
  41. {
  42.         uint x,y;
  43.         for(x=z;x>0;x--)
  44.                 for(y=110;y>0;y--);
  45. }*/

  46. void display()//顯示函數
  47. {
  48.         P0=0x00;dula=1;dula=0;        //消隱
  49.         P0=weia[wei];wela=1;wela=0;   //送位碼鎖存
  50.         P0=dis_buf[wei];dula=1;dula=0;//送段碼鎖存
  51.         wei++; wei%=4;
  52. }        
  53. void init()
  54. {
  55.         t=0;
  56.         dula=0;
  57.         wela=0;
  58.         temp=99;
  59.         dis_buf[0] = table[temp%10];
  60.         if(temp<10)dis_buf[1]=0x00;                       
  61.         else dis_buf[1] = table[temp/10%10];
  62.         if(temp<100)dis_buf[2]=0x00;                       
  63.         else dis_buf[2] = table[temp/100%10];
  64.         if(temp<1000)dis_buf[3]=0x00;
  65.         else dis_buf[3] = table[temp/1000%10];
  66.         TMOD=0x01;
  67.         TH0=(65536-2000)/256;
  68.         TL0=(65536-2000)%256;
  69.         TR0=1;
  70.         EA=1;
  71.         ET0=1;
  72. }
  73. void timer0() interrupt 1
  74. {
  75.         TH0=(65536-2000)/256;
  76.         TL0=(65536-2000)%256;
  77.         t++;
  78.         display();//調用顯示函數
  79. }
復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区福利视频 | 国产在线观看av | 日韩www | 亚洲国产日本 | 亚洲欧美一区二区三区在线 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 午夜影院| 免费在线观看毛片 | 在线国产一区 | 人人做人人澡人人爽欧美 | 视频一区中文字幕 | 欧美一级特黄aaa大片在线观看 | 国产精品久久久久久久久久久新郎 | 亚洲一区av | 久久久91精品国产一区二区三区 | 国产欧美一区二区在线观看 | 日韩国产在线观看 | 午夜视频在线观看网址 | 欧美 中文字幕 | 午夜视频免费在线观看 | 成人一区二区视频 | 97精品国产97久久久久久免费 | 久久网国产 | 久久久久久免费毛片精品 | 日韩视频免费看 | 高清亚洲| 国产一区二区影院 | 久久精品屋 | 欧美极品视频 | 久久综合久久自在自线精品自 | www国产精| 亚洲精品视频在线 | 欧美在线一区二区三区 | www.色.com| 欧美一区永久视频免费观看 | 男人天堂午夜 | 久久久噜噜噜久久中文字幕色伊伊 | 精精国产xxxx视频在线播放7 | 欧美精品一区二区三区在线播放 | 精品一区二区三区四区外站 | 成人在线视频免费看 |