找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2146|回复: 1
打印 上一主题 下一主题
收起左侧

12864万年历独立按键

[复制链接]
跳转到指定楼层
楼主
ID:247090 发表于 2017-11-8 19:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
uchar shi,fen,miao,nian1,nian2,yue,ri,num,week;
uint nian;//年的总表示
uchar k1num;//按键按下的次数
uchar i;
uchar a;//变量代替ri进行计算

/*端口定义*/
#define data P0
sbit rw=P2^5;
sbit rs=P2^6;
sbit en=P2^7;
sbit psb=P3^2;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
uchar code dis1[]={"年"};
uchar code dis2[]={"月"};
uchar code dis3[]={"日"};
uchar code dis4[]={"星期"};
uchar code dis5[]={"温度:23℃"};
uchar code dis6[]={"齐"};
uchar code dis7[]={"秋"};
uchar code dis8[]={"阳"};
uchar code dis9[]={"电气"};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}
/*写指令函数*/
/*rs=l,rw=l,en=高脉冲,D0-D7=指令码。*/
void write_com(uchar com)
{
        rs=0;
        rw=0;
        en=0;
        P0=com;
        delayms(5);
        en=1;
        delayms(5);
        en=0;
}
/*写显示数据*/
/*rs=h,rw=l,*/
void write_data(uchar date)
{
rs=1;
rw=0;
en=0;
P0=date;
delayms(5);
en=1;
delayms(5);
en=0;
}
void write_sfm(uchar add,uchar date)
{
        uchar shi1,ge1;                                                         //将时分秒对应的二位数分别拆分为十位和个位
        shi1=date/10;
        ge1=date%10;
        write_com(0x90+add);                          
        write_data(0x30+shi1);
        write_data(0x30+ge1);
               
}
void write_nyr(uchar add,uchar date)
{
        uchar shi,ge;                                                         //将年月日对应的二位数分别拆分为十位和个位
        shi=date/10;
        ge=date%10;
        write_com(0x80+add);                          
        write_data(0x30+shi);
        write_data(0x30+ge);
               
}
void write_week(uchar add,uchar date)
{
        uchar ge2;                                                         //将星期对应的二位数分别拆分为十位和个位       
        ge2=date%10;
        write_com(0x88+add);                          
        write_data(0x30+ge2);
               
}

/*初始化*/
void init()
{

        TMOD=0x01;
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        EA=1;
        ET0=1;
        TR0=1;
        en=0;
        rw=0;
        psb=1;                  //并口方式
        week=2;
        nian1=20;
        nian2=16;
        yue=2;
        ri=29;
        shi=23;
        fen=59;
        miao=55;
        write_com(0x30);                //基本指令操作
        delayms(5);
        write_com(0x0c);                //显示开,关光标
        delayms(5);
        write_com(0x01);                //清除显示内容
        delayms(5);
       
        write_com(0x91);
        write_data(':');
        write_com(0x93);
        write_data(':');
        write_com(0x8a);
        write_data(':');
        write_com(0x82);
        write_sfm(0,shi);
        write_sfm(2,fen);
        write_sfm(4,miao);
        write_nyr(0,nian1);
        write_nyr(1,nian2);
        write_nyr(3,yue);
        write_nyr(5,ri);
        write_week(3,week);
}
void display()
{
  nian=nian2+nian1*100;
  if(yue==1||3||5||7||8||10||12)
  a=31;
  if(yue==4||6||9||11)
  a=30;
  if(yue==2)
  {
  if(nian%4!=0)
  a=28;
  else
  a=29;
  }
}

