⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdkey2new.c

📁 CM240128程序
💻 C
字号:
 #include<reg51.h>
  #include<math.h>
  #include<absacc.h>
  #include<rili_case.h>
  #define   DataPort   XBYTE[0]
  #define   CommPort   XBYTE[0x8000]
  sbit key_map=P1^4;
  sbit key_mat=P1^3;
  uint cas,row;
  void   ste01(void);//读写状态检测
  void   ste2(void);
  void   ste3(void);
  void   OutData(uchar);
  void   OutComm1(uchar);
  void   OutComm2(uchar   ,uchar   );
  void   OutComm3(uchar   ,uchar   ,uchar   );
  void   LCDInit(void);
  void   ClearScreen(void);//清屏
  void   Dispchar(uchar   x,uchar   y,uchar   index);//显示字符8×16
  void   DispHZ(uchar   xpos,uchar   ypos,uchar   index);
  void   ste01(void)//检测数据/命令读写状态
  {
    uchar   sta;
    {sta=CommPort   &   0x03;}while(sta!=0x03);
  }
  void   ste2(void)//检测自动读状态
  {
    uchar   sta;
    {sta=CommPort   &   0x04;}while(sta!=0x04);
  }
  void   ste3(void)//检测自动写状态
  {
    uchar   sta;
    {sta=CommPort   &   0x08;}while(sta!=0x08);
  }
  void   OutData(uchar   dat)//往LCD写数据
  {
    ste01();
    DataPort=dat;
  }
  void   OutComm1(uchar   comm)//往LCD写命令
  {
    ste01();
    CommPort=comm;
  }
  void   OutComm2(uchar   dat1,uchar   comm)
  {
    OutData(dat1);
    OutComm1(comm);
  }
  void   OutComm3(uchar   dat1,uchar   dat2,uchar   comm)
  {
    OutData(dat1);
    OutData(dat2);
    OutComm1(comm);
  }
  void   LCDInit(void)
  {
    OutComm3(0x00,0x00,0x42);//设置图形显示区域首地址
    OutComm3(30,0x00,0x43);//设置图形显示区域宽度
    OutComm1(0x80);//设置显示方式:   逻辑"或"
    OutComm1(0xa0);//设置光标形状
    OutComm1(0x98);//开图形显示
  }
  void   ClearScreen(void)
  {
    uint   i;
    OutComm3(0x00,0x00,0x24);//设置指针地址0000H
    OutComm1(0xb0);//设置自动写
    for(i=0;i<0x2000;i++)
      OutData(0x00);
    OutComm1(0xb2);   //设置自动写结束
  }
  void     Disphz(uchar   x,uchar   y,uchar   index)//多个汉字
  //只要汉字单个占一行,先第一行的2个字节,然后再第二行,共计16行,16列
//x表示汉字的水平位置,最大值是30,一个汉字占2个水平位置,每个水平位置用一个字节的8位表示
//y表示垂直的位置,一行加16,最大值112
//index表示汉字数组里的第一个汉字
//显示汉字16×16
  {
    uint   Startaddr;
    uint   i;
    Startaddr=y*30+x;
    for(i=index*32;i<(index+1)*32;i+=2)
    {
      OutComm3((uchar)(Startaddr),(uchar)(Startaddr>>8),0x24);
      OutComm2(hz_table[i],0xc4);
      Startaddr=Startaddr+1;
      OutComm3((uchar)(Startaddr),(uchar)(Startaddr>>8),0x24);
      OutComm2(hz_table[i+1],0xc4);
      Startaddr=Startaddr+29;
    }
  }
  void     Disp_1hz(uchar   x,uchar   y,uchar   i)//一次只显示一个汉字
  //在指定的位置显示
  //显示汉字16×16
  {
    uint   Startaddr;
    uchar j;
    Startaddr=y*30+x;
    for(j=0;j<32;j+=2)
    {
      OutComm3((uchar)(Startaddr),(uchar)(Startaddr>>8),0x24);
      OutComm2(datetable[i*32+j],0xc4);
      Startaddr=Startaddr+1;
      OutComm3((uchar)(Startaddr),(uchar)(Startaddr>>8),0x24);
      OutComm2(datetable[i*32+1+j],0xc4);
      Startaddr=Startaddr+29;
    }
  }
  void     Disptime(uchar   x,uchar   y,uint   i)//显示字符8×16
  { uchar j;
    uint   Startaddr;
    Startaddr=y*30+x;
    for(j=0;j<16;j++)
    {
      OutComm3((uchar)(Startaddr),(uchar)(Startaddr>>8),0x24);
      OutComm2(timetable[i*16+j],0xc4);
      Startaddr=Startaddr+30;
    }
  }
 void     disp_picture(uchar   x,uchar   y,uint h,uint lie,uchar *p)
   {
    uint   Startaddr,j;
    uchar i;
    Startaddr=y*30+x;
    for(j=0;j<h*lie/8;j+=h/8)
    {
      for(i=0;i<h/8;i++)
      {OutComm3((uchar)(Startaddr),(uchar)(Startaddr>>8),0x24);
      OutComm2(p[j+i],0xc4);
      Startaddr=Startaddr+1;
      }
      Startaddr=Startaddr+30-h/8;

    }
  }
