找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2902|回复: 7
收起左侧

我写的这个单片机程序,为什么数码管显示一样的,还是乱码 显示函数怎么写?

[复制链接]
ID:158886 发表于 2019-7-9 23:44 | 显示全部楼层 |阅读模式
这张是显示的图纸!
   QQ图片20190709234230.jpg

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit led1=P3^3;
  6. sbit led=P1^5;
  7. sbit led2=P3^6;
  8. sbit fan=P1^6;
  9. sbit ptc=P3^4;
  10. sbit we1=P2^6;
  11. sbit we2=P2^7;
  12. sbit we3=P2^1;
  13. sbit we4=P2^0;
  14. sbit we5=P2^2;
  15. sbit fm=P2^5;
  16. sbit sw1=P1^0;
  17. sbit sw2=P1^4;
  18. sbit sw3=P3^5;
  19. sbit sw4=P3^7;
  20. uchar code duma[]={0x3f,0x06,0x5b,0x4f,
  21.                                    0x66,0x6d,0x7d,0x07,
  22.                                    0x7f,0x6f,0x77,0x7c,
  23.                                    0x39,0x5e,0x79,0x71
  24.                                    };
  25.                               
  26.                                  
  27. uchar  counter,   time,time_counter, h;                              
  28.                               
  29.                               
  30.                               
  31. uchar i ;

  32. void delay(uint z);
  33. void delay(uint z)
  34. {
  35.   while (z--);

  36. }
  37. void display(uchar mshi,mge,sge,sshi,hge,hshi )
  38. {      
  39.   mge=time_counter%10;
  40.   mshi=time_counter/10;
  41.   sge=time/10;
  42.   sshi=time%10;
  43.   hge=h/10;
  44.   hshi=h%10;

  45.    P0=0XFF;
  46.    we2=0;
  47.   P0=duma[mshi];
  48.   delay(100);


  49.    P0=0XFF;
  50.    we1=0;
  51.    P0=duma[mge];
  52.   delay(100);

  53.     P0=0XFF;
  54.            we4=0;
  55.   P0=duma[sshi];
  56.   delay(100);

  57.    P0=0XFF;
  58.    we3=0;
  59.   P0=duma[sge];
  60.   delay(100);

  61. /*  P0=0XFF;
  62. wea=0;
  63. web=0;
  64. wec=1;
  65.   P0=duma[hge];
  66.   delay(100);

  67.    P0=0XFF;
  68. wea=1;
  69. web=0;
  70. wec=1;
  71.   P0=duma[hshi];
  72.   delay(100);*/
  73. }

  74. void keypros()
  75. {
  76.         if(sw1==0)
  77.         {
  78.            delay(10);
  79.            if(sw1==0&&time!=60)
  80.            {
  81.                    time+=1;
  82.                            
  83.                   while(!sw1);
  84.            }
  85.         }      
  86.          if(sw2==0)
  87.          {
  88.           delay(10);
  89.           if(sw2==0&&time!=0)
  90.           {
  91.                   time-=1;
  92.                  
  93.                    while(!sw2);
  94.           }
  95.          }
  96.          if(sw3==0)
  97.          {
  98.            delay(10);
  99.            if(sw3==0)
  100.            {
  101.                      TR1=0;
  102.                   led=1;
  103.                   time=0;
  104.                   time_counter=0;
  105.                   
  106.                   
  107.                   fan=1;
  108.                   ptc=1;
  109.                 while(!sw3);
  110.                
  111.            }
  112.          
  113.          
  114.          
  115.          }
  116.           if(sw4==0)
  117.           {
  118.            delay(10);
  119.          
  120.            if(sw4==0)
  121.            {
  122.                    TR1=~TR1;
  123.                 led=~led;
  124.                  
  125.                  
  126.                 ptc=~ptc;
  127.                 fan=~fan;
  128.                 while(!sw4);
  129.            }
  130.          
  131.           }
  132. }

  133. void init()
  134. {
  135.   TMOD=0x10;
  136.   TH1=0x4b;
  137.   TL1=0x00;
  138.   TR1=0;



  139. }


  140. void main()
  141. {      

  142.             
  143.                          init();
  144.                         led2=0;
  145.                         
  146.     while(1)
  147.         {      
  148.         keypros();
  149.                  
  150.    if(TF1==1)
  151.    { TF1=0;
  152.             TH1=0x4b;
  153.      TL1=0x00;
  154.             counter++;


  155.    }
  156.          if(counter==20)
  157.         {
  158.          counter=0;
  159.          time_counter++;
  160.           led1=~led1;
  161.         }
  162.         if(time_counter==60)
  163.           {
  164.                 time--;
  165.                  time_counter=0;
  166.                
  167.         }         
  168.         if(time==0)
  169.            {   
  170.            TR1=0;
  171.                 led=1;
  172.                    led1=1;
  173.                 ptc=1;
  174.                 fan=1;      
  175.                time=60;
  176.                   
  177.            }

  178.                   display();
  179.      }               
  180.          
  181.          
  182. }   
