久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3160|回復: 1
打印 上一主題 下一主題
收起左側

怎么解決基于單片機電子時鐘設計與制作.C(564): warning C291: not every exit pat...

[復制鏈接]
跳轉到指定樓層
樓主
ID:106230 發表于 2016-2-26 10:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
uchar sec,min,hour,day,month,year,week;
bit w;
uchar next;
void DelayUs2x(unsigned char t)
{   
while(--t);
}
void DelayMs(unsigned char t)
{
     
while(t--)
{
     //大致延時1mS
     DelayUs2x(245);
  DelayUs2x(245);
}
}
void delay(uint ms)  // 延時子程序
{   
uint a,b,c; //ms=1000為1.015s
    for(a=2;a>0;a--)
for(b=46;b>0;b--)
for(c=ms;c>0;c--);
}
sbit RS = P2^4;
sbit RW = P2^5;
sbit E  = P2^6;
sbit RES = P2^1;
sbit PSB = P2^0;
sbit  sclk=P1^0;      //1302串行時鐘
sbit  I_O=P1^1;      //1302數據端口
sbit  rst=P1^2;      //1302復位
sbit k1=P3^4;       //功能健
sbit k2=P3^5;       //時間加
sbit k3=P3^6;         //時間減
sbit k4=P3^7;       //確定鍵
#define DataPort P0        //單片機 P0<------> 液晶DB0-DB7
uchar code DayCode1[9]={0x00,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};
uint  code DayCode2[3]={0x111,0x130,0x14e};
uchar LunarMonth,LunarDay,LunarYear;
bit c_moon;
uchar code YearCode[300]=
{
    0x0C,0x96,0x45,    //2000 297
    0x4d,0x4A,0xB8,    //2001 300
    0x0d,0x4A,0x4C,    //2002 303
    0x0d,0xA5,0x41,    //2003 306
    0x25,0xAA,0xB6,    //2004 309
    0x05,0x6A,0x49,    //2005 312
    0x7A,0xAd,0xBd,    //2006 315
    0x02,0x5d,0x52,    //2007 318
    0x09,0x2d,0x47,    //2008 321
    0x5C,0x95,0xBA,    //2009 324
    0x0A,0x95,0x4e,    //2010 327
    0x0B,0x4A,0x43,    //2011
    0x4B,0x55,0x37,    //2012
    0x0A,0xd5,0x4A,    //2013
    0x95,0x5A,0xBf,    //2014
    0x04,0xBA,0x53,    //2015
    0x0A,0x5B,0x48,    //2016
    0x65,0x2B,0xBC,    //2017
    0x05,0x2B,0x50,    //2018
    0x0A,0x93,0x45,    //2019
    0x47,0x4A,0xB9,    //2020
    0x06,0xAA,0x4C,    //2021
    0x0A,0xd5,0x41,    //2022
    0x24,0xdA,0xB6,    //2023
    0x04,0xB6,0x4A,    //2024
    0x69,0x57,0x3d,    //2025
    0x0A,0x4e,0x51,    //2026
    0x0d,0x26,0x46,    //2027
    0x5e,0x93,0x3A,    //2028
    0x0d,0x53,0x4d,    //2029
    0x05,0xAA,0x43,    //2030
    0x36,0xB5,0x37,    //2031
    0x09,0x6d,0x4B,    //2032
    0xB4,0xAe,0xBf,    //2033
    0x04,0xAd,0x53,    //2034
    0x0A,0x4d,0x48,    //2035
    0x6d,0x25,0xBC,    //2036
    0x0d,0x25,0x4f,    //2037
    0x0d,0x52,0x44,    //2038
    0x5d,0xAA,0x38,    //2039
    0x0B,0x5A,0x4C,    //2040
    0x05,0x6d,0x41,    //2041
    0x24,0xAd,0xB6,    //2042
    0x04,0x9B,0x4A,    //2043
    0x7A,0x4B,0xBe,    //2044
    0x0A,0x4B,0x51,    //2045
    0x0A,0xA5,0x46,    //2046
    0x5B,0x52,0xBA,    //2047
    0x06,0xd2,0x4e,    //2048
    0x0A,0xdA,0x42,    //2049
    0x35,0x5B,0x37,    //2050
    0x09,0x37,0x4B,    //2051
    0x84,0x97,0xC1,    //2052
    0x04,0x97,0x53,    //2053
    0x06,0x4B,0x48,    //2054
    0x66,0xA5,0x3C,    //2055
    0x0e,0xA5,0x4f,    //2056
    0x06,0xB2,0x44,    //2057
    0x4A,0xB6,0x38,    //2058
    0x0A,0xAe,0x4C,    //2059
    0x09,0x2e,0x42,    //2060
    0x3C,0x97,0x35,    //2061
    0x0C,0x96,0x49,    //2062
    0x7d,0x4A,0xBd,    //2063
    0x0d,0x4A,0x51,    //2064
    0x0d,0xA5,0x45,    //2065
    0x55,0xAA,0xBA,    //2066
    0x05,0x6A,0x4e,    //2067
    0x0A,0x6d,0x43,    //2068
    0x45,0x2e,0xB7,    //2069
    0x05,0x2d,0x4B,    //2070
    0x8A,0x95,0xBf,    //2071
    0x0A,0x95,0x53,    //2072
    0x0B,0x4A,0x47,    //2073
    0x6B,0x55,0x3B,    //2074
    0x0A,0xd5,0x4f,    //2075
    0x05,0x5A,0x45,    //2076
    0x4A,0x5d,0x38,    //2077
    0x0A,0x5B,0x4C,    //2078
    0x05,0x2B,0x42,    //2079
    0x3A,0x93,0xB6,    //2080
    0x06,0x93,0x49,    //2081
    0x77,0x29,0xBd,    //2082
    0x06,0xAA,0x51,    //2083
    0x0A,0xd5,0x46,    //2084
    0x54,0xdA,0xBA,    //2085
    0x04,0xB6,0x4e,    //2086
    0x0A,0x57,0x43,    //2087
    0x45,0x27,0x38,    //2088
    0x0d,0x26,0x4A,    //2089
    0x8e,0x93,0x3e,    //2090
    0x0d,0x52,0x52,    //2091
    0x0d,0xAA,0x47,    //2092
    0x66,0xB5,0x3B,    //2093
    0x05,0x6d,0x4f,    //2094
    0x04,0xAe,0x45,    //2095
    0x4A,0x4e,0xB9,    //2096
    0x0A,0x4d,0x4C,    //2097
    0x0d,0x15,0x41,    //2098
    0x2d,0x92,0xB5,    //2099
};
/***復位1302***/
void reset1302()
{
sclk=0;
rst=0;
rst=1;
}
/***向1302寫入1字節***/
void wrieteByte1302(uchar add)
{
uchar i;
  for(i=0;i<8;i++)
  {
   I_O=0;
   if(add&0x01)I_O=1;
   sclk=0;
   sclk=1;
   add>>=1;
  }
}
void writeClkBye(uchar add,uchar num)
{
reset1302();
wrieteByte1302(add);
wrieteByte1302(num);
}
/***1302初始化***/
void init1302()
{
reset1302();
writeClkBye(0x8e,0);     //允許寫入
reset1302();
writeClkBye(0x90,0xaa);    //慢充電
reset1302();
writeClkBye(0x80,00);    //秒初值
reset1302();
writeClkBye(0x82,0x12);    //分
reset1302();
writeClkBye(0x84,0x12);    // 時
reset1302();
writeClkBye(0x86,0x04);    // 日
reset1302();
writeClkBye(0x88,0x03);    // 月
reset1302();
writeClkBye(0x8a,0x07);    // 星期
reset1302();
writeClkBye(0x8c,0x12);    // 年
reset1302();
}
/***檢測忙位***/
void Check_Busy()
{  
    RS=0;
    RW=1;
    E=1;
    DataPort=0xff;
    while((DataPort&0x80)==0x80);//忙則等待
    E=0;
}
/***寫命令***/
void Write_Cmd(unsigned char Cmd)
{
Check_Busy();
RS=0;
RW=0;
E=1;
DataPort=Cmd;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
/****寫數據***/
void Write_Data(unsigned char Data)
{
Check_Busy();
RS=1;
RW=0;
E=1;
DataPort=Data;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
/****液晶屏初始化***/
void Init_ST7920()
{  
   DelayMs(40);           //大于40MS的延時程序
   PSB=1;                 //設置為8BIT并口工作模式
   DelayMs(1);            //延時
   RES=0;                 //復位
   DelayMs(1);            //延時
   RES=1;                 //復位置高
   DelayMs(10);
   Write_Cmd(0x30);       //選擇基本指令集
   DelayUs2x(50);         //延時大于100us
   Write_Cmd(0x30);       //選擇8bit數據流
   DelayUs2x(20);         //延時大于37us
   Write_Cmd(0x0c);       //開顯示(無游標、不反白)
   DelayUs2x(50);         //延時大于100us
   Write_Cmd(0x01);       //清除顯示,并且設定地址指針為00H
   DelayMs(15);           //延時大于10ms
   Write_Cmd(0x06);       //指定在資料的讀取及寫入時,設定游標的移動方向及指定顯示的移位,光標從右向左加1位移動
   DelayUs2x(50);         //延時大于100us
}
/****從1302讀取***/
uchar ReadByte1302()
{
uchar i;
uchar RByte;
uchar TempByte;
  RByte=0x00;
  I_O=1;
  for(i=0;i<8;i++)
  {
   sclk=1;
   sclk=0;
   TempByte=(uchar)I_O;
   TempByte<<=7;
   RByte>>=1;
   RByte|=TempByte;
  }
  return RByte;
}
uchar read1302(uchar add)
{
uchar num;
reset1302();
wrieteByte1302(add);
ReadByte1302();
num=ReadByte1302();
return num;
}
void LCDTestWord(bit i, uchar word)
{
if(i==0)
{
  Write_Cmd(word);               //i=0;則寫入指令
}
else
{
  Write_Data(word);                //i=1;則寫入數據  
}
}
/***向LCD發送一個字符串即寫漢字***/
void LCDSendWord(uchar *p)        
{
while(*p>0)                           
{
  Write_Data(*p);
  p++;
}
}
/***往LCD上填寫 年 月 日 小時 分鐘 秒 星期以及它們的 數據***/
void DisplayYear()                 
{
  year=read1302(0x8d);         //從1302的0X8D處讀出年數據
  LCDTestWord(0,0x81);             //寫指令  在第一行第二個字符位置顯示 年
  LCDTestWord(1,(year/16)+0x30);   //寫數據
  LCDTestWord(1,year%16+0x30);     //寫數據
  LCDTestWord(0,0x82);             //寫指令  第一行第三個字符位置
  LCDSendWord("年");               //顯示 年  LCD DDRAM第一行地址為80-87,
          //第二行為90-97,第三行為88-8F,第四行為98-9F
}
void DisplayMonth()               
{
month=read1302(0x89);          //從1302中讀取月份數據
  LCDTestWord(0,0x83);               //寫命令
  if(month/16!=0)
  {
    LCDTestWord(1,(month/16)+0x30);  //寫數據
  }
  else
  {
    LCDTestWord(1,0x20);             //寫數據
  }
  LCDTestWord(1,month%16+0x30);     //寫數據  
  LCDTestWord(0,0x84);              //寫指令
  LCDSendWord("月");                //顯示 月
}
void DisplayDay()                       
{
  day=read1302(0x87);              //從1302中讀取日期數據
  LCDTestWord(0,0x85);
    if(day/16!=0)   
    {
   LCDTestWord(1,(day/16)+0x30);
       }         
  else
     {
   LCDTestWord(1,0x20);
   }
  LCDTestWord(1,day%16+0x30);
  LCDTestWord(0,0x86);
  LCDSendWord("日");
}
void DisplayWeek()                  
{
  week=(read1302(0x8b))%16;      //從1302中讀取星期數據  
  LCDTestWord(0,0x95);
  LCDSendWord("星期");
  LCDTestWord(0,0x97);
  if(week==7)    {LCDSendWord("日");}
  if(week==6)    {LCDSendWord("六");}
  if(week==5)    {LCDSendWord("五");}
  if(week==4)    {LCDSendWord("四");}
  if(week==3)    {LCDSendWord("三");}
  if(week==2)    {LCDSendWord("二");}
  if(week==1)    {LCDSendWord("一");}  //顯示星期一到星期日
}
void DisplayHour()                 
{
  hour=read1302(0x85);
  LCDTestWord(0,0x90);
  LCDTestWord(1,(hour/16)+0x30);
  LCDTestWord(1,hour%16+0x30);
}
void DisplayMin()                    
{
  min=read1302(0x83);
  LCDTestWord(0,0x91);
  LCDTestWord(1,0x3a);    //寫入分割號 :
  LCDTestWord(1,(min/16)+0x30);
  LCDTestWord(1,min%16+0x30);
  LCDTestWord(1,0x3a);    //寫入分割號 :
}
void DisplaySec()                 
{
  sec=read1302(0x81);
  LCDTestWord(0,0x93);
  LCDTestWord(1,(sec/16)+0x30);
  LCDTestWord(1,sec%16+0x30);
}
void UpDate()
{
DisplayYear();     //顯示年
DisplayMonth();    //顯示月
DisplayDay();    //顯示日
DisplayWeek();    //顯示星期
DisplayHour();    //顯示時
DisplayMin();    //顯示分
DisplaySec();    //顯示秒
}
void SetTime(uchar count)
{
unsigned char address,item;
unsigned char max,mini;
LCDTestWord(0,0x98);
LCDSendWord("設置");
if(count==5)  {LCDSendWord("秒鐘      ");address=0x81; max=59;mini=0;}
if(count==4)  {LCDSendWord("分鐘      ");address=0x83; max=59;mini=0;}
if(count==3)  {LCDSendWord("小時      ");address=0x85; max=23;mini=0;}
if(count==6)  {LCDSendWord("星期      ");address=0x8b; max=7;mini=1;}
if(count==2)  {LCDSendWord("日期      ");address=0x87; max=31; mini=1;}
if(count==1)  {LCDSendWord("月份      ");address=0x89; max=12;mini=1;}
if(count==0)  {LCDSendWord("年份      ");address=0x8d; max=99;mini=0;}
item=read1302(address);//讀取DS1302某地址上的數值賦給item  
item=(item/16)*10+item%16;
if(k2==0)       //加
  item++;          //數加 1
if(k3==0)     //-減
  item--;          //數減 1
if(item>max)
  item=mini;       //查看數值有效范圍  
if(item<mini)
  item=max;
writeClkBye(0x8e,0x00);
item=(item/10)*16+item%10;
writeClkBye(address-1,item); //將調整好的item值寫入DS1302
    UpDate();
}
/*鍵盤掃描*/
void keyscan ()
{
if (k1==0)           // 設置時間
{
    DelayMs(10);         //按鍵消抖   
  if(k1==0&&w==0)  //當是正常狀態時就進入調時狀態
  {
   w=1;          //進入調時   
   SetTime(next);   //調整   
  }
  if(k1==0&&w==1)  //當是調時狀態 本鍵用于調整下一項
  {
   next++;
   if(next>=7)   {next= 0;}
   SetTime(next);   //調整   
  }
     while(k1==0);    //等待鍵松開
}
if(k4==0)           // 當在調時狀態時就退出調時
    {
  DelayMs(10);         //按鍵消抖
  if(k4==0&&w==1)
  {
   w=0;next=0;
Write_Cmd(0x01);      //清除LCD的顯示內容
  }
  while(k4==0);   //等待鍵松開
}
if (k2==0)          //加調整
{
     DelayMs(10);         //按鍵消抖
     if(k2==0&&w==1)
  {   
   SetTime(next);   //調整
  }
  while(k2==0);       //等待鍵松開
}
if (k3==0)        //減調整
{        
     DelayMs(10);         //按鍵消抖
     if(k3==0&&w==1)
  {   
   SetTime(next);   //調整
  }  
  while(k3==0);     //等待鍵松開
}  
}
/***開機畫面***/
void welcome()
{
     LCDTestWord(0,0x81);
  LCDSendWord("萬年歷設計");
     LCDTestWord(0,0x91);
  LCDSendWord("指導:…");
     LCDTestWord(0,0x89);
  LCDSendWord("制作:…");
     LCDTestWord(0,0x99);
  LCDSendWord("陽光總在風雨后");
}
bit GetMoonDay(uchar LunarMonth,uint TableAddr)
{
  uchar temp;
    switch (LunarMonth)                       //LunarMonth指向農歷月份
   {
        case 1:
      {
       temp=YearCode[TableAddr]&0x08;   //1月,對應年份表里第一字節的BIT3位
             if (temp==0) return(0);          //為0,月小  
       else  return(1);                 //為1,月大
      }
        case 2:
      {
       temp=YearCode[TableAddr]&0x04;   //2月,對應年份表里第一字節的BIT2位
         if (temp==0) return(0);          //為0,月小
       else  return(1);                 //為1,月大
      }
        case 3:
     {
      temp=YearCode[TableAddr]&0x02;   //3月,對應第一字節的BIT1位
      if (temp==0) return(0);          //為0,月小
      else  return(1);                 //為1,月大
     }
        case 4:
     {
      temp=YearCode[TableAddr]&0x01;    //1月,對應第一字節的BIT0位
      if (temp==0) return(0);     //為0,月小
      else return(1);       //為1,月大
     }
        case 5:
     {
      temp=YearCode[TableAddr+1]&0x80;  //5月,對應第二字節的BIT7位
      if (temp==0)  return(0);    //為0,月小
      else  return(1);       //為1,月大
     }
        case 6:
     {
      temp=YearCode[TableAddr+1]&0x40;  //6月,對應第二字節的BIT6位
      if (temp==0) return(0);     //為0,月小
      else  return(1);       //為1,月大
     }
        case 7:
     {
      temp=YearCode[TableAddr+1]&0x20;  //7月,對應第二字節的BIT5位
      if (temp==0) return(0);       //為0,月小
      else  return(1);       //為1,月大
     }
        case 8:
     {
      temp=YearCode[TableAddr+1]&0x10;  //8月,對應第二字節的BIT4位
      if (temp==0) return(0);     //為0,月小
      else  return(1);       //為1,月大
     }
        case 9:
     {
      temp=YearCode[TableAddr+1]&0x08;  //9月,對應第二字節的BIT3位
      if (temp==0) return(0);     //為0,月小
      else  return(1);       //為1,月大
     }
        case 10:
     {
      temp=YearCode[TableAddr+1]&0x04;  //10月,對應第二字節的BIT2位
      if (temp==0) return(0);           //為0,月小
      else  return(1);       //為1,月大
     }
        case 11:
     {
      temp=YearCode[TableAddr+1]&0x02;  //11月,對應第二字節的BIT1位
      if (temp==0) return(0);     //為0,月小
      else  return(1);        //為1,月大
     }
        case 12:
     {
      temp=YearCode[TableAddr+1]&0x01;  //12月,對應第二字節的BIT0位
      if (temp==0) return(0);     //為0,月小
      else  return(1);       //為1,月大
     }
        case 13:
     {
      temp=YearCode[TableAddr+2]&0x80;  //13月,對應第三字節的BIT7位
      if (temp==0) return(0);     //為0,月小
      else  return(1);       //為1,月大
     }
    }
}
void Conversion(uchar year,uchar month,uchar day)                             
{                        
    uchar temp1,temp2,temp3,MonthP;//temp3,temp4分別表示春節距元旦的天數
    uint temp4,TableAddr;     //公歷日離元旦的天數
    bit flag2,flag_y;
    temp1=year/16;              //BCD->hex 先把數據轉換為十六進制  高位
    temp2=year%16;              //低位
    year=temp1*10+temp2;        //把 年 數據 轉換成16進制
    temp1=month/16;             //月份 高位
    temp2=month%16;             //月份 低位
    month=temp1*10+temp2;       //把 月 數據 轉換成16進制
    temp1=day/16;               //日期 高位
    temp2=day%16;               //日期 低位
    day=temp1*10+temp2;         //把 日 數據 轉換成16進制                     
  TableAddr=year*0x03;         //定位數據表地址
  LCDTestWord(0,0x80);
  LCDSendWord("20");  
    temp1=YearCode[TableAddr+2]&0x60;       //取當年春節所在的公歷月份   年份表中第三字節BIT6-5表示春節的公歷月份
    temp1=_cror_(temp1,5);                  //循環右移5位,得到 春節所在的公歷月份
    temp2=YearCode[TableAddr+2]&0x1f;       //取當年春節所在的公歷日    年份表中第三字節BIT4-0表示當年春節所在的公歷日
    if(temp1==0x01)                         // 計算當年春年離當年元旦的天數,春節只會在公歷1月或2月   
        temp3=temp2-1;                      //假如春節在公歷1月,則元旦離春節的天數為  temp2-1 天
    else
        temp3=temp2+0x1f-1;                 //假如春節在公歷2月,則無旦離春節的天數為  temp2+0x1f-1 天
    if (month<10)
        temp4=DayCode1[month-1]+day-1;      //0到8月某日距元旦的天數
    else
        temp4=DayCode2[month-10]+day-1;     //9月開始的某一天距元旦的天數
    if ((month>0x02)&&(year%0x04==0))       //如果公歷月大于2月并且該年的2月為閏月,天數加1
        temp4+=1;
                                         //計算機出公歷日距元旦的天數和春節距元旦的天數,則是為了比較公歷日是在春節前還是春節后
                                         //如果temp3>temp4  則 公歷日在春節之前
    if (temp4>=temp3)                       //公歷日在春節后或就是春節當日使用下面代碼進行運算
   {   
        temp4-=temp3;                       //公歷日離春節的天數  因為公歷日在春節后  所以為temp4-temp3
        month=0x01;
        MonthP=0x01;                        //LunarMonth為月份指向,公歷日在春節前或就是春節當日LunarMonth指向首月
        flag2=GetMoonDay(MonthP,TableAddr); //檢查該農歷月為大小還是小月,大月返回1,小月返回0
        flag_y=0;
        if(flag2==0)                            //GetMoonDay()函數返回的是0
     {temp1=0x1d;}                       //小月29天
        else                                    //GetMoonDay()函數返回的是1
     {temp1=0x1e;}                       //大月30天
        temp2=YearCode[TableAddr]&0xf0;         //年份數據表中第1字節BIT7-4為閏月,為0則這年無閏月,如為1,表示有閏月
        temp2=_cror_(temp2,4);                  //從數據表中取該年的閏月月份,如為0,則該年無閏月  BIT3-0表示陰歷1到4月的大小 1為大 0 為小
        while(temp4>=temp1)
      {
            temp4-=temp1;
            MonthP+=1;
            if(month==temp2)
          {
              flag_y=~flag_y;
              if(flag_y==0)month+=1;
              }
            else month+=1;      
            flag2=GetMoonDay(MonthP,TableAddr);
            if(flag2==0)temp1=0x1d;
            else temp1=0x1e;
          }
        day=temp4+1;
     }
    else
   {               //公歷日在春節前使用下面代碼進行運算
        temp3-=temp4;                          //公歷日離春節的天數  因為公歷日在春節前  所以為temp3-temp4
        if (year==0x00){year=0x63;}
        else year-=1;
        TableAddr-=0x03;
        month=0x0c;
        temp2=YearCode[TableAddr]&0xf0;    //格式第一字節BIT7-4位表示閏月月份,為0,則無閏月,BIT3-0對應陰歷第1-4月的大小,
        temp2=_cror_(temp2,4);
        if (temp2==0)MonthP=0x0c;
        else MonthP=0x0d; //
        /* MonthP為月份指向,如果當年有閏月,一年有十三個月,月指向13,無閏月指向12*/
       flag_y=0;
        flag2=GetMoonDay(MonthP,TableAddr);
        if(flag2==0)temp1=0x1d;
        else temp1=0x1e;
        while(temp3>temp1)
     {
            temp3-=temp1;
            MonthP-=1;
            if(flag_y==0)month-=1;
            if(month==temp2)flag_y=~flag_y;
            flag2=GetMoonDay(MonthP,TableAddr);
            if(flag2==0)temp1=0x1d;
            else temp1=0x1e;
         }
        day=temp1-temp3+1;
     }
    c_moon=1;               
    temp1=year/10;
    temp1=_crol_(temp1,4);
    temp2=year%10;
    LunarYear=temp1|temp2;
    temp1=month/10;
    temp1=_crol_(temp1,4);
    temp2=month%10;
    LunarMonth=temp1|temp2;
    temp1=day/10;
    temp1=_crol_(temp1,4);
    temp2=day%10;
    LunarDay=temp1|temp2;
}
void Displaynongli()
{
  uchar LunarYearD,ReYear;
  Conversion(year,month,day);
  LCDTestWord(0,0x88);                     //顯示在LCD的0X94位置上
  LCDSendWord("農歷");
  LCDTestWord(1,LunarMonth/16+0x30);       //農歷月十位
  LCDTestWord(1,LunarMonth%16+0x30);       //農歷月個位  
  LCDSendWord("月");
  LCDTestWord(1,LunarDay/16+0x30);         //農歷日十位
  LCDTestWord(1,LunarDay%16+0x30);         //農歷日個位
  LunarYearD=(LunarYear/16)*10+LunarYear%16;        //農歷年轉換成10進制數
  ReYear=LunarYearD%12;                             //農歷年模12,取余運算
  switch(ReYear)
  {
  case 0: LCDTestWord(0,0x8e);LCDSendWord("龍年");break;   //余0即整除 農歷 龍年
  case 1: LCDTestWord(0,0x8e);LCDSendWord("蛇年");break;   //蛇年
  case 2: LCDTestWord(0,0x8e);LCDSendWord("馬年");break;
  case 3: LCDTestWord(0,0x8e);LCDSendWord("羊年");break;
  case 4: LCDTestWord(0,0x8e);LCDSendWord("猴年");break;
  case 5: LCDTestWord(0,0x8e);LCDSendWord("雞年");break;
  case 6: LCDTestWord(0,0x8e);LCDSendWord("狗年");break;
  case 7: LCDTestWord(0,0x8e);LCDSendWord("豬年");break;
  case 8: LCDTestWord(0,0x8e);LCDSendWord("鼠年");break;
  case 9: LCDTestWord(0,0x8e);LCDSendWord("牛年");break;
  case 10:LCDTestWord(0,0x8e);LCDSendWord("虎年");break;
  case 11:LCDTestWord(0,0x8e);LCDSendWord("兔年");break;
}
}
/***主程序***/
main()
{
k1=1;
k2=1;
k3=1;
k4=1;
Init_ST7920();
welcome();
delay(3000);
init1302();
Init_ST7920();
while(1)
{
   DisplayYear();         //顯示年
   DisplayMonth();          //顯示月
   DisplayDay();      //顯示日
   DisplayWeek();      //顯示星期
   DisplayHour();      //顯示時
   DisplayMin();      //顯示分
   DisplaySec();      //顯示秒
   Displaynongli();         //顯示農歷
   keyscan();               //鍵盤掃描
}
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:82765 發表于 2017-9-6 18:18 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看成人小视频 | 日韩一区在线视频 | 在线伊人 | 欧美日韩国产一区二区三区 | 成人av免费| 日本不卡高字幕在线2019 | 天天爽网站 | 久久综合狠狠综合久久综合88 | 国产成人a亚洲精品 | 日韩视频一区二区 | 亚洲色在线视频 | 精品久久一区二区三区 | 日本三级网址 | 亚洲精品一区二区三区四区高清 | 自拍偷拍第一页 | 免费视频一区二区 | 国产成人jvid在线播放 | 亚洲视屏| 久久精品69 | 国产日韩精品在线 | 99精品国产一区二区三区 | 成人黄色三级毛片 | 亚洲 日本 欧美 中文幕 | 国产999精品久久久久久 | 亚洲综合一区二区三区 | 日本不卡免费新一二三区 | 一级黄色录像毛片 | 午夜国产精品视频 | 天堂网中文字幕在线观看 | 91伊人| 亚洲国产成人精品女人久久久 | 99精品欧美一区二区三区 | 日韩精品一区二区三区中文字幕 | 亚洲一区欧美 | 日韩一区二区三区在线观看 | 久久伊 | 亚洲欧美一区二区三区情侣bbw | 欧美99| 日日干夜夜操 | 国产美女在线播放 | 毛片一区二区 |