微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 基于51单片机的简单时间显示程序,只能显示时间而不能调节时间。求大神指出错误

基于51单片机的简单时间显示程序,只能显示时间而不能调节时间。求大神指出错误

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
//sbit key4=P3^3;
sbit key=P3^7;
void display();
void delayms(uint z);
void keysscan();
void init();
void write_com(uchar com);
void write_data(uchar date);
uchar num,num1,num2;num3,num4;
uchar sshi,sge,fshi,fge,mshi,mge;
uint temp=0;

void init()                                //初始化
     {
           dula=0;
           wela=0;
           TMOD=0x01;
           TH0=(65536-45872)/256;
           TH1=(65536-45872)%256;
           EA=1;
           ET0=1;
           TR0=1;
           lcden=0;
           write_com(0x38);
           write_com(0x0c);
           write_com(0x06);
           write_com(0x01);
     }

void write_com(uchar com)           //写指令
{
lcdrs=0;
P0=com;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}

void write_data(uchar date)                        //写数据
{
lcdrs=1;
P0=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}


void delayms(uint z)                                //延时
   {
         uint i,j;
         for(i=z;i>0;i--)
         for(j=110;j>0;j--);
   }

void display()                                                //液晶屏显示
     {
          write_com(0x80);
          write_data(sshi+48);
          delayms(1);
          write_com(0x80+0x01);
          write_data(sge+48);
          delayms(1);
          write_com(0x80+0x02);
          write_data(':');
          delayms(1);
          write_com(0x80+0x03);
          write_data(fshi+48);
          delayms(1);
          write_com(0x80+0x04);
          write_data(fge+48);
          delayms(1);
          write_com(0x80+0x05);
          write_data(':');
          delayms(1);
          write_com(0x80+0x06);
          write_data(mshi+48);
          delayms(1);
          write_com(0x80+0x07);
          write_data(mge+48);
          delayms(1);
     }

void keysscan()               
{
  key=0;
  if(key1==0)
  {
  delayms(5);
  if(key1==0);
     {
         while(!key1);
          temp++;
          TR0=0;
          write_com(0x0f);
         }
   }
                  switch(temp)               
                   {
                           case 1:
                           if(key2==0)                                                                                                                                          
                              {
                                  delayms(5);
                                  if(key2==0);
                                      {
                                           while(!key2)
                                           num1++;
                                           if(num1==60)num1=0;
                                          }
                                  }
                           if(key3==0)
                           {
                           delayms(5);
                              if(key3==0)
                                      {
                                          while(!key3)
                                           num1--;
                                           if(num1==-1)num1=0;
                                          }
                           }
                           break;
                               
                   case 2:
                           {
                           if(key2==0)
                              {
                                  delayms(5);
                                  if(key2==0)
                                      {
                                           while(!key2);
                                           num2++;
                                           if(num2==60)num2=0;
                                          }
                                  }
                           if(key3==0)
                           {
                           delayms(5);
                              if(key3==0)
                                      {
                                          while(!key3);
                                           num2--;
                                           if(num2==-1)num2=0;
                                          }
                           }
                           }
                           break;
                                      case 3:
                            { if(key2==0)
                              {
                                  delayms(5);
                                  if(key2==0)
                                      {
                                           while(!key2);
                                           num3++;
                                           if(num3==60)num3=0;
                                          }                         
                                  }
                           if(key3==0)
                           {
                           delayms(5);
                              if(key3==0)
                                      {
                                           while(!key3);
                                           num3--;
                                           if(num3==-1)num3=0;
                                          }
                           }
                           }
                           break;
                           case 4:
                           {
                                   temp=0;
                                TR0=1;
                                write_com(0x08);
                           }
            }
}
          
       
                               
               

void T0_time()interrupt 1                                         //时钟0中断
{
           num++;
           TH0=(65536-45872)/256;
           TH1=(65536-45872)%256;
           if(num==20)
           {
                   num=0;
                num1++;
                if(num1==60)
                 {
                   num1=0;
                   num2++;
                 }
                 mshi=num1/10;
                 mge=num1%10;
                      if(num2==60)
                          {
                           num2=0;
                           num3++;                          
                          }
                          fshi=num2/10;
                          fge=num2%10;
                                 if(num3==24)
                                         {
                                          num3=0;
                                         // num4++;
                                         }
                                         sshi=num3/10;
                                         sge=num3%10;
                                               //if(num4)
                                display();
           }
}

                void main()
                                 {
                                  init();
                                  while(1)
                                  {
                                   keysscan();
                                  }                 
                                 }

路过!

路过看见,支持一下!顶!顶!顶!

你key_scan里面的 num。每改变一次,都要写入一次,你们没有写入,要在num1或num2++之后加个display。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top