找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3501|回复: 10
收起左侧

单片机12864串口时钟程序。适合新手,大神请忽略

[复制链接]
ID:461428 发表于 2019-3-3 18:26 | 显示全部楼层 |阅读模式
12864三根数据线(CS ,RS ,R/W.)加电源5V。共五根接线,简洁。时钟用的单片机内部
定时器。用了四个按键调小时和分钟的加减。很想写闹钟的,但是遗憾不太明白。和我一样的新手可以
看看。大神请指教闹钟咋写。。谢谢
#include "stch15.h"
#include<intrins.h>
#define uchar unsigned char
sbit cs=P2^5;
sbit sid=P2^6;
sbit sck=P2^7;
sbit k1=P0^0;
sbit k2=P0^1;
sbit k3=P0^2;
sbit k4=P0^3;
sbit bee=P0^5;
//单片机STC15W4K32.晶振22.1184
uchar hous, miao,fen,ge,shi,dat,dat1,ge1,ge2,shi1,shi2;
uchar shu []={"0123456789"};
uchar hanzi[]={"2019-3-3"};
uchar t;
void yan(int w)   //延时。
{
   int a,b;
    for(b=w;b>0;b--)
        for(a=10;a>0;a--);
}


void xie(uchar cdat)//串行按位写
{
         uchar a;
         for(a=0;a<8;a++)
         {
                 sck=1;
                 if(cdat&0x80)
                 {sid=1;}
                 else
                 {sid=0;}
                 cdat=cdat<<1;
                 sck=0;
                 
         }
}
void xiecom(uchar com)//写命令
{
         cs=1;
         xie(0xf8);
         xie(0xf0&com);
   xie(0xf0&com<<4);
         cs=0;
}
void xiedat(uchar dat)//写数据
{
         cs=1;
         xie(0xfa);
         xie(0xf0&dat);
         xie(0xf0&dat<<4);
         cs=0;
}

void pos(uchar x,uchar y)// 显示坐标
{
        uchar poos;
   if (x==0)
     {x=0x80;}
   else if (x==1)
     {x=0x90;}
   else if (x==2)
     {x=0x88;}
   else if (x==3)
     {x=0x98;}
        poos=x+y;
        xiecom(poos);
}
        
void intc()//12864初始化
{
        xiecom(0x30);
        yan(50);
        xiecom(0x0c);
        yan(50);
        xiecom(0x01);
        yan(50);
        xiecom(0x06);
        yan(50);
}
        