void keyscan()                                                                                //按键函数
{
        if(key1==0)
        {
            delayms(10);
            if(key1==0)
                {
                 k1num++;
                 while(!key1);                                                        //等待按键释放
                 if(k1num==1)
                 {
                  TR0=0;
                  write_com(0x80);                                           //暂停并可调试年1
          write_com(0x0f);
                  }
                  if(k1num==2)
                 {
                  write_com(0x81);
                 }
                 if(k1num==3)
                 {
                  write_com(0x83);
                 }
                 if(k1num==4)
                 {
                  write_com(0x85);
                 }
                 if(k1num==5)
                 {
                  write_com(0x90);
                 }
                 if(k1num==6)
                 {
                  write_com(0x92);
                 }
                 if(k1num==7)
                 {
                  write_com(0x94);
                 }
                 if(k1num==8)
                 {
                  write_com(0x8b);
                 }
                 if(k1num==9)
                 {
                  k1num=0;
                  write_com(0x0c);//设置开显示,不显示光标
                  TR0=1;
                 }
                 
                }
        }
        if(k1num!=0)
        {
         if(key2==0)                  
        {
                 delayms(10);
                if(key2==0)
                {                                                                                                        
                        while(!key2);
                        if(k1num==1)
                        {
                         nian1++;
                         if(nian1==99)
                         nian1=0;
                         write_nyr(0,nian1);
                         write_com(0x80);
                        }
                        if(k1num==2)
                        {
                         nian2++;
                         if(nian2==99)
                         nian2=0;
                         write_nyr(1,nian2);
                         write_com(0x81);
                        }
                        if(k1num==3)
                        {
                         yue++;
                         if(yue==13)
                         yue=1;
                         write_nyr(3,yue);
                         write_com(0x84);
                        }
                                if(k1num==4)
                        {
                         ri++;
                         if(ri==a+1)
                         ri=1;
                         write_nyr(5,ri);
                         write_com(0x86);
                        }
                                if(k1num==5)
                        {
                         shi++;
                         if(shi==24)
                         shi=0;
                         write_sfm(0,shi);
                         write_com(0x90);
                        }
                                if(k1num==6)
                        {
                         fen++;
                         if(fen==60)
                         fen=0;
                         write_sfm(2,fen);
                         write_com(0x92);
                        }
                                if(k1num==7)
                        {
                         miao++;
                         if(miao==60)
                         miao=0;
                         write_sfm(4,miao);
                         write_com(0x94);
                        }
                                if(k1num==8)
                        {
                         week++;
                         if(week==7)
                         week=0;
                         write_week(3,week);
                         write_com(0x8b);
                        }
                }
        }
if(key3==0)                  
        {
                 delayms(10);
                if(key3==0)
                {                                                                                                        
                        while(!key3);
                        if(k1num==1)
                        {
                         if(nian1==0)
                         nian1=99;
                         nian1--;
                         write_nyr(0,nian1);
                         write_com(0x80);
                        }
                        if(k1num==2)
                        {
                         if(nian2==0)
                         nian2=99;
                         nian2--;
                         write_nyr(1,nian2);
                         write_com(0x81);
                        }
                        if(k1num==3)
                        {
                         if(yue==1)
                         yue=12;
                         yue--;
                         write_nyr(3,yue);
                         write_com(0x84);
                        }
                                if(k1num==4)
                        {
                        if(ri==1)
                        ri=a;
                        ri--;
                         write_nyr(5,ri);
                         write_com(0x86);
                        }
                                if(k1num==5)
                        {
                          if(shi==0)
                        shi=24;
                        shi--;
                         write_sfm(0,shi);
                         write_com(0x90);
                        }
                                if(k1num==6)
                        {
                         if(fen==0)
                         fen=60;
                         fen--;
                         write_sfm(2,fen);
                         write_com(0x92);
                        }
                                if(k1num==7)
                        {
                        if(miao==0)
                        miao=60;
                        miao--;
                         write_sfm(4,miao);
                         write_com(0x94);
                        }
                                if(k1num==8)
                        {
                         if(week==1)
                         week=7;
                         week--;
                         write_week(3,week);
                         write_com(0x8b);
                        }
                }
        }
         if(key3==0)                  
        {
                 delayms(10);
                if(key3==0)
                {       
                        TR0=1;                                                                                        
                        while(!key3);
                }
        }
        }

       
}
void main()
{
init();
write_com(0x82);                 
for(i=0;i<2;i++)
{
        write_data(dis1[i]);
        delayms(1);
}
  write_com(0x84);                 
for(i=0;i<2;i++)
{
        write_data(dis2[i]);
        delayms(1);
}
   write_com(0x86);                 
for(i=0;i<2;i++)
{
        write_data(dis3[i]);
        delayms(1);
}
   write_com(0x88);                 
for(i=0;i<4;i++)
{
        write_data(dis4[i]);
        delayms(1);
}
    write_com(0x98);                 
for(i=0;i<10;i++)
{
        write_data(dis5[i]);
        delayms(1);
}
    write_com(0x87);                 
for(i=0;i<2;i++)
{
        write_data(dis6[i]);
        delayms(1);
}
        write_com(0x97);
  for(i=0;i<2;i++)
{
        write_data(dis7[i]);
        delayms(1);
}
        write_com(0x8f);
  for(i=0;i<2;i++)
{
        write_data(dis8[i]);
        delayms(1);
}
        write_com(0x9e);
  for(i=0;i<4;i++)
{
        write_data(dis9[i]);
        delayms(1);
}
   while(1)
   {
  keyscan();
  display();
   }
}
   void T0_time() interrupt 1
         {
//          display();
          TH0=(65536-45872)/256;
          TR0=(65536-45872)%256;
          num++;

          if(num==20)
          {
           num=0;
           miao++;
          
           if(miao==60)
                  {
                   miao=0;
                   fen++;  
                           if(fen==60)
                          {
                           fen=0;
                           shi++;                                  
                                   if(shi==24)
          
                                           {
                                                   shi=0;
                                                   ri++;
                                                   week++;
                                                   if(week==8)
                                                   {
                                                           week=1;       
                                                }             
                                                           if(ri==a+1)
                                                                   {
                                                                           ri=1;
                                                                           yue++;
                                                                           if(yue==13)
                                                                                   {
                                                                                        yue=1;
                                                                                        nian2++;
                                                                                                   if(nian2==99)
                                                                                                           {
                                                                                                                nian2=0;
                                                                                                                nian1++;
                                                                                                                  
                                                                                                        }
                                                                                        write_nyr(0,nian1);
                                                                                         write_nyr(1,nian2);
                                                                                }
                                                                                write_nyr(3,yue);
                                                                }
                                                                 write_nyr(5,ri);                                               
                                        }
                                        write_sfm(0,shi);
                                        write_week(3,week);
                          }
                          write_sfm(2,fen);
                 }
                 write_sfm(4,miao);
        }
                 }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:247090 发表于 2017-11-8 19:47 | 只看该作者
新人学艺不精望海涵啦,嘿嘿嘿
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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