找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 3470 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-7-9 23:44

正文摘要:

这张是显示的图纸!    单片机源程序如下:#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit led1=P3^3; sbit led=P1^5; sbit led2=P ...

回复

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加热,都停止输出,这个程序是用在艾灸上,谢谢大家指点!有你们真好!
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:46
    hantu 发表于 2019-7-11 10:11
    多只数码管的显示,一是要动态扫描,二是要消影。

    谢谢,上面的显示函数写成了静态显示了,改了动态就可以了,
    ID:158886 发表于 2019-7-12 14:45
    谢谢,知道了,谢谢
    ID:462827 发表于 2019-7-11 10:11
    多只数码管的显示,一是要动态扫描,二是要消影。
    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:158886 发表于 2019-7-10 15:58
    显示乱码我知道了,是数码管是共阳极的,我用的共阴极的表,才导致显示乱码,但这个显示函数怎么写,进位显示数码管,

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

    Powered by 单片机教程网

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