复制代码



回复

使用道具 举报

ID:158886 发表于 2019-7-10 15:58 | 显示全部楼层
显示乱码我知道了,是数码管是共阳极的,我用的共阴极的表,才导致显示乱码,但这个显示函数怎么写,进位显示数码管,
回复

使用道具 举报

ID:205483 发表于 2019-7-10 23:41 | 显示全部楼层

RE: 我写的这个单片机程序,为什么数码管显示一样的,还是乱码 显示函数怎么写?

你这个太乱了,一个注泽都没,wea、web、wec也不知道是什么
  •    P0=0XFF;
  • wea=1;
  • web=0;
  • wec=1;
  •   P0=duma[hshi];
  •   delay(100);*/



  •    P0=0XFF;
  •    we1=1;  //位1开显示
  •    P0=duma[mge];
  •    delay(100);
  •    we1=0;  //位1关显示

你显示完一个数码管,要把位清0,不然一轮下来所有位都在显示,会乱码。
进位不知道你指的什么,counter,   time,time_counter, h; 看不出来你这几个变量的具体作用


  •    if(TF1==1)
  •    {
  •        TF1=0;
  •        TH1=0x4b;
  •        TL1=0x00;
  •        counter++;
  •    }
  •                   //这个计数的值太小了,8M的话才5ms,1秒得counter得加200次,
  •   if(counter==20) //0.1秒进一次,改成counter==200,就是1S进一次 ,如果你是设计秒表就不用改
  •    {
  •        counter=0;
  •        time_counter++;
  •        led1=~led1; /
  •    }





回复

使用道具 举报

ID:462827 发表于 2019-7-11 10:11 | 显示全部楼层
多只数码管的显示,一是要动态扫描,二是要消影。
回复

使用道具 举报

ID:158886 发表于 2019-7-12 14:45 | 显示全部楼层
谢谢,知道了,谢谢
回复

使用道具 举报

ID:158886 发表于 2019-7-12 14:46 | 显示全部楼层
hantu 发表于 2019-7-11 10:11
多只数码管的显示,一是要动态扫描,二是要消影。

谢谢,上面的显示函数写成了静态显示了,改了动态就可以了,
回复

使用道具 举报

