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

📄 万年历.c

📁 以12864液晶作为显示模块
💻 C
📖 第 1 页 / 共 2 页
字号:

/*****************************************************************
函数名称:void w_1280Byte(uchar bytevalue) 
功能说明:向单总线写一个数据字节 
******************************************************************/
void w_1280Byte(uchar bytevalue)
{ 
uchar i;
for(i=0;i<8;i++)
{ 
DQ=0; // 将DQ信号线拉低启动读时隙
DQ=bytevalue&0x01; //
delay(5);//等待写时隙结束
DQ=1; //释放
bytevalue>>=1; 
}
delay(5); ////等待写时隙结束
}
/*****************************************************************
函数名称:uint read_T(void) 
功能说明:读取1820温度 
*******************************************************************/
uint read_T(void)
{
uchar a=0;
uchar b=0;
uint t=0;
bus_rest();
w_1280Byte(0xCC); // 跳过读序号列号的操作 ;
w_1280Byte(0x44); // 启动温度转换,模数转化;
bus_rest(); 
w_1280Byte(0xCC); //跳过读序号列号的操作 ;
w_1280Byte(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 ;
a=r_1820BYTE();// 低8位
b=r_1820BYTE();// 高8位
t=(b*256)+a;
return(t); 
}
/**************************************************************
函数名称:void show_T(uint temp)
函数功能:显示温度
**************************************************************/
void show_T(uint temp)
{
int i;
float ftemp;
ftemp = temp* 0.0625;
sprintf(dis1,"%f",ftemp);//把温度值写入数组内存 
w_12864(com,0x98+3);
for(i=0;i<5;i++)
w_12864(dat,dis1[i]); //写入温度
}
/*---------------以下为显示相关函数--------------------------*/ 
/******************************
函数名称: void fenli(uchar x,uchar y,uchar val)
功能描述: 指定位置写入数据
********************************/
void fenli(uchar x,uchar y,uchar val)
{ uchar ge,shi,addr,i=0;
if(val==5)//这里把星期数字显示的转换为中文
{ 
w_12864(com,0x88+2);
for(i=0;i<2;i++)
{ //一个汉字写两次
if(TAB_1302[5]==0)w_12864(dat,TAB_XQ[i]); 
if(TAB_1302[5]==1)w_12864(dat,TAB_XQ[2+i]); // 
if(TAB_1302[5]==2)w_12864(dat,TAB_XQ[3+i]); //!!??星期三显示没规律,不知咋回事.
if(TAB_1302[5]==3)w_12864(dat,TAB_XQ[5+i]);
if(TAB_1302[5]==4)w_12864(dat,TAB_XQ[7+i]);
if(TAB_1302[5]==5)w_12864(dat,TAB_XQ[9+i]);
if(TAB_1302[5]==6)w_12864(dat,TAB_XQ[11+i]); 
}
}
else
{ 
shi=TAB_1302[val]/10;//分离十位
ge=TAB_1302[val]%10;
if(x==1)x=0x80;
if(x==2)x=0x90;
if(x==3)x=0x88;
if(x==4)x=0x98;
addr=x+y;
w_12864(com,addr);//指定位置
w_12864(dat,0x30+shi);//写入
w_12864(dat,0x30+ge);
}
}
/*************************************************************
函数名称:void display(void)
功能描述: 显示函数
**************************************************************/
void display(void)
{ get_1302(); //读1302
fenli(3,7,0); //读秒
fenli(3,5,1); //读分
fenli(3,3,2); //读时
fenli(2,5,3); //读日
fenli(2,3,4); //读月
fenli(3,2,5); //读星期
fenli(2,1,6); //读年
}
/*---------------按键处理相关函数--------------------------*/ 
/************************************************************
函数名称:void scanner()
功能描述: 按键函数
*************************************************************/
void scanner()
{ uchar i,j; 
   if(!key) //功能键按下
     { delay1ms(500); //延时500MS
        if(!key) //还按下,退出时间调整
            { keyflag=0; //标志位为0
               sum=0; //清0
               w_12864(com,0x0c);//清闪烁
               for(i=0;i<7;i++)//十进制转十六进制
                   { j=TAB_1302[i]/10;
                     TAB_1302[i]=TAB_1302[i]%10;
                     TAB_1302[i]=TAB_1302[i]+16*j;
                    }
                init_1302(); //写入1302
             while(!key); //等待释放
             delay1ms(10); //延时消抖
             }
           else //500MS内放开
             { keyflag=1; //标志为1,进行时间调整
               sum++; //功能键加1
               if(sum==8) 
               sum=0;
               switch(sum)
                 { 
                   case 1: // 
                        { w_12864(com,0x98+7);
                          w_12864(com,0x0f);
                          break;
                         }
                   case 2: //为2,年闪烁
                          w_12864(com,0x90+1);
                          break;
                   case 3: //月闪烁
                          w_12864(com,0x90+3); 
                          break;
                    case 4: //日闪烁
                          w_12864(com,0x90+5); 
                          break;
                    case 5: //星期闪烁
                          w_12864(com,0x88+2);
                          break;
                    case 6: //分闪烁
                          w_12864(com,0x88+5);
                          break;
                     case 7: //时闪烁
                           w_12864(com,0x88+3);
                           break;
                     }
               }
          }
    if(sum) //功能键按下
       { 
         if(!key1)
            { delay1ms(10);
              if(!key1)
                { while(!key1);//等待加1键释放
                  delay1ms(10);
                  if(sum==1) 
                   { //备用
                   }
                  if(sum==2)
                   { TAB_1302[6]++;
                       if(TAB_1302[6]==100)
                           TAB_1302[6]=0;
                           fenli(2,1,6); 
                           w_12864(com,0x90+1);//闪烁归位
                    }
                  if(sum==3)
                    { TAB_1302[4]++;
                      if(TAB_1302[4]==13)
                        TAB_1302[4]=1;
                         fenli(2,3,4);
                       w_12864(com,0x90+3);
                    }
                   if(sum==4)
                    { TAB_1302[3]++;
                      if(TAB_1302[3]==32)
                      TAB_1302[3]=1;
                      fenli(2,5,3);
                      w_12864(com,0x90+5);
                     }
                    if(sum==5)
                     { TAB_1302[5]++;
                      if(TAB_1302[5]==7)
                      TAB_1302[5]=0;
                      fenli(3,2,5);
                      w_12864(com,0x88+2);
                      }
                     if(sum==6)
                       { TAB_1302[1]++;
                         if(TAB_1302[1]==60)
                         TAB_1302[1]=0;
                         fenli(3,5,1);
                         w_12864(com,0x88+5);
                        }
                     if(sum==7)
                       { TAB_1302[2]++;
                          if(TAB_1302[2]==24)
                            TAB_1302[2]=0;
                            fenli(3,3,2);
                            w_12864(com,0x88+3);
                       }
                 } 
             }

          }
}
//=============================================================
void init(void)
{
  uchar i;
  init_12864();
  init_1302();
  while(TAB1[i]!='\0')
   {
    w_12864(dat,TAB1[i]);
    i++;
   }
  i=0; 
  w_12864(com,0x90);
  while(TAB2[i]!='\0')
    {
    w_12864(dat,TAB2[i]);
    i++;
    }
    i=0; 
    w_12864(com,0x88);
    while(TAB3[i]!='\0')
    {
    w_12864(dat,TAB3[i]);
    i++;
    }
    i=0; 
    w_12864(com,0x98);
    while(TAB4[i]!='\0')
    {
     w_12864(dat,TAB4[i]);
     i++;
     }
} 
/*************************************************************
函数名称:主函数 
函数功能:
**************************************************************/
main()
{ 
init();
while(1)
 {
  scanner(); //检测键盘 
  if(!keyflag) //标志为0
    { display(); //调用显示
      show_T(read_T()); //显示温度
      delay1ms(500);
    }
 }
}

⌨️ 快捷键说明

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