void xianshi()//显示
{
        
         ge=miao%10;//秒分解
        shi=miao/10;
        
        ge1=fen%10;//分分解
        shi1=fen/10;
        
        ge2=hous%10;//小时分解
        shi2=hous/10;
        
        pos(0,0);
        yan(50);
        t=0;
        while(hanzi[t]!='\0')
        {xiedat(hanzi[t]);
        t++;
        yan(30);        
  }
        
        pos(2,0);//从第三行第一个位置显示
        yan(30);
        xiedat(shu[shi2]);
        yan(30);
        xiedat(shu[ge2]);
        yan(30);
        pos(2,3);
        yan(30);
        xiedat(shu[shi1]);
        yan(30);
        xiedat(shu[ge1]);
        yan(30);
        pos(2,6);
        yan(30);
        xiedat(shu[shi]);
        yan(30);
        xiedat(shu[ge]);
        yan(30);
}
void anjian()//按键扫描
{
         k1=1;
         k2=1;
         k3=1;
         k4=1;
        
        if(k1==0)
        {
         yan(230);
         if(k1==0)
        {
                 yan(230);
                 if(k1==1)
                 {fen++;}

         }
         }
          if(k2==0)
        {
                 yan(230);
                if(k2==0)
                {
                yan(230);
                if(k2==1)
                                
               {hous++;}
              }
                }
                if(k3==0
                {
                yan(230);
                if(k3==0)
                {
                 yan(230);
                if(k3==1)
                {fen--;}

              }
             }
          if(k4==0)
        {
         yan(230);
        if(k4==0)
        {
        yan(230);
         if(k4==1)
                                
         {hous--;}
        }
        }
       }

void main()//主程序
{
        TMOD = 0x08;                     
        TH0=0x70;              
        TL0=0x07;   
        TR0=1;  
        ET0=1;
       EA=1;        
      P0M0=0x00;
        P0M1=0x00;
       P2M1=0X00;
        P2M0=0x00;
         intc();
        yan(100);
        miao=0,fen=0,hous=0;
  while(1)
   {
         anjian();
         xianshi();
         }
}


void TEME0() interrupt 1        //中断        
{
            uchar a;
           TF0=0;   
                TH0=0X70;
                TL0=0X07;
                a++;     
              bee=1;
                if(a==50)
                {
                        miao++;
                  a=0;
                        bee=!bee;
                        
                }
               
                if(miao==60)
                {
                        miao=0;
                        fen++;
                }
                if(fen==60)
                {
                        fen=0;
                        hous++;
                }
                if(hous==24)
                {
                        hous=0;
                }
        }

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:461428 发表于 2019-4-8 18:19 | 显示全部楼层
更新优化,
#include "stch15.h"
#include<intrins.h>
#define uchar unsigned char
sbit cs=P2^5;
sbit sid=P2^6;
sbit sck=P2^7;
sbit k1=P0^0;
sbit k2=P0^1;
sbit k3=P0^2;
sbit k4=P0^3;
sbit bee=P5^5;
sbit led=P4^5;
uchar hous, miao,week,fen,ge,nno,shi,dat,dat1,ge1,ge2,
shi1,shi2,nian,yue,ri,nq,ng,ns,nb,yg,rg,ys,rs;
uchar shu []={"0123456789"};
uchar hanzi1[]={"ê±¼ä==½eÇ® !"};
uchar t;
uchar code img[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xE0,0x00,0x00,0x0C,0x00,0x00,0x40,0x70,0x00,0x00,0x00,0x80,0x00,
0x00,0x00,0x00,0xE0,0x00,0x00,0x1E,0x00,0x00,0x60,0x70,0x00,0x00,0x0F,0xE0,0x00,
0x00,0x00,0x01,0xC0,0x00,0x60,0x3C,0x00,0x00,0xE0,0x60,0x00,0x1F,0xFF,0xE0,0x00,
0x00,0x00,0x03,0x80,0x00,0x70,0x70,0x40,0x00,0xE0,0x7E,0x00,0x1F,0xE0,0xC0,0x00,
0x00,0x00,0x03,0x00,0x00,0x73,0xC3,0xF0,0x01,0xC3,0xFC,0x00,0x38,0xE1,0xC0,0x00,
0x00,0x03,0xC6,0x3C,0x00,0x33,0x9F,0xF0,0x03,0x8F,0xC0,0x00,0x30,0xC1,0xC0,0x00,
0x00,0x3F,0xEF,0xFE,0x00,0x03,0x1C,0xE0,0x07,0x01,0xCC,0x00,0x31,0xF1,0x80,0x00,
0x00,0x79,0xDF,0xBC,0x00,0x06,0x18,0xC0,0x0E,0x01,0xFE,0x00,0x77,0xF9,0x80,0x00,
0x00,0x01,0xB0,0x30,0x01,0xC6,0x19,0xC0,0x1E,0x7F,0xDE,0x00,0x6F,0x83,0x80,0x00,
0x00,0x23,0xAC,0x60,0x0F,0xE6,0xF1,0x80,0x3E,0x7B,0x38,0x00,0x61,0x83,0x00,0x00,
0x00,0x37,0x0E,0x00,0x0F,0xC7,0xB7,0x80,0xEC,0x63,0x30,0x00,0xE3,0x03,0x00,0x00,
0x00,0x3E,0x0E,0x00,0x01,0x8F,0x37,0x01,0xCC,0x6F,0xF0,0x00,0xC7,0xF7,0x00,0x00,
0x00,0x1E,0x0C,0x00,0x03,0x1E,0x66,0x03,0x0C,0x7F,0x00,0x01,0xFF,0xE6,0x00,0x00,
0x00,0x1E,0x1C,0x00,0x03,0x1C,0x60,0x02,0x19,0xAC,0x00,0x01,0x96,0x06,0x00,0x00,
0x00,0x3E,0x3E,0x00,0x03,0x18,0x60,0x00,0x19,0xFC,0x00,0x03,0x86,0x0E,0x00,0x00,
0x00,0x7E,0x36,0x00,0x03,0x00,0xC0,0x00,0x38,0x78,0x00,0x03,0x06,0x0C,0x00,0x00,
0x00,0xE6,0x67,0x00,0x03,0x00,0xC0,0x00,0x30,0x78,0x00,0x06,0x0C,0x0C,0x00,0x00,
0x01,0xC6,0xC3,0x80,0x7F,0xF0,0xC0,0x00,0x30,0xFE,0x00,0x0E,0x0C,0x1C,0x00,0x00,
0x03,0x81,0x83,0xC0,0x78,0xFF,0x80,0x00,0x61,0xCF,0x80,0x1C,0x08,0x18,0x00,0x00,
0x06,0x07,0x03,0xE0,0x00,0x1F,0xFF,0xE0,0x67,0x07,0xE0,0x38,0x18,0xF8,0x00,0x00,
0x08,0x0E,0x01,0xF8,0x00,0x07,0xFF,0x80,0xCE,0x03,0xF8,0x60,0x00,0x70,0x00,0x00,
0x00,0x18,0x01,0xF8,0x00,0x01,0xFC,0x00,0xC0,0x01,0xFC,0xC0,0x00,0x70,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x06,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x06,0x00,0x00,0x00,0x0C,0xE0,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0E,0x00,0x00,0x00,0x3F,0xE0,0x00,0xFF,0xF0,0x00,0x38,0x00,0xE0,0x00,
0x00,0x00,0x0C,0x00,0x00,0x0F,0xFF,0x80,0x00,0xF8,0xF0,0x00,0x38,0x00,0xE0,0x00,
0x00,0x00,0x0C,0xF0,0x00,0x0F,0xC7,0x00,0x00,0x60,0xE0,0x00,0x38,0x00,0xE0,0x00,
0x00,0x00,0x1F,0xF0,0x00,0x01,0x8E,0x00,0x00,0x60,0xC0,0x00,0x70,0x01,0xC0,0x00,
0x00,0x07,0xFF,0x80,0x00,0x01,0x8C,0x00,0x00,0xE1,0x80,0x00,0x70,0x01,0xC0,0x00,
0x00,0x07,0xF8,0x00,0x00,0x01,0x98,0x00,0x00,0xDF,0xC0,0x00,0x70,0x01,0xC0,0x00,
0x00,0x00,0x78,0x00,0x00,0x01,0xBF,0xE0,0x00,0xFF,0x00,0x00,0x60,0x01,0x80,0x00,
0x00,0x00,0xFC,0x00,0x00,0x7F,0xFF,0xE0,0x00,0xC0,0x00,0x00,0xE0,0x03,0x80,0x00,
0x00,0x01,0xFE,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x00,
0x00,0x03,0xB7,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x3C,0x00,0xC0,0x03,0x00,0x00,
0x00,0x07,0x67,0x00,0x00,0x60,0x00,0x00,0x03,0x9F,0xFE,0x00,0x80,0x02,0x00,0x00,
0x00,0x0E,0x63,0x80,0x00,0xE0,0x00,0x01,0xFF,0xCF,0x1E,0x01,0x80,0x06,0x00,0x00,
0x00,0x1C,0xE1,0xE0,0x00,0xC0,0x00,0x00,0xE3,0x9C,0x38,0x01,0x80,0x06,0x00,0x00,
0x00,0x38,0xC1,0xF8,0x01,0xC0,0x00,0x00,0xC3,0x18,0x30,0x00,0x00,0x00,0x00,0x00,
0x00,0xE0,0xFC,0xFE,0x03,0x80,0x00,0x01,0xC7,0x18,0x60,0x00,0x00,0x00,0x00,0x00,
0x01,0xDF,0xF8,0xFE,0x03,0x00,0x00,0x01,0x8E,0x1B,0xE0,0x07,0x00,0x1C,0x00,0x00,
0x07,0x07,0x80,0x00,0x07,0x00,0x00,0x01,0xFF,0x3F,0xE0,0x07,0x00,0x1C,0x00,0x00,
0x0C,0x03,0x80,0x00,0x0E,0x00,0x00,0x01,0xF0,0x38,0x00,0x0F,0x00,0x3C,0x00,0x00,
0x00,0x03,0x00,0x00,0x1C,0x00,0x00,0x01,0x00,0x20,0x00,0x06,0x00,0x18,0x00,0x00,
0x00,0x03,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
void yan(int w)   
{
   int a,b;
    for(b=w;b>0;b--)
        for(a=50;a>0;a--);
}


void xie(uchar cdat)//ò»×Ö½úêy¾Y°′λD′
{
         uchar a;
         for(a=0;a<8;a++)
         {
                 sck=1;
                 if(cdat&0x80)//è¡×î¸ßò»Î»¡£
                 {sid=1;}
                 else
                 {sid=0;}
                 cdat=cdat<<1;//′θßλòÆμ½×î¸ßλ¡£
                 sck=0;
         }
}
void xiecom(uchar com)//D′Ãüáî
{
         cs=1;
         xie(0xf8);
         xie(0xf0&com);
   xie(0xf0&com<<4);
         cs=0;
}
void xiedat(uchar dat)//D′êy¾Y
{
         cs=1;
         xie(0xfa);
         xie(0xf0&dat);
         xie(0xf0&dat<<4);
         cs=0;
}

void pos(uchar x,uchar y) //Æá×ø±êλÖÃé趨
{
        uchar poos;
   if (x==0)
     {x=0x80;}
   else if (x==1)
     {x=0x90;}
   else if (x==2)
     {x=0x88;}
   else if (x==3)
     {x=0x98;}
        poos=x+y;
        xiecom(poos);
}

       
void tuxing( char  *img)        //í¼Dη½ê½12864ÏÔê¾×ÖÄ£221 oáÏòè¡Ä¤
{
        unsigned char i,j;
        unsigned int k = 0;

        xiecom(0x36); //í¼Dη½ê½
        for(i=0;i<32;i++)
          {
                xiecom(0x80+i);
                        yan(2);
                xiecom(0x80);
            for(j=0;j<16;j++)
                {
                        xiedat(img[k++]);
                        yan(2);
                }
          }

        for(i=0;i<32;i++)
          {
                xiecom(0x80+i);
                        yan(2);
          xiecom(0x88);
            for(j=0;j<16;j++)
                {
                xiedat(img[k++]);
                        yan(2);
                  }
        }
}
void intc()//128643õê¼»ˉ¡£
{
        xiecom(0x30);//1|Äüé趨8λêy¾Y
        yan(50);
        xiecom(0x0c);//ÕûìåÏÔ꾿a£¬óαê1Ø£¬·′°×1Ø¡£
        yan(50);
        xiecom(0x01);//ÇåÆá¡£μØÖ·1é0.
        yan(50);
        xiecom(0x06);//1a±ê′ó×óμ½óò¼ó1òƶˉ¡£
        yan(50);
}
void xiezi(uchar zizu[])
{       
  t=0;
while(zizu[t]!='\0')
        {xiedat(zizu[t]);
          t++;
        yan(20);
        }
}
               
       
void xianshi()
{
        ng=nian%10+2;
        ns=nian/10%10-1;
        nb=nian/1000;
        nq=nian/100;
       
        yg=yue%10;
        ys=yue/10;
       
        rg=ri%10;
        rs=ri/10;
       
       
         ge=miao%10;//è¡óàÔËËã
        shi=miao/10;//è¡ÕûÔËËã¡£
       
        ge1=fen%10;
        shi1=fen/10;//·Ö  á½Î»ÏÔê¾
       
        ge2=hous%10;//D¡ê±¡£
        shi2=hous/10;
       
        pos(0,0);
        yan(30);
   xiedat(shu[nq]);
        yan(10);
        xiedat(shu[nb]);
        yan(10);
         xiedat(shu[ns]);
        yan(10);
        xiedat(shu[ng]);
        yan(10);
        pos(0,2);
        yan(10);

        xiezi("Äê");
        yan(10);
        pos(0,3);
        yan(10);
   xiedat(shu[ys]);
        yan(10);
        xiedat(shu[yg]);
        yan(10);
         pos(0,4);
        yan(10);
        xiezi("ÔÂ");
        yan(10);
       
        pos(0,5);
        yan(30);
   xiedat(shu[rs]);
        yan(30);
        xiedat(shu[rg]);
        yan(30);
         pos(0,6);
        yan(10);
        xiezi("oÅ");
        yan(10);
       
        pos(1,0);
        yan(10);
        xiezi("DÇÆú");
        yan(10);
       
        pos(2,0);
        yan(10);
        xiedat(shu[shi2]);
        yan(10);
        xiedat(shu[ge2]);
        yan(10);
        pos(2,1);
        yan(10);
        xiezi("μã");
        yan(10);
       
        pos(2,3);
        yan(10);
        xiedat(shu[shi1]);
        yan(10);
        xiedat(shu[ge1]);
        yan(10);
                pos(2,4);
        yan(10);
        xiezi("·Ö");
        yan(10);

        pos(2,6);
        yan(10);
        xiedat(shu[shi]);
        yan(10);
        xiedat(shu[ge]);
        yan(10);
                pos(2,7);
        yan(10);
        xiezi("Ãë");
        yan(10);
}

void hanx()
{
        pos(3,1);
        yan(30);
        xiezi(hanzi1);
        yan(100);
}

void xinq()
{
        switch(week)
                {
                        case 1:pos(1,2);
        yan(10);
  xiezi("ò»");break;
                  case 2:pos(1,2);
        yan(10);
  xiezi("¶t");break;
                        case 3: pos(1,2);
        yan(10);
  xiezi("èy");break;
                        case 4:pos(1,2);
        yan(10);
  xiezi("ËÄ");break;
                        case 5:pos(1,2);
        yan(10);
  xiezi("Îå");break;
                        case 6:pos(1,2);
        yan(10);
  xiezi("áù");break;
                        case 7:pos(1,2);
        yan(10);
  xiezi("èÕ");break;
                }
        }

void anjian()
{
         k1=1;
         k2=1;
         k3=1;
         k4=1;
       
                if(k1==0)//ÅD¶ÏK°′Ï¡£
                        {
                         yan(800);
                         if(k1==0)
                                 {
                                         yan(800);
                                         //pos(2,3);
                                                //yan(10);
                                                //xiecom(0x0d);
                                   if(k1==1)//KËé¿a¡£
                                  {
                                       
                                        fen++;
                                        }
                     }
             }
          if(k2==0)
                        {
                   yan(800);
                                if(k2==0)
                                {
                                        yan(800);
                          if(k2==1)
                               
               {hous++;}
              }
                        }
                                if(k3==0)//ÅD¶ÏK°′Ï¡£
                        {
                        yan(800);
                        if(k3==0)
                                {
                                        yan(800);
                                if(k3==1)//KËé¿a¡£
                                {fen--;}
         
                    }
             }
          if(k4==0)
                        {
                   yan(800);
                                if(k4==0)
                                {
                                        yan(800);
                          if(k4==1)
                               
               {hous--;}
              }
            }
        }

void main()
{
        TMOD = 0x08;          //¶¨ê±Æ÷Ä£ê½1                     
        TH0=0x70;             
        TL0=0x07;   
        TR0=1;  
  ET0=1;
  EA=1;       
  P0M0=0x00;
        P0M1=0x00;
  P2M1=0X00;
        P2M0=1;
        P4M0=1;
        P4M1=0;
        intc();
        yan(50);
       
        tuxing(img);
        yan(5000);
        yan(5000);
        yan(25000);
        yan(25000);
        yan(25000);
        yan(25000);
        yan(25000);
                intc();
        yan(50);
nian=2019,yue=4,ri=4,        miao=0,fen=1,hous=19,week=4;
  while(1)
   {
         anjian();
                 
                xinq();
                 yan(20);
         xianshi();
                 yan(10);
                 hanx();
         }
}


void TEME0() interrupt 1               
{
        uchar a;
        TF0=0;   //òç3öλÇåáã
                TH0=0X70;
                TL0=0X07;//ÖØ×°3õÖμ
                a++;     //òç3ö¼Æêy
   bee=1;
        //if(a==25);
        //{led=!led;}
                if(a==50)
                {
                        led=!led;
                        miao++;
                  a=0;
                }
               
                if(miao==60)
                {
                        miao=0;
                        fen++;
                }
                if(fen==60)
                {
                        fen=0;
                        bee=!bee;
                        hous++;
                }
                if(hous==24)
                {
                        hous=0;
                        ri++;
                        week++;
                        }
               
               
                if(week==8)
                {week=1;}
               
                if(yue==1|yue==3|yue==5|yue==7|yue==8|yue==10|yue==12)
        {
                            
                if(ri==32)
                {ri=1;
                 yue++;}
         }
                else
                {
                        if(ri==31)
                        {
                                ri=1;
                                yue++;
                        }
                }
       
                if(yue==13)
                {
                        yue=1;
                nian++;
                }
        }
回复

使用道具 举报

ID:505337 发表于 2019-4-14 22:37 来自手机 | 显示全部楼层
楼主,有电路图吗?我也是新手  570800721@qq.com
回复

使用道具 举报

ID:505337 发表于 2019-4-14 22:38 来自手机 | 显示全部楼层
楼主好人,谢谢
回复

使用道具 举报

ID:461428 发表于 2019-4-24 07:16 来自手机 | 显示全部楼层
喜乐 发表于 2019-4-14 22:37
楼主,有电路图吗?我也是新手  570800721@qq.com

就四根线接单片和液晶就好了
回复

使用道具 举报

ID:461428 发表于 2019-4-30 13:53 | 显示全部楼层
#include "stch15.h"
#include<intrins.h>
#define uchar unsigned char
sbit cs=P2^5;
sbit sid=P2^6;
sbit sck=P2^7;
sbit k1=P0^0;
sbit k2=P0^1;
sbit k3=P0^2;
sbit k4=P0^3;
sbit bee=P0^5;
sbit led=P4^5;
//晶振22.1184.单片机STC15W4K32
uchar hous, miao,week,fen,ge,nno,shi,dat,dat1,ge1,ge2,shi1,shi2,nian,yue,ri,nq,ng,ns,nb,
yg,rg,ys,rs;
uchar shu []={"0123456789"};

uchar t;
void yan(int w)   //延时
{
   int a,b;
    for(b=w;b>0;b--)
        for(a=25;a>0;a--);
}


void xie(uchar cdat)//字节写
{
         uchar a;
         for(a=0;a<8;a++)
         {
                 sck=1;
                 if(cdat&0x80)
                 {sid=1;}
                 else
                 {sid=0;}
                 cdat=cdat<<1;
                 sck=0;
                 //yan(10);
         }
}
void xiecom(uchar com)//写命令
{
         cs=1;
         xie(0xf8);
         xie(0xf0&com);
   xie(0xf0&com<<4);
         cs=0;
}
void xiedat(uchar dat)//写数据
{
         cs=1;
         xie(0xfa);
         xie(0xf0&dat);
         xie(0xf0&dat<<4);
         cs=0;
}

void pos(uchar x,uchar y) //显示坐标
{
        uchar poos;
   if (x==0)
     {x=0x80;}
   else if (x==1)
     {x=0x90;}
   else if (x==2)
     {x=0x88;}
   else if (x==3)
     {x=0x98;}
        poos=x+y;
        xiecom(poos);
}
       
void intc()//12864初始化
{
        xiecom(0x30);
        yan(50);
        xiecom(0x0c);
        yan(50);
        xiecom(0x01);
        yan(50);
        xiecom(0x06);
        yan(50);
}
void xiezi(uchar zizu[])//汉字显示函数
{       
  t=0;
while(zizu[t]!='\0')
        {xiedat(zizu[t]);
          t++;
        yan(20);
        }
}
               
       
void xianshi()
{
        ng=nian%10;//年
        ns=nian/10;
       
        yg=yue%10;//月
        ys=yue/10;
       
        rg=ri%10;//日
        rs=ri/10;
       
       
         ge=miao%10;//秒个位
        shi=miao/10;//秒十位
       
        ge1=fen%10;//分个位
        shi1=fen/10;//分十位
       
        ge2=hous%10;//小时个位
        shi2=hous/10;
       
        pos(0,0);//显示位置
        yan(30);
   xiedat(shu[2]);
        yan(10);
        xiedat(shu[0]);
        yan(10);
         xiedat(shu[ns]);
        yan(10);
        xiedat(shu[ng]);
        yan(10);
        pos(0,2);
        yan(10);

        xiezi(“年”);
        yan(10);
        pos(0,3);
        yan(10);
   xiedat(shu[ys]);
        yan(10);
        xiedat(shu[yg]);
        yan(10);
         pos(0,4);
        yan(10);
        xiezi(“月”);
        yan(10);
       
        pos(0,5);
        yan(30);
   xiedat(shu[rs]);
        yan(30);
        xiedat(shu[rg]);
        yan(30);
         pos(0,6);
        yan(10);
        xiezi(“号”);
        yan(10);
       
        pos(1,0);
        yan(10);
        xiezi("星期");
        yan(10);
       
        pos(3,1);
        yan(10);
  xiezi("12864时钟");
        yan(10);
       
        pos(2,0);
        yan(10);
        xiedat(shu[shi2]);
        yan(10);
        xiedat(shu[ge2]);
        yan(10);
        pos(2,1);
        yan(10);
        xiezi(hanzi1);
        yan(10);
       
        pos(2,3);
        yan(10);
        xiedat(shu[shi1]);
        yan(10);
        xiedat(shu[ge1]);
        yan(10);
                pos(2,4);
        yan(10);
        xiezi(hanzi2);
        yan(10);

        pos(2,6);
        yan(10);
        xiedat(shu[shi]);
        yan(10);
        xiedat(shu[ge]);
        yan(10);
                pos(2,7);
        yan(10);
        xiezi(hanzi3);
        yan(10);
}

void xinq()//星期显示
{
        switch(week)
                {
                        case 1:pos(1,2);
        yan(10);
  xiezi("一");break;
                  case 2:pos(1,2);
        yan(10);
  xiezi("二");break;
                        case 3: pos(1,2);
        yan(10);
  xiezi("三");break;
                        case 4:pos(1,2);
        yan(10);
  xiezi("四");break;
                        case 5:pos(1,2);
        yan(10);
  xiezi("五");break;
                        case 6:pos(1,2);
        yan(10);
  xiezi("六");break;
                        case 7:pos(1,2);
        yan(10);
  xiezi("日");break;
                }
        }

void anjian()//按键扫描
{
         k1=1;
         k2=1;
         k3=1;
         k4=1;
       
                if(k1==0)//分钟加
                        {
                         yan(2000);
                         if(k1==0)
                                 {
                                         yan(2000);
                                  // if(k1==1)
                                  {fen++;}
         
                     }
             }
          if(k2==0)//小时加
                        {
                   yan(2000);
                                if(k2==0)
                                {
                                        yan(2000);
                          //if(k2==1)
                               
               {hous++;}
              }
                        }
                                if(k3==0)
                        {
                        yan(2000);
                        if(k3==0)//分钟减
                                {
                                        yan(2000);
                                //if(k3==1)
                                {fen--;}
         
                    }
             }
          if(k4==0)//小时减
                        {
                   yan(2000);
                                if(k4==0)
                                {
                                        yan(2000);
                          //if(k4==1)
                               
               {hous--;}
              }
            }
        }

void main()
{
        TMOD = 0x08;          //定时器0模式1                     
        TH0=0x70;             
        TL0=0x07;   
        TR0=1;  
  ET0=1;
  EA=1;       
  P0M0=0x00;
        P0M1=0x00;
  P2M1=0X00;
        P2M0=0x00;
        P4M0=1;
        P4M1=0;
        intc();
        yan(50);
nian=19,yue=4,ri=30,        miao=0,fen=25,hous=12,week=2;//初始显示年月日时间
  while(1)
   {
         anjian();//按键扫描
                xinq(); //星期显示
         xianshi();//年月日时间显示
         }
}


void TEME0() interrupt 1               
{
        uchar a;
        TF0=0;   
                TH0=0X70;
                TL0=0X07;
                a++;     
   
                if(a==50)//定时20毫秒,50次后为1000毫秒=1秒
                {
                        led=!led;
                        miao++;
                  a=0;
                }
               
                if(miao==60)//分
                {
                        miao=0;
                        fen++;
                }
                if(fen==60)//小时
                {
                        fen=0;
                        bee=!bee;
                        hous++;
                }
                if(hous==24)//小时到了24归零
                {
                        hous=0;
                        ri++;
                        week++;
                        }
               
               
                if(week==8)//星期到了8.归一
                {week=1;}
               
                if(yue==1|yue==3|yue==5|yue==7|yue==8|yue==10|yue==12)//31天的月份
        {
                            
                if(ri==32)//日到了32.归一
                {ri=1;
                 yue++;}
         }
                else  
                {
                        if(ri==31)
                        {
                                ri=1;
                                yue++;
                        }
                }
       
                if(yue==13)
                {
                        yue=1;
                nian++;
                }
        }
回复

使用道具 举报

ID:525123 发表于 2019-4-30 14:42 来自手机 | 显示全部楼层
我其实也不知道为什么要回复
回复

使用道具 举报

ID:454712 发表于 2019-4-30 15:46 | 显示全部楼层
楼主  那个时钟用的是ds1302该怎么调时间啊
回复

使用道具 举报

ID:171746 发表于 2019-4-30 20:35 | 显示全部楼层
学习学习
回复

使用道具 举报

ID:461428 发表于 2019-4-30 21:03 来自手机 | 显示全部楼层
1367067553 发表于 2019-4-30 15:46
楼主  那个时钟用的是ds1302该怎么调时间啊

我没用过时钟芯片。。。。
回复

使用道具 举报

ID:478073 发表于 2019-5-16 15:55
kissme 发表于 2019-4-30 13:53
#include "stch15.h"
#include
#define uchar unsigned char

自己都没整明白,来出别人的东西你说不明白,装!

ID:965189 发表于 2021-10-19 11:52 | 显示全部楼层
有值得学习的地方。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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