久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

紅外遙控器+DS1320+89C52+1602的電子時鐘程序 95%是自己寫的

 快樂讀書法 2015-12-06
 本帖最后由 daxiao 于 2015-3-22 02:36 編輯

功能
1.時間顯示(完成)             RAM2.5KB
2.整點報時  (完成)           RAM2.5KB
3.量程為24小時的秒表(完成)RMA3.5KB
4.時間調整  (完成)RMA 4.5KB
5.鬧鐘       (完成)RAM4.8K
6.防盜警戒(未完成)
7.計算機 (未完成)
8.邏輯分析儀(未完成)



                  
                  



  1.   #include<reg52.h>          //頭文件
  2.       #define uchar unsigned char     //宏定義
  3.       #define uint unsigned int    //宏定義
  4.    volatile char ws;      

  5. uchar lcd6;
  6. uchar jm;
  7. uchar n,y,r,s,f,m,z;
  8. uchar ns,nf,nm;
  9. uchar we;
  10. uchar bla,blb,blc;
  11.     sbit ACC_7=ACC^7;    //位寄存器
  12. sbit SCLK=P1^3;       //時鐘引腳定義
  13. sbit DIO=P1^4;        //IO引腳定義  
  14. sbit CE=P1^5;     //讀,、寫數(shù)據(jù)期間,,必須為高
  15. sbit LCD_RS=P1^0;         //寄存器選擇位                                               
  16.     sbit LCD_RW=P1^1;          //讀寫控制位                                             
  17.     sbit LCD_EN=P1^2;           //開關   
  18. sbit FMQ=P3^7;              //定義蜂鳴引腳

  19.        uchar code LCD[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};   //LCD的數(shù)字整形碼
  20.    uchar code LCDDZ[13]={0x02,0x03,0x05,0x06,0x08,0x09,0x43,0x48,0x49,0x4b,0x4c,0x4e,0x4f};
  21.          uchar code LCD7_1[16]={"1.clock shows   "};     //界面1入口,“時鐘顯示”
  22.          uchar code LCD7_2[16]={"2.second clock  "};     //界面2入口,,“秒的時鐘”
  23.          uchar code LCD7_3[16]={"3.alarm clock   "};     //界面3入口,,“鬧鐘”
  24.          uchar code LCD7_4[16]={"4.onguard       "};     //界面4入口,“值班警戒”
  25.          uchar code LCD7_5[16]={"5.news          "};     //界面5人口,"信息"
  26.    uchar code LCD7_6[16]={"6.time alter    "};         //界面6修改時間
  27.    uchar code LCD8_0[16]={"      09 DZ1B   "};
  28.          uchar code  LCD1_0[16]={"20  .  .        "};     //界面1,,時間顯示
  29.          uchar code  LCD1_1[16]={"WEEK      :  :  "};     //界面1,,時間顯示
  30.          uchar code  LCD2_0[16]={"    00:00:00    "};      //界面2,秒表
  31.          uchar code  LCD3_0[16]={"alarm 00:00:00  "};       //界面3,,時間設置
  32.          uchar code  LCD4_0[16]={"00:00   -  00:00"};       //界面4,,警戒時間設置
  33.          uchar code  LCD5_0[16];    //界面5,信息欄記錄陌生人進人情況
  34.          uchar code  LCD5_1[16];    //界面5,信息欄記錄陌生人進人情況
  35.          uchar code  LCD5_2[16];    //界面5,,信息欄記錄陌生人進人情況
  36.          uchar code  LCD5_3[16];    //界面5,,信息欄記錄陌生人進人情況
  37.          uchar code  LCD5_4[16];    //界面5,信息欄記錄陌生人進人情況
  38.    uchar code LCD6_0[16]={"20  .  .        "};
  39.    uchar code LCD6_1[16]={"WEEK      :  :  "};
  40.   uchar code LCDY[5];
  41.         uchar code LCDR[5];
  42.      uchar code LCDS[5];
  43.      uchar code LCDF[5];
  44.      uchar code LCDM[5];


  45.    //-------------------延時子函數(shù) ---//
  46.    void delay(uint ms)
  47.    {
  48.     uchar ii,jj;
  49.     for(ii=0;ii<ms;ii++)
  50.     {
  51.     for(jj=0;jj<121;jj++)
  52.     {;}
  53.     }
  54.    }
  55.    //------------------X1302------//
  56.    void X1302(uchar add,uchar dat) //地址,,數(shù)據(jù)   
  57.    {
  58.    uchar aa;
  59. CE=0;    //關閉讀寫使能,,讀、寫數(shù)據(jù)期間,,必須為高
  60. SCLK=0;  //拉低時鐘線
  61. CE=1;  //開啟讀寫使能
  62. for(aa=0;aa<8;aa++)   //寫入地址
  63. {
  64.   DIO=add&0x01;     //把add的最低位送給數(shù)據(jù)線
  65.   SCLK=1;       //時鐘拉高
  66.   add>>=1;    //累加器右移1位
  67.   SCLK=0;     //時鐘拉
  68.    
  69. }
  70. for(aa=0;aa<8;aa++)   //寫入數(shù)據(jù)
  71. {
  72.   DIO=dat&0x01;   //把要寫入1302的數(shù)據(jù)地位送到數(shù)據(jù)線
  73.   SCLK=1;      //時鐘拉高,,把數(shù)據(jù)發(fā)送出去
  74.   dat>>=1;      //數(shù)據(jù)右移1位,把最低位去掉
  75.   SCLK=0;       //把時鐘拉低,,準備下一次發(fā)數(shù)據(jù)
  76. }
  77. SCLK=1;        //寫完數(shù)據(jù)要把時鐘線拉高,,要是讀完數(shù)據(jù)的話就要拉低時鐘線
  78. CE=0;         //關閉讀寫使能
  79.     return;
  80.     }
  81. //-------------------D1302-------------//
  82. uchar D1302(uchar addr)  //讀數(shù)據(jù)子函數(shù)    輸入地址,返回數(shù)據(jù)
  83.    {
  84.     uchar  ab,temp,dat1,dat2;   //定義變量
  85.     CE=0;       //關閉讀寫數(shù)據(jù)使能
  86.     SCLK=0;       //時鐘拉低,,準備要接收數(shù)據(jù)
  87.     CE=1;        //開讀寫數(shù)據(jù)使能
  88.   for(ab=8;ab>0;ab--)   //發(fā)地址
  89.   {
  90.    SCLK=0;     //時鐘拉低,,準備接收數(shù)據(jù)
  91.    temp=addr;   //把地址送給變量temp
  92.    DIO=(bit)(temp&0x01);  //傳送低字節(jié)
  93.    addr>>=1;    //地址addr右移1位
  94.    SCLK=1;    //時鐘拉高 ,讓1302讀入地址
  95.   }
  96.   for(ab=8;ab>0;ab--)  //讀數(shù)據(jù)
  97.   {
  98.     ACC_7=DIO; // ACC-7=接收新的一位數(shù)據(jù)
  99.     SCLK=1;   //時鐘拉高,,告訴1302我接收到數(shù)據(jù)了??!
  100.     ACC>>=1;   //ACC右移1位,,把剛接到的數(shù)據(jù)移到低位去
  101.     SCLK=0;   //時鐘拉低,告訴1302,,請為我準備下一個數(shù)據(jù)
  102.   }
  103.   CE=0;     //關閉讀寫數(shù)據(jù)使能
  104.   dat1=ACC;  //把ACC的數(shù)據(jù)送給dat1
  105.   dat2=dat1/16;    //數(shù)據(jù)轉換  dat2=數(shù)據(jù)的 "十六位"
  106.   dat1=dat1%16;  //數(shù)據(jù)轉換   dat1=數(shù)據(jù)的 "個位"
  107.   dat1=dat1+dat2*10;  //再一次數(shù)據(jù)轉換(把接收到的BCD碼轉換成十進制碼)
  108.   return(dat1);   //反回讀到的數(shù)據(jù)
  109.    }
  110.    //-----------檢查LCD忙狀態(tài)  --//                                                                             
  111.       void lcd_busy()                                                            
  112.    {                                                                        
  113. P0=0xff;                                         
  114.     LCD_RS=0;              //選擇指令寄存器                                             
  115.     LCD_RW=1;              //進行讀操作                                             
  116.     LCD_EN=1;               //使能                                             
  117.     while((P0&0x80)==0x80);                                 
  118.   LCD_EN=0;                       //關使能                                                            
  119.     }   
  120. //-----------------------------讀LCD顯示的數(shù)字--//
  121. uchar lcd_sz(uchar sxs)                                                            
  122.    {
  123.    uchar xx;
  124.      delay(2);                                      
  125.     LCD_RS=0;                   //選擇指令                                       
  126.     LCD_RW=0;                    //選擇寫操作                           
  127.     LCD_EN=0;                    //關使能 ,讓P0數(shù)據(jù)線上數(shù)據(jù)                                                                          
  128.     P0=(sxs|0x80);                      //DDRAM數(shù)據(jù)指針=80+地址變量                                       
  129.     delay(2);                              
  130.     LCD_EN=1;                   //開使能 ,讓LCD讀單片機的指令                                       
  131.     delay(5);  
  132. LCD_EN=0;                   //關使能                                                                 
  133. P0=0xff;                    //置高電平                     
  134.     LCD_RS=1;              //選擇指令寄存器                                             
  135.     LCD_RW=1;              //進行讀操作
  136. LCD_EN=1;              //開使能                                   
  137. delay(2);                                      
  138.      xx=P0;                 //記錄數(shù)據(jù)                 
  139.   LCD_EN=0;             //關使能   
  140.   return xx;                                                      
  141.     }   
  142. //----------------------寫指令數(shù)據(jù)到LCD  --//
  143. void lcd_wcmd(uchar cmd)                                                  
  144. {                                                                        
  145.     lcd_busy();                                      
  146.     LCD_RS=0;                   //選擇寫操作                                       
  147.     LCD_RW=0;                    //進行寫操作                           
  148.     LCD_EN=0;                    //關使能 ,讓數(shù)據(jù)線上數(shù)據(jù)                                                                          
  149.     P0=cmd;                       //送指令代碼                                       
  150.     delay(2);                              
  151.     LCD_EN=1;                   //開使能 ,讓單片機讀指令                                       
  152.     delay(5);                                       
  153.     LCD_EN=0;                   //關使能     
  154.   return;                                    
  155. }   
  156. //-------------------------寫顯示數(shù)據(jù)到LCD --//
  157. void lcd_wdat(uchar dat)                                                  
  158. {                                                                        
  159.     lcd_busy();     //讀忙                                                   
  160.     LCD_RS=1;     //選擇數(shù)據(jù)寄存器                                                      
  161.     LCD_RW=0;     //進行讀操作                                                      
  162.     LCD_EN=0;     //關使能                                                      
  163.     P0=dat;  //寫入要顯示的字符                                                                                                                     
  164.     LCD_EN=1;    //開使能 ,,讓LCD讀進數(shù)據(jù)                                                      
  165.     delay(2);                                                            
  166.     LCD_EN=0;    //關使能   ,不讓LCD操作                 
  167.   return;                                    
  168. }
  169. //----------------------設定顯示位置  pos是屏幕的地址 --//
  170.                                                                           
  171. void lcd_pos(uchar pos)                                                   
  172. {                                                                        
  173.    lcd_busy();                                      
  174.     LCD_RS=0;                   //選擇寫操作                                       
  175.     LCD_RW=0;                    //進行寫操作                           
  176.     LCD_EN=0;                    //關使能 ,讓數(shù)據(jù)線上數(shù)據(jù)                                                                          
  177.     P0=(pos|0x80);                      //DDRAM數(shù)據(jù)指針=80+地址變量                                       
  178.     delay(2);                              
  179.     LCD_EN=1;                   //開使能 ,讓單片機讀指令                                       
  180.     delay(5);                                       
  181.     LCD_EN=0;                   //關使能   
  182.   return;               
  183. }
  184. //-----------------------LCD初始化設定   --//                                                                        
  185. void lcd_init()                                                           
  186. {                                                                        
  187.      lcd_busy();     //讀忙                 
  188.     lcd_wcmd(0x3c);           //工作方式設置8位長,兩行,,5*7
  189.     delay(5);                //延時5ms                                            
  190.     lcd_wcmd(0x02);                                                   
  191.     delay(5);                //延時5ms                                          
  192.     lcd_wcmd(0x06);          //設置輸入方式為AC是加1計數(shù)器,,畫面禁止?jié)L動                                             
  193.     delay(5);                //延時5ms                                                                                       
  194.     lcd_wcmd(0x0c);          //顯示開,,關光標                             
  195.     delay(5);                //延時5mS   
  196.   return;                                                                                                                                               
  197. }   
  198. //---------------閃動子程序   //
  199. void fengming(uchar fm)                                                              
  200. {                                                                        
  201.    for(;fm<0;fm--)
  202.    {              
  203.     FMQ=0;  
  204.     lcd_wcmd(0x08);            //關閉顯示                                 
  205.     delay(200);
  206.     FMQ=1;                    //延時                                 
  207.     lcd_wcmd(0x0c);            //開顯示                                   
  208.     delay(200);
  209. }   
  210.   return;                                                                                            
  211. }
  212. //----------------------- 紅外--//
  213. void int_init(void)      //初始化
  214. {
  215. EX0=1;        //開外部中斷0
  216. EX1=1;                   //INT1開   
  217. IT1=1;                     //負跳變觸發(fā)
  218. EA=1;      //開總開關
  219.   return;
  220. }
  221. //------------------------------------------------//
  222. void interrupt0()interrupt 0    //總斷子函數(shù)
  223. {
  224. uchar i=0,j=0,k=0,us=0;     //定義字符變量i j k us
  225. uchar addr[4]={0};    //定義字符型數(shù)組

  226. EX0=0;         //關中斷總開關

  227. for(i=0;i<255;i++)  //9ms內(nèi)有高電平認為是干擾
  228. {
  229.   if(P3&0x04)     //255的值實際時間為800us
  230.   {
  231.    EX0=1;
  232.    return;
  233.   }
  234. }
  235. while(!(P3&0x04)); //等待9ms低電平過去
  236.     for(i=0;i<4;i++)
  237. {
  238.   for(j=0;j<8;j++)
  239.   {
  240.    while(P3&0x04); //等待4.5ms高電平過去
  241.    while(!(P3&0x04)); //等待0.56ms低電平后面的高電平
  242.    while(P3&0x04)  //計算這個高電平的時間
  243.    {
  244.     for(us=0;us<=32;us++); //100us的延時語句
  245.     if((k++)>=30)  //高電平時間過長退出程序
  246.     {
  247.      EX0=1;
  248.      return;
  249.     }
  250.    }
  251.    addr[i]=addr[i]>>1; //接收一位數(shù)據(jù)
  252.    if(k>=8)
  253.     addr[i]=addr[i]|0x80; //高電平大于0.56ms,則為1
  254.    k=0;
  255.   }
  256. }
  257. ws=addr[2];
  258. FMQ=0;
  259. for(j=5;j>0;j++)
  260. {
  261. for(i=0;i<121;i++)
  262. {;}
  263. }
  264. FMQ=1;
  265. EX0=1;  
  266. }
  267. //------------------------------------------//
  268. void interrupt2()interrupt 2  //總斷子函數(shù)
  269. {
  270.     uchar d,e;
  271. EX0=0;
  272. FMQ=0;
  273. for(bla=0;bla<3;bla++)
  274. {
  275.   for(blb=0;blb<121;blb++)
  276.   {for(d=0;d<1000;d++)
  277.   {
  278.    for(e=0;e<40;e++)
  279.    {
  280.    ;
  281.    }
  282.       FMQ=~FMQ;
  283.       }
  284.     for(d=0;d<350;d++)
  285.   {
  286.    for(e=0;e<140;e++)
  287.    {
  288.    ;
  289.    }
  290.       FMQ=~FMQ;
  291.       }
  292.          }
  293. }
  294. FMQ=1;
  295. EX0=1;  
  296. }     
  297. //---------------------------------主菜單  JM7---------/
  298. void JM7CD()
  299. {
  300.   uchar K7=1;
  301.   uchar i;
  302.   if(jm==0x70)
  303.   {
  304.   jm=0x71;
  305.   }
  306.   lcd_wcmd(0x0f);
  307.   delay(2);
  308.   ws=0x01;
  309.   while(K7)
  310.   {
  311.    while(ws==0x00);
  312.   {
  313.      switch(ws)
  314.   {
  315.    case 0x43:    //確認
  316.              jm%=16;
  317.     jm*=16;
  318.     K7=0;
  319.              break;
  320.     case 0x47:    //確認
  321.              jm%=16;
  322.     jm*=16;
  323.     K7=0;
  324.              break;
  325.    case 0x44:   //上一條
  326.              if(jm>0x71)
  327.     {
  328.              jm-=0x01;
  329.     }
  330.              break;
  331.     case 0x07:   //上一條
  332.              if(jm>0x71)
  333.     {
  334.              jm-=0x01;
  335.     }
  336.              break;
  337.      case 0x19:   //上一條
  338.              if(jm>0x71)
  339.     {
  340.              jm-=0x01;
  341.     }
  342.              break;

  343.    case  0x40:     //下一條
  344.              if(jm<0x76)
  345.     {
  346.      jm+=0x01;
  347.     }
  348.              break;
  349.     case  0x15:     //下一條
  350.              if(jm<0x76)
  351.     {
  352.      jm+=0x01;
  353.     }
  354.              break;
  355.     case  0x0d:     //下一條
  356.              if(jm<0x76)
  357.     {
  358.      jm+=0x01;
  359.     }
  360.              break;
  361.    case 0x0c:     //第1界面
  362.              jm=0x10;
  363.     K7=0;
  364.              break;
  365.    case  0x18:       //第2界面
  366.              jm=0x20;
  367.     K7=0;
  368.     break;
  369.    case  0x5e:       //第3界面
  370.              jm=0x30;
  371.     K7=0;
  372.     break;
  373.    case  0x08:        //第4界面
  374.              jm=0x40;
  375.     K7=0;
  376.     break;
  377.    case  0x1c:      //第5界面
  378.              jm=0x50;
  379.     K7=0;
  380.     break;
  381.    case  0x5a:        //第6界面
  382.              jm=0x60;
  383.     K7=0;
  384.     break;
  385.    default:
  386.              break;
  387.   }
  388. }
  389.     delay(10);
  390. {
  391. switch(jm)
  392. {
  393.   case 0x71:
  394.          lcd_pos(0x00);
  395.            delay(2);
  396.            for(i=0;i<16;i++)
  397.            {
  398.             lcd_wdat(LCD7_1[i]);                           // 1.clock shows   界面1入口,,“時鐘顯示”           
  399.    delay(2);
  400.             }
  401.       lcd_pos(0x40);
  402.             delay(2);
  403.             for(i=0;i<16;i++)
  404.            {
  405.            lcd_wdat(LCD7_2[i]);                           //2.second clock  
  406.      delay(2);
  407.            }
  408.     break;
  409.   case 0x72:
  410.        for(i=0;i<16;i++)
  411.            {
  412.            lcd_wdat(LCD7_2[i]);                           //2.second clock  
  413.      delay(2);
  414.            }
  415.      lcd_pos(0x40);
  416.          for(i=0;i<16;i++)
  417.          {                        
  418.          lcd_wdat(LCD7_3[i]);                        //3.alarm clock  界面3入口,,“鬧鐘”   
  419.       delay(2);
  420.          }
  421.    break;
  422.   case 0x73:
  423.        for(i=0;i<16;i++)
  424.            {
  425.            lcd_wdat(LCD7_3[i]);                           //3.second clock  
  426.      delay(2);
  427.            }
  428.      lcd_pos(0x40);
  429.          for(i=0;i<16;i++)
  430.          {                        
  431.          lcd_wdat(LCD7_4[i]);                        //4.alarm clock  界面3入口,“鬧鐘”   
  432.       delay(2);
  433.          }
  434.    break;
  435.   case 0x74:        //4.alarm clock  界面3入口,,“鬧鐘”
  436.        for(i=0;i<16;i++)
  437.            {
  438.            lcd_wdat(LCD7_4[i]);                           
  439.      delay(2);
  440.            }
  441.      lcd_pos(0x40);
  442.          for(i=0;i<16;i++)       //5
  443.          {                        
  444.          lcd_wdat(LCD7_5[i]);                       
  445.       delay(2);
  446.          }
  447.    break;
  448.   case 0x75:
  449.        for(i=0;i<16;i++)
  450.            {             //  5
  451.            lcd_wdat(LCD7_5[i]);                       
  452.      delay(2);
  453.            }
  454.      lcd_pos(0x40);
  455.          for(i=0;i<16;i++)
  456.          {           //6            
  457.          lcd_wdat(LCD7_6[i]);                        
  458.       delay(2);
  459.          }
  460.    break;
  461.    case 0x76:
  462.        for(i=0;i<16;i++)
  463.            {             //  5
  464.            lcd_wdat(LCD7_6[i]);                       
  465.      delay(2);
  466.            }
  467.      lcd_pos(0x40);
  468.          for(i=0;i<16;i++)
  469.          {           //6            
  470.          lcd_wdat(LCD8_0[i]);                        
  471.       delay(2);
  472.          }
  473.   
  474.    break;
  475.   default:break;
  476. }
  477. lcd_pos(0x00);
  478.     delay(2);  
  479. }
  480. ws=0x00;
  481.   }
  482.   lcd_wcmd(0x0c);
  483.    return;      
  484. }
  485. //-------------------------------------------JM1 顯示時間//
  486. void JM1SJ()
  487. {
  488. uchar K1=1;
  489. lcd_pos(0x00);
  490.    for(K1=0;K1<16;K1++)
  491.   {
  492.     lcd_wdat(LCD1_0[K1]);   
  493.     delay(2);
  494.    }
  495.    lcd_pos(0x40);
  496.    for(K1=0;K1<16;K1++)
  497.    {
  498.        lcd_wdat(LCD1_1[K1]);
  499.     delay(2);
  500.    }
  501.    K1=1;
  502.   while(K1)
  503. {
  504.   n=D1302(0x8d);      //讀1302的年
  505.   delay(1);  
  506.   y=D1302(0x89);      //讀1302的月   
  507.   delay(1);
  508.   r=D1302(0x87);      //讀1302的日     
  509.   delay(1);
  510.   s=0x1f&D1302(0x85);      //讀1302的時
  511.   delay(1);
  512.   f=0x7f&D1302(0x83);      //讀1302的分   
  513.   delay(1);
  514.   m=0x7f&D1302(0x81);      //讀1302的秒   
  515.   delay(1);
  516.   z=D1302(0x8b);      //讀1302的星期
  517.   delay(1);
  518.   lcd_pos(0x02);      //定位
  519.   delay(2);
  520.   lcd_wdat(LCD[n/10]);    //寫 LCD1602顯示十位年
  521.   delay(1);
  522.   lcd_wdat(LCD[n%10]);  //寫LCD1602顯示年
  523.   delay(1);
  524.   lcd_pos(0x05);    //定位
  525.   delay(2);
  526.   lcd_wdat(LCD[y/10]);    //寫顯示十位月
  527.   delay(1);
  528.   lcd_wdat(LCD[y%10]);    //寫顯示月
  529.   delay(1);
  530.   lcd_pos(0x08);      //定位
  531.   delay(2);
  532.   lcd_wdat(LCD[r/10]);   //寫顯示十位日
  533.   delay(1);
  534.   lcd_wdat(LCD[r%10]);    //寫顯示日
  535.   delay(1);
  536.   lcd_pos(0x44);      //定位
  537.   delay(2);
  538.   lcd_wdat(LCD[z]);       //寫顯示星期
  539.   delay(1);
  540.   lcd_pos(0x48);     //定位
  541.   delay(2);
  542.   lcd_wdat(LCD[s/10]);    //顯示十位時
  543.   delay(1);
  544.   lcd_wdat(LCD[s%10]);     //顯示時
  545.   delay(1);
  546.   lcd_pos(0x4b);          //定位
  547.   delay(2);
  548.   lcd_wdat(LCD[f/10]);        //顯示十位分
  549.   delay(1);
  550.   lcd_wdat(LCD[f%10]);           //顯示分
  551.   delay(1);
  552.   lcd_pos(0x4e);              //定位
  553.   delay(2);
  554.   lcd_wdat(LCD[m/10]);        //顯示秒的十位
  555.   delay(2);
  556.   lcd_wdat(LCD[m%10]);     //顯示秒的個位
  557.   delay(2);
  558.   while(s==ns&&f==nf&&m==nm&&we==1)     //鬧鐘
  559.   {
  560.   while(ws==0x00)
  561.   {
  562.     FMQ=0;
  563. for(s=5;s>0;s++)
  564. {
  565. for(m=0;m<121;m++)
  566. {;}
  567. }
  568. FMQ=1;
  569.   }
  570.   ws=0x99;
  571.   s++;
  572.   }

  573.   while(f==0x00||f==0x1e)      //整點報時
  574.   {

  575.   while(m<0x01)
  576.   {
  577.     FMQ=0;
  578. delay(3);
  579. m=0x03;
  580.   }
  581.   FMQ=1;
  582.    f++;
  583.   }

  584.   while(ws==0x45||ws==0x46)      // 退出
  585.   {
  586.   K1=0;
  587.   jm=0x70;
  588.   ws=0x00;
  589.   }
  590. }
  591. return;
  592. }
  593. //------------------------------------------JM2MB 秒表//
  594. void JM2MB()
  595. {
  596. uchar K2=1;          //定義變量K2
  597. uint bs,bf,bm;       //定義變量bs,bf,bm 時分秒
  598. uchar  i,j;         //定義變量i,j
  599. lcd_wcmd(0x01);       // 寫清屏指令到LCD
  600. lcd_pos(0x00);      //設定LCD的顯示位置0x00
  601. for(i=0;i<16;i++)     //把秒表的摸塊顯示出來  00:00:00
  602. {
  603. lcd_wdat(LCD2_0[i]);
  604. }
  605. while(K2)        //進入K2函數(shù)循環(huán)
  606. {
  607.     bs=0x1f&D1302(0x85);     //讀當前時間時
  608. bf=0x7f&D1302(0x83);     //讀當前時間分
  609. bm=0x7f&D1302(0x81);     //讀當前時間秒
  610. delay(10);
  611.    while(ws==0x43)        //開始計時循環(huán)
  612.    {
  613.      j=0x7f&D1302(0x81);    //變量j賦值時間秒
  614.   i=j;
  615.   if(j<bm)       //判斷j和bm那個大
  616.   {j=bm-j;
  617.    j=0x3c-j;
  618.   }
  619.    else{j-=bm;}
  620.   lcd_pos(0x0a);              //定位
  621.      delay(2);
  622.      lcd_wdat(LCD[j/0x0a]);        //顯示秒的十位
  623.      delay(2);
  624.      lcd_wdat(LCD[j%0x0a]);     //顯示秒的個位
  625.      delay(2);


  626.     delay(2);
  627. j=0x7f&D1302(0x83);      //變量j賦值時間分
  628. if(j<bf&&i<bm)
  629. {j=bf-j;
  630.   j=0x3c-j;
  631.   j-=0x01;
  632. }
  633.   else if(j<bf&&i>=bm)
  634.   {
  635.   j=bf-j;
  636.   j=0x3c-j;
  637.   }
  638.   else if(j>bf&&i<bm)
  639.   {
  640.    j-=bf;
  641.    j-=0x01;
  642.   }
  643.   else {j-=bf;}
  644. lcd_pos(0x07);          //定位
  645. delay(2);
  646.     lcd_wdat(LCD[j/0x0a]);        //顯示十位分
  647.     delay(1);
  648.     lcd_wdat(LCD[j%0x0a]);           //顯示分
  649.     delay(1);


  650. delay(2);
  651. i=0x7f&D1302(0x83);     //讀當前時間分
  652. j=0x1f&D1302(0x85);     //讀當前時間時
  653. if(j<bs&&i<bf)
  654. {j=bs-j;
  655.   j=0x3c-j;
  656.   j-=0x01;
  657. }
  658.   else if(j<bs&&i>=bf)
  659.   {
  660.   j=bs-j;
  661.   j=0x3c-j;
  662.   }
  663.   else if(j>bs&&i<bf)
  664.   {
  665.    j-=bs;
  666.    j-=0x01;
  667.   }
  668.   else {j-=bs;}
  669. lcd_pos(0x04);          //定位
  670. delay(2);
  671.     lcd_wdat(LCD[j/0x0a]);        //顯示十位分
  672.     delay(1);
  673.     lcd_wdat(LCD[j%0x0a]);           //顯示分
  674.     delay(1);

  675. }
  676.      switch(ws)
  677.   {
  678.    case 0x46:jm=0x70;ws=0x00;K2=0;break;   //主菜單
  679.    case 0x45:jm=0x70;ws=0x00;K2=0;break;   //退出
  680.    default:break;
  681.   }
  682. }
  683. return;
  684. }
  685. //--------------------------鬧鐘設置 ----//
  686. void JM3NZ()
  687. {
  688.    uchar K3;   //定義K3開關
  689.    bit K3x1=1,K3x2=0,K3x3=0,K3x4=0,K3x5=0,K3x6=0,K3x7=0;  //定義光標標志位
  690.    lcd_wcmd(0x01);  //清屏
  691. lcd_pos(0x00);      //設定顯示的位置
  692. for(K3=0;K3<16;K3++)
  693. {
  694.    lcd_wdat(LCD3_0[K3]);    //顯示摸
  695. }
  696. lcd_pos(0x06);         //設定LCD的顯示位置
  697. lcd_wcmd(0x0f);    //寫指令到LCD顯示光標
  698. K3=1;

  699. while(K3)
  700. {
  701. while(K3x1)
  702. {
  703. lcd_pos(0x06);
  704.   switch(ws)      //十小時設定
  705.   {
  706.    case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x1=0;K3x2=1;break;    //按下0
  707.    case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x1=0;K3x2=1;break;    //按下1
  708.    case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x1=0;K3x2=1;break;     //按下2
  709.    case 0x0d:ws=0x00;K3x1=0;K3x2=1;break;     //下一個
  710.    case 0x40:ws=0x00;K3x1=0;K3x2=1;break;     //下一個
  711.    case 0x44:ws=0x00;K3x1=0;K3x7=1;break;     //上一個
  712.    case 0x19:ws=0x00;K3x1=0;K3x7=1;break;     //上一個
  713.    case 0x43:ws=0x00;K3x1=0;K3=0;break;        //確定
  714.    case 0x45:ws=0x00;K3x1=0;K3=0;break;        //退出
  715.    case 0x46:ws=0x00;K3x1=0;K3=0;break;     //主菜單
  716.    default:break;
  717.   }
  718.   }

  719. while(K3x2&&lcd_sz(0x06)==LCD[2])
  720. {
  721. lcd_pos(0x07);
  722.   switch(ws)      //個小時設定
  723.   {
  724.    case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x2=0;K3x4=1;break;    //按下0
  725.    case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x2=0;K3x4=1;break;    //按下1
  726.    case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x2=0;K3x4=1;break;     //按下2
  727.    case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x2=0;K3x4=1;break;     //按下3
  728.    case 0x0d:ws=0x00;K3x2=0;K3x4=1;break;     //下一個
  729.    case 0x40:ws=0x00;K3x2=0;K3x4=1;break;     //下一個
  730.    case 0x44:ws=0x00;K3x2=0;K3x1=1;break;     //上一個
  731.    case 0x19:ws=0x00;K3x2=0;K3x1=1;break;     //上一個
  732.    case 0x43:K3x2=0;K3=0;break;        //確定
  733.    case 0x45:ws=0x00;K3x2=0;K3=0;break;        //退出
  734.    case 0x46:ws=0x00;K3x2=0;K3=0;break;     //主菜單
  735.    default:break;
  736.   }
  737.   }



  738.   while(K3x2)
  739. {
  740. lcd_pos(0x07);
  741.   switch(ws)      //個小時設定
  742.   {
  743.    case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x2=0;K3x4=1;break;    //按下0
  744.    case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x2=0;K3x4=1;break;    //按下1
  745.    case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x2=0;K3x4=1;break;     //按下2
  746.    case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x2=0;K3x4=1;break;     //按下3
  747.    case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x2=0;K3x4=1;break;     //按下4
  748.    case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x2=0;K3x4=1;break;     //按下5
  749.    case 0x5a:ws=0x00;lcd_wdat(LCD[6]);K3x2=0;K3x4=1;break;     //按下6
  750.    case 0x42:ws=0x00;lcd_wdat(LCD[7]);K3x2=0;K3x4=1;break;     //按下7
  751.    case 0x52:ws=0x00;lcd_wdat(LCD[8]);K3x2=0;K3x4=1;break;     //按下8
  752.    case 0x4a:ws=0x00;lcd_wdat(LCD[9]);K3x2=0;K3x4=1;break;     //按下9
  753.    case 0x0d:ws=0x00;K3x2=0;K3x4=1;break;     //下一個
  754.    case 0x40:ws=0x00;K3x2=0;K3x4=1;break;     //下一個
  755.    case 0x19:ws=0x00;K3x2=0;K3x1=1;break;     //上一個
  756.    case 0x44:ws=0x00;K3x2=0;K3x1=1;break;     //上一個
  757.    case 0x43:K3x2=0;K3=0;break;        //確定
  758.    case 0x45:ws=0x00;K3x2=0;K3=0;break;        //退出
  759.    case 0x46:ws=0x00;K3x2=0;K3=0;break;     //主菜單
  760.    default:break;
  761.   }
  762.   }



  763.    while(K3x4)
  764. {
  765. lcd_pos(0x09);
  766.   switch(ws)      //十分設定
  767.   {
  768.    case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x4=0;K3x5=1;break;    //按下0
  769.    case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x4=0;K3x5=1;break;    //按下1
  770.    case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x4=0;K3x5=1;break;     //按下2
  771.    case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x4=0;K3x5=1;break;     //按下3
  772.    case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x4=0;K3x5=1;break;     //按下4
  773.    case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x4=0;K3x5=1;break;     //按下5
  774.    case 0x0d:ws=0x00;K3x4=0;K3x5=1;break;     //下一個
  775.    case 0x40:ws=0x00;K3x4=0;K3x5=1;break;     //下一個
  776.    case 0x19:ws=0x00;K3x4=0;K3x2=1;break;     //上一個
  777.    case 0x44:ws=0x00;K3x4=0;K3x2=1;break;     //上一個
  778.    case 0x43:K3x4=0;K3=0;break;        //確定
  779.    case 0x45:ws=0x00;K3x4=0;K3=0;break;        //退出
  780.    case 0x46:ws=0x00;K3x4=0;K3=0;break;     //主菜單
  781.    default:break;
  782.   }
  783.   }

  784. while(K3x5)
  785. {
  786. lcd_pos(0x0a);
  787.   switch(ws)      //個分設定
  788.   {
  789.    case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x5=0;K3x6=1;break;    //按下0
  790.    case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x5=0;K3x6=1;break;    //按下1
  791.    case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x5=0;K3x6=1;break;     //按下2
  792.    case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x5=0;K3x6=1;break;     //按下3
  793.    case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x5=0;K3x6=1;break;     //按下4
  794.    case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x5=0;K3x6=1;break;     //按下5
  795.    case 0x5a:ws=0x00;lcd_wdat(LCD[6]);K3x5=0;K3x6=1;break;     //按下6
  796.    case 0x42:ws=0x00;lcd_wdat(LCD[7]);K3x5=0;K3x6=1;break;     //按下7
  797.    case 0x52:ws=0x00;lcd_wdat(LCD[8]);K3x5=0;K3x6=1;break;     //按下8
  798.    case 0x4a:ws=0x00;lcd_wdat(LCD[9]);K3x5=0;K3x6=1;break;     //按下9
  799.    case 0x0d:ws=0x00;K3x5=0;K3x6=1;break;     //下一個
  800.    case 0x40:ws=0x00;K3x5=0;K3x6=1;break;     //下一個
  801.    case 0x19:ws=0x00;K3x5=0;K3x4=1;break;     //上一個
  802.    case 0x44:ws=0x00;K3x5=0;K3x4=1;break;     //上一個
  803.    case 0x43:K3x5=0;K3=0;break;        //確定
  804.    case 0x45:ws=0x00;K3x5=0;K3=0;break;        //退出
  805.    case 0x46:ws=0x00;K3x5=0;K3=0;break;     //主菜單
  806.    default:break;
  807.   }
  808.   }

  809.      while(K3x6)
  810. {
  811. lcd_pos(0x0c);
  812.   switch(ws)      //十秒設定
  813.   {
  814.    case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x6=0;K3x7=1;break;    //按下0
  815.    case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x6=0;K3x7=1;break;    //按下1
  816.    case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x6=0;K3x7=1;break;     //按下2
  817.    case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x6=0;K3x7=1;break;     //按下3
  818.    case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x6=0;K3x7=1;break;     //按下4
  819.    case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x6=0;K3x7=1;break;     //按下5
  820.    case 0x0d:ws=0x00;K3x6=0;K3x7=1;break;     //下一個
  821.    case 0x40:ws=0x00;K3x6=0;K3x7=1;break;     //下一個
  822.    case 0x19:ws=0x00;K3x6=0;K3x5=1;break;     //上一個
  823.    case 0x44:ws=0x00;K3x6=0;K3x5=1;break;     //上一個
  824.    case 0x43:K3x6=0;K3=0;break;        //確定
  825.    case 0x45:ws=0x00;K3x6=0;K3=0;break;        //退出
  826.    case 0x46:ws=0x00;K3x6=0;K3=0;break;     //主菜單
  827.    default:break;
  828.   }
  829.   }

  830. while(K3x7)
  831. {
  832. lcd_pos(0x0d);
  833.   switch(ws)      //個秒設定
  834.   {
  835.    case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x7=0;K3x1=1;break;    //按下0
  836.    case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x7=0;K3x1=1;break;    //按下1
  837.    case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x7=0;K3x1=1;break;     //按下2
  838.    case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x7=0;K3x1=1;break;     //按下3
  839.    case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x7=0;K3x1=1;break;     //按下4
  840.    case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x7=0;K3x1=1;break;     //按下5
  841.    case 0x5a:ws=0x00;lcd_wdat(LCD[6]);K3x7=0;K3x1=1;break;     //按下6
  842.    case 0x42:ws=0x00;lcd_wdat(LCD[7]);K3x7=0;K3x1=1;break;     //按下7
  843.    case 0x52:ws=0x00;lcd_wdat(LCD[8]);K3x7=0;K3x1=1;break;     //按下8
  844.    case 0x4a:ws=0x00;lcd_wdat(LCD[9]);K3x7=0;K3x1=1;break;     //按下9
  845.    case 0x0d:ws=0x00;K3x7=0;K3x1=1;break;     //下一個
  846.    case 0x40:ws=0x00;K3x7=0;K3x1=1;break;     //下一個
  847.    case 0x19:ws=0x00;K3x7=0;K3x6=1;break;     //上一個
  848.    case 0x44:ws=0x00;K3x7=0;K3x6=1;break;     //上一個
  849.    case 0x43:K3x7=0;K3=0;break;        //確定
  850.    case 0x45:ws=0x00;K3x7=0;K3=0;break;        //退出
  851.    case 0x46:ws=0x00;K3x7=0;K3=0;break;     //主菜單
  852.    default:break;
  853.   }
  854.   }


  855.   while(ws==0x43)     //按下確定鍵,,保存鬧鐘時間
  856. {
  857. while(lcd_sz(0x06)==LCD[0]){ns=0x00;}
  858. while(lcd_sz(0x07)==LCD[1]){ns+=0x01;}
  859. }
  860. }
  861. jm=0x70;

  862. lcd_wcmd(0x0c);
  863. }
  864. //------------------------警戒設置-----//
  865. void JM4JJ()
  866. {
  867.    uchar K4;
  868.    lcd_wcmd(0x01);
  869. lcd_pos(0x00);
  870. for(K4=0;K4<16;K4++)
  871. {
  872.    lcd_wdat(LCD4_0[K4]);
  873. }
  874. while(1);
  875. }
  876. //--------------------------入侵信息---//
  877. void JM5XX()
  878. {
  879.    uchar K5;
  880.    lcd_wcmd(0x01);
  881. lcd_pos(0x00);
  882. for(K5=0;K5<16;K5++)
  883. {
  884.    lcd_wdat(LCD6_0[K5]);
  885. }
  886. delay(2);
  887. lcd_pos(0x40);
  888. for(K5=0;K5<16;K5++)
  889. {
  890.    lcd_wdat(LCD6_1[K5]);
  891. }
  892. while(1);
  893. }
  894. //------------------------------修改時間-----//
  895.   void JM6SJ()
  896. {
  897.    uchar K6;
  898.    lcd_wcmd(0x01);
  899. lcd_pos(0x00);
  900. for(K6=0;K6<16;K6++)
  901. {
  902.    lcd_wdat(LCD6_0[K6]);
  903. }
  904. delay(2);
  905. lcd_pos(0x40);
  906. for(K6=0;K6<16;K6++)
  907. {
  908.    lcd_wdat(LCD6_1[K6]);
  909. }
  910. K6=1;
  911. while(K6)
  912. {
  913.   ;
  914. }
  915. }                                                   
  916. //------------------------------主函數(shù)   //
  917.    void main()
  918.    {
  919.          uchar bl;
  920.     int_init();  //中斷 初始化      
  921.           bl=D1302(0x81);
  922.     bl=0x7f&bl;
  923.     X1302(0x80,bl);
  924.     delay(1);
  925.    X1302(0x8e,0x00);
  926.             X1302(0x90,0xa5);
  927.             X1302(0x8e,0x80);   //關閉寫,但可以讀  
  928.              lcd_init();       //LCD初始化
  929.     delay(2);
  930.              lcd_pos(0x00);   //設定顯示的位置
  931.              jm=0x10;
  932.              while(1)
  933.             {
  934.                 if(jm==0x70){JM7CD();}         
  935.                 else if(jm==0x10){JM1SJ();}   //時間  
  936.                 else if(jm==0x20){JM2MB();}   // 秒表
  937.     else if(jm==0x30){JM3NZ();}   // 鬧鐘
  938.     else if(jm==0x40){JM4JJ();}   // 警戒
  939.     else if(jm==0x50){JM5XX();}   // 信息
  940.     else if(jm==0x60){JM6SJ();}      //時間修改
  941.     else{;}
  942.    }
  943.     }
復制代碼








    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多