ID:158886 发表于 2019-7-12 14:47 | 显示全部楼层
素还真.____ 发表于 2019-7-10 23:41
你这个太乱了,一个注泽都没,wea、web、wec也不知道是什么
  •    P0=0XFF;
  • wea=1;

  • WE,就是位选信号。
    回复

    使用道具 举报

    ID:158886 发表于 2019-7-12 14:54 | 显示全部楼层
      #include<reg52.h>
    #include<intrins.h>
    #define uchar unsigned char
    #define uint unsigned int
    sbit led1=P3^3;
    sbit led=P1^5;
    sbit led2=P3^6;
    sbit fan=P1^6;
    sbit ptc=P3^4;
    sbit we1=P2^6;
    sbit we2=P2^7;
    sbit we3=P2^1;
    sbit we4=P2^0;
    sbit we5=P2^2;
    sbit fm=P2^5;
    sbit sw1=P1^0;
    sbit sw2=P1^4;
    sbit sw3=P3^5;
    sbit sw4=P3^7;
    uchar code duma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
    0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
                                       };
                                   
                                     
    uchar  counter,   time,time_counter, h;                               
                                   
                                   
                                   
    uchar i ;

    void delay(uint z);
    void delay(uint z)
    {
      while (z--);

    }
    void display(uchar mshi,uchar mge,uchar sge,uchar sshi,uchar hge,uchar hshi )
    {       
      mge=time_counter%10;
      mshi=time_counter/10;
      sge=time/10;
      sshi=time%10;
      hge=h/10;
      hshi=h%10;

      
       P0=0XFF;
       we1=0;
       we2=1;
       we3=1;
       we4=1;
        P0=duma[mge];
            delay(100);
       
       

      P0=0XFF;
      we1=1;
       we2=0;
       we3=1;
       we4=1;
       P0=duma[mshi];
       delay(100);
      
      

       P0=0XFF;
       we1=1;
       we2=1;
       we3=0;
       we4=1;
       P0=duma[sshi];
       delay(100);
       
      


       

      P0=0XFF;
      we1=1;
       we2=1;
       we3=1;
       we4=0;
      P0=duma[sge];
       delay(100);
       
      
    }

    void keypros()
    {
          

    if(sw1==0)
            { delay(10);
             
               if(sw1==0&&time!=60)
               {
                       time+=1;
                     fm=0;
                     delay(10000);
                     fm=1;
                     delay(10000);          
                      while(!sw1);
               }
         }       
    if(sw2==0)
    {
              delay(10);
              if(sw2==0&&time!=0)
              {
                      time-=1;
                    fm=0;
                     delay(10000);
                     fm=1;
                     delay(10000);
                       while(!sw2);
              }
    }
    if(sw3==0)
             {       
               delay(10);
               if(sw3==0)
               { fm=0;
                     delay(10000);
                     fm=1;
                     delay(10000);
                         TR1=0;
                      led=1;
                      time=0;
                      time_counter=0;
                      fan=1;
                      ptc=1;
                    while(!sw3);
               }       
              
    }
    if(sw4==0)
    {                
               delay(10);
              
               if(sw4==0)
               {
                       TR1=~TR1;
                    led=~led;
                    fm=0;
                     delay(10000);
                     fm=1;
                     delay(10000);
             ptc=~ptc;
                    fan=~fan;
                    while(!sw4);
               }
    }
    }
    void init()
    {
      TMOD=0x10;
      TH1=0x4b;
      TL1=0x00;
      TR1=0;
    }


    void main()
    {       

                 
                             init();
                            led2=0;
                            
        while(1)
            {       
            keypros();
                     
       if(TF1==1)
       { TF1=0;
                TH1=0x4b;
         TL1=0x00;
                counter++;

       
       }
             if(counter==20)
            {
             counter=0;
             time_counter++;
              led1=~led1;
            }
            if(time_counter==60)
              {
                    time--;
                   
                     time_counter=0;
                   
            }          
            if(time==0)
               {   
               TR1=0;
                    led=1;
                       led1=1;
                    ptc=1;
                    fan=1;       
                   time=60;
                      
               }

                      display();
         }               
             
              
    }        现
      这个是正常显示,,这个程序是60分钟,倒计时,时间可以调,时间到停止输出   
    LED1,FAN风扇,PTC加热,都停止输出,这个程序是用在艾灸上,谢谢大家指点!有你们真好!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

    Powered by 单片机教程网

    快速回复 返回顶部 返回列表