/////////////////////////////////////////////////////////
    timer0() interrupt 1
{   uint j;
    while(!(t200--)){
     t200=2;
     TL0=0Xf0;
     TH0=0Xf0;
     EA=0;
     s++;
     if(s>59)
      {
        s=0;
        m++;
        if(m>59)
           {
            m=0;
            h++;
            if(h>23)
            {h=0;
	     day++;
             if(day>7) {week++;
                       if(week==8)week=1;}
	     switch(month)
	            {
	             case 1:
	             case 3:
	             case 5:
                     case 7:
	             case 8:
	             case 10:
	             case 12:day_last=31;break;
	             case 2:day_last=28;break;
	             case 4:
	             case 6:
	             case 9:
	             case 11:day_last=30;break;
	             default:break;
	            }
	     if(day>day_last)
	       {
	        day=1;
	        if(month<12)month++;
	        else {year++;month=1;}
	      }
}}}
 disp();
 Disptime(14,48,sbuffer[13]);
 Disptime(15,48,sbuffer[12]);
 Disptime(16,48,sbuffer[11]);
 Disptime(17,48,sbuffer[10]);
 Disp_1hz(18,48,0);//年
 Disptime(20,48,sbuffer[9]);
 Disptime(21,48,sbuffer[8]);
  Disp_1hz(22,48,1); //月
 Disptime(24,48,sbuffer[7]);
 Disptime(25,48,sbuffer[6]);
   Disp_1hz(26,48,2);//日
 Disptime(14,64,sbuffer[5]);
 Disptime(15,64,sbuffer[4]);
  Disp_1hz(16,64,3);//时
 Disptime(18,64,sbuffer[3]);
 Disptime(19,64,sbuffer[2]);
  Disp_1hz(20,64,4);//分
 Disptime(22,64,sbuffer[1]);
 Disptime(23,64,sbuffer[0]);
  Disp_1hz(24,64,5);//秒
  Disp_1hz(14,80,6); //星期
  Disp_1hz(16,80,7); //星期
  Disp_1hz(18,80,sbuffer[14]+9);
  for(row=0;row<15;row++)Disphz(2*row,cas,row);
  disp_picture(14,16,80,16, bjtime);
  disp_picture(20,100,88,29,picturelgf);
  disp_picture(0,16,112,112, clock_11);
  disp_picture(0,16,112,112, clock_13);
  disp_picture(0,16,112,112, clock_12);
  disp_picture(0,16,112,112, clock_14);
  disp_picture(0,16,112,112, clock_15);

  
  
  EA=1;
}
}
/////////////////////////////////////////////////////////////////////
  void   main(void)
  { uint  time,delay;
    LCDInit();
    data_init();
    ClearScreen();
    for(row=0;row<14;row++)
       {
         if(row>14)cas=16;
         Disphz(2*row,cas,row);
       }cas=0;//////////////////////////////////////////
     disp_picture(14,16,80,16, bjtime);
     disp_picture(20,100,88,29,picturelgf);
    while(1){
     while(!key_map) {
                      EA=0;
                      ClearScreen();
                      disp_picture(8,0,128,124,map);
                      for(delay=0;delay<60000;delay++);
                      ClearScreen();
                     }
     EA=1;
     while(!key_mat)  {
                       EA=0;
                       ClearScreen();
                       disp_picture(0,0,232,128, mat);
                       for(delay=0;delay<60000;delay++);
                       ClearScreen();
                       }
     EA=1;
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -