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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1841|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機(jī)按鍵控制燈程序的修改 求大神指點(diǎn)。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:425443 發(fā)表于 2018-11-20 16:12 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我想在自動(dòng)模式下,1602顯示屏在exception選項(xiàng)中的start界面中,按下INT1按鈕則LAMP1和2燈亮,按OUT1按鈕則LAMP3和LAMP4燈亮,也就是自動(dòng)模式下有兩種情況。請(qǐng)大神指點(diǎn),應(yīng)該在程序里哪個(gè)地方更改。
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar time_data[7];
  6. uchar code write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};       //數(shù)據(jù)的地址
  7. uchar code read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
  8. uchar code table1[]="C: 00|2000/00/00";
  9. uchar code table2[]="T: 00|00:00:00 0";
  10. uchar code table3[]="                ";    //清屏內(nèi)容
  11. uchar code table4[]="  Set Real Time ";
  12. uchar code table5[]="  Set Open Time ";
  13. uchar code table6[]="   Start Time:  ";
  14. uchar code table7[]="    00:00:00    ";
  15. uchar code table8[]="    End Time:   ";
  16. uchar code table9[]="Date: 2000/00/00";
  17. uchar code table0[]="Time: 00:00:00 0";
  18. uchar code tableA[]="    Excaption   ";
  19. uchar code tableB[]="      START     ";
  20. bit Adjust;     //調(diào)節(jié)標(biāo)志位,=1表示進(jìn)入調(diào)節(jié)模式,=0是正常模式
  21. bit Auto_flg;    //自動(dòng)模式標(biāo)志位,=1表示手動(dòng)模式,=0是自動(dòng)模式
  22. sbit rs=P1^0;    //LCD1602
  23. sbit rw=P1^1;     //LCD1602
  24. sbit e=P1^2;    //LCD1602
  25. sbit sck=P2^5;    //時(shí)鐘端口
  26. sbit io=P2^6;    //時(shí)鐘端口
  27. sbit rst=P2^7;    //時(shí)鐘端口
  28. sbit SELT =P1^6;   //選擇鍵
  29. sbit ENTER=P1^7;   //確認(rèn)鍵
  30. sbit UP   =P3^0;   //加鍵
  31. sbit DOWN =P3^1;   //減鍵
  32. sbit MODE =P3^2;   //切換按鍵接口
  33. sbit SWITCH=P3^3;   //手動(dòng)開關(guān)
  34. sbit AUTO_LED=P1^3;   //自動(dòng)模式燈接口
  35. sbit HAND_LED=P1^4;   //手動(dòng)燈接口
  36. sbit LAMP1=P3^4;   //燈接口
  37. sbit LAMP2=P3^5;   //燈接口
  38. sbit LAMP3=P3^6;   //燈接口
  39. sbit LAMP4=P3^7;   //燈接口
  40. sbit LIGHT1=P2^0;   //光線檢測(cè)端口
  41. sbit IN1=P2^2;
  42. sbit OUT1=P2^1;
  43. sbit DQ=P1^5;    //溫度數(shù)據(jù)口
  44. uchar Select_num;   //選擇按鍵按下次數(shù)
  45. uchar Enter_num;   //確認(rèn)按鍵按下次數(shù)
  46. uchar Switch_num;   //手動(dòng)開關(guān)按鍵按下次數(shù)
  47. float Year,Month,Day,Hour,Minute,Second;   //時(shí)間設(shè)置值
  48. uchar Week;  
  49. float Hour_H,Minute_H,Second_H;       //設(shè)置開始時(shí)間
  50. float Hour_L,Minute_L,Second_L;       //設(shè)置結(jié)束時(shí)間
  51. int Value1;           //人數(shù)
  52. uchar IN1_flag=0;
  53. uchar OUT1_flag=0;
  54. uint Count;           //T0定時(shí)器中斷計(jì)數(shù)次數(shù)
  55. uchar Miao;
  56. int temperature;         //全局變量 溫度
  57. void read_rtc();
  58. /**************************************************LCD1602顯示*******************************************************************/
  59. void delay1(uint z)     //延時(shí)函數(shù)
  60. {
  61. uint x,y;
  62. for(x=z;x>0;x--)
  63.   for(y=10;y>0;y--);
  64. }
  65. void write_com(uchar com)    //寫指令函數(shù)
  66. {
  67. rw=0;
  68. delay1(5);
  69. rs=0;
  70. delay1(5);
  71. e=1;
  72. delay1(5);
  73. P0=com;
  74. delay1(5);
  75. e=0;
  76. delay1(5);
  77. }
  78. void write_date(uchar date)   //寫數(shù)據(jù)函數(shù)
  79. {         
  80. rw=0;
  81. delay1(5);
  82. rs=1;
  83. delay1(5);
  84. e=1;
  85. delay1(5);
  86. P0=date;
  87. delay1(5);
  88. e=0;
  89. delay1(5);
  90. }
  91. void init()          //初始化函數(shù)
  92. {
  93. uchar num;
  94. Year=17;
  95. Month=1;
  96. Day=1;
  97. Hour=15;
  98. Minute=30;
  99. Second=50;
  100. Week=1;
  101. Hour_H=22;
  102. Minute_H=0;
  103. Second_H=0;
  104. Hour_L=18;
  105. Minute_L=0;
  106. Second_L=0;
  107. e=0;          // 時(shí)序表e初始為0
  108. write_com(0x38);          //設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
  109. write_com(0x0c);    //設(shè)置光標(biāo)
  110. write_com(0x06);    //光標(biāo)自動(dòng)加1,光標(biāo)輸入方式
  111. write_com(0x01);    //清屏
  112. write_com(0x80);    //設(shè)置初始顯示位置
  113. for(num=0;num<16;num++)
  114. {
  115.   write_date(table1[num]);
  116.   delay1(5);
  117. }
  118. write_com(0x80+0x40);
  119. for(num=0;num<16;num++)
  120. {
  121.   write_date(table2[num]);
  122.   delay1(5);
  123. }      
  124. }
  125. void SetTime_dispaly(uchar add,uchar dat)  //第一個(gè):參數(shù)的地址,第二個(gè):參數(shù)的內(nèi)容
  126. {
  127. uchar shi,ge;
  128. shi=dat/10;       //把十位提取出來
  129. ge=dat%10;       //把個(gè)位提取出來
  130. write_com(add);          //要寫的地址
  131. write_date(0x30+shi);    //十位的內(nèi)容   1602字符庫
  132. write_date(0x30+ge);    //個(gè)位的內(nèi)容   1602字符庫
  133. }
  134. void Week_dispaly(uchar add,uchar dat) //第一個(gè):參數(shù)的地址,第二個(gè):參數(shù)的內(nèi)容
  135. {
  136. write_com(add);      //要寫的地址
  137. write_date(0x30+dat);    //十位的內(nèi)容   1602字符庫
  138. }
  139. void Date_dispaly(uchar add,uchar dat)  //第一個(gè):參數(shù)的地址,第二個(gè):參數(shù)的內(nèi)容
  140. {
  141. uchar shi,ge;
  142. shi=dat/16;       //把十位提取出來
  143. ge=dat%16;       //把個(gè)位提取出來
  144. write_com(add+3);         //要寫的地址
  145. write_date(0x30+shi);    //十位的內(nèi)容   1602字符庫
  146. write_date(0x30+ge);    //個(gè)位的內(nèi)容   1602字符庫      
  147. }
  148. void LCD_Clean(uchar i)     //液晶屏清除顯示
  149. {
  150. uchar num;
  151. if(i==1)
  152. {
  153.   write_com(0x80);    //設(shè)置初始顯示位置
  154.   for(num=0;num<16;num++)   //顯示第一行內(nèi)容
  155.   {
  156.    write_date(table3[num]);
  157.    delay1(1);
  158.   }
  159. }
  160. if(i==2)
  161. {
  162.   write_com(0x80+0x40);
  163.   for(num=0;num<16;num++)   //顯示第二行內(nèi)容
  164.   {
  165.    write_date(table3[num]);
  166.    delay1(1);
  167.   }
  168. }
  169. }
  170. void LCD_Display_String(unsigned char line,unsigned char *string)
  171. {           //液晶屏顯示內(nèi)容,把要顯示的內(nèi)容寫到對(duì)應(yīng)的位置
  172. unsigned char i;
  173. unsigned char address=0;
  174. if(line==1)
  175. {
  176.   address=0x80;      //0X80是第1行的第1個(gè)位置  ,0x81第2位
  177. }
  178. else if(line==2)
  179. {
  180.   address=0x80+0x40;     //0X80+0x40是第2行的第1個(gè)位置  ,0X80+0x40+1是第2行第2位
  181. }

  182. for(i=0;i<16;i++)
  183. {
  184.   write_com(address);
  185.   write_date(string[i]);
  186.   address++;
  187. }
  188. }
  189. /**********************************DS1302時(shí)鐘***************************************/
  190. void Time_Display(void)
  191. {
  192. read_rtc();
  193. Date_dispaly(0x80+0x40+9,time_data[6]);  //顯示秒
  194. Date_dispaly(0x80+0x40+6,time_data[5]);  //顯示分
  195. Date_dispaly(0x80+0x40+3,time_data[4]);  //顯示時(shí)
  196. Date_dispaly(0x80+11,time_data[3]);   //顯示日
  197. Date_dispaly(0x80+8,time_data[2]);   //顯示月
  198. Week_dispaly(0x80+0x40+15,time_data[1]); //顯示周
  199. Date_dispaly(0x80+5,time_data[0]);   //顯示年
  200.         // Year/10*16+Year%10
  201. Hour=time_data[4]/16*10+time_data[4]%16;;
  202. Minute=time_data[5]/16*10+time_data[5]%16;;
  203. Second=time_data[6]/16*10+time_data[6]%16;;
  204. }

  205. void write_ds1302_byte(uchar dat)
  206. {
  207. uchar i;
  208. for(i=0;i<8;i++)
  209. {
  210.   sck=0;
  211.   io=dat&0x01;        //準(zhǔn)備數(shù)據(jù),從最低位開始
  212.   dat=dat>>1;
  213.   sck=1;
  214. }
  215. }
  216. void write_ds1302(uchar add,uchar dat)
  217. {
  218. rst=0;
  219. _nop_();        //CPU原地踏步
  220. sck=0;
  221. _nop_();
  222. rst=1;
  223. _nop_();
  224. write_ds1302_byte(add);      //傳地址
  225. write_ds1302_byte(dat);      //傳數(shù)據(jù)
  226. rst=0;           //不受其他影響
  227. _nop_();
  228. io=1;         //釋放
  229. sck=1;
  230. }
  231. uchar read_ds1302(uchar add)
  232. {
  233. uchar i,value;
  234. rst=0;
  235. _nop_();  //CPU原地踏步
  236. sck=0;
  237. _nop_();
  238. rst=1;
  239. _nop_();
  240. write_ds1302_byte(add);
  241. for(i=0;i<8;i++)
  242. {
  243.   value=value>>1;
  244.   sck=0;
  245.   if(io)
  246.   value=value|0x80;
  247.   sck=1;
  248. }
  249. rst=0;
  250. _nop_();
  251. sck=0;
  252. _nop_();
  253. sck=1;
  254. io=1;
  255. return value;
  256. }
  257. void set_rtc()             //設(shè)置時(shí)間
  258. {
  259. uchar i,j;
  260. for(i=0;i<7;i++)    //轉(zhuǎn)換BCD碼
  261. {
  262.   j=time_data[i]/10;
  263.   time_data[i]=time_data[i]%10;
  264.   time_data[i]=time_data[i]+j*16;
  265. }
  266. write_ds1302(0x8e,0x00);   //去除寫保護(hù)
  267. for(i=0;i<7;i++)
  268. {
  269.   write_ds1302(write_add[i],time_data[i]);
  270. }
  271. write_ds1302(0x8e,0x80);      //加寫保護(hù)
  272. }
  273. void read_rtc()
  274. {
  275. uchar i;
  276. for(i=0;i<7;i++)
  277. {
  278.   time_data[i]=read_ds1302(read_add[i]); //最終讀出來的數(shù) 16進(jìn)制
  279. }
  280. }
  281. /*************************************************按鍵****************************************************************/
  282. void Keyscan(void)
  283. {
  284. if(SELT==0)
  285. {
  286.   delay1(2);
  287.   if(SELT==0)
  288.   {
  289.    while(!SELT);
  290.    Select_num++;     //選擇鍵按下一次
  291.    Adjust=1;      //進(jìn)入調(diào)節(jié)模式   
  292.   }
  293.   if(Select_num==1)
  294.   {
  295.    LCD_Clean(1);
  296.    LCD_Clean(2);
  297.    LCD_Display_String(1,table4);
  298.    LCD_Display_String(2,table5);
  299.    write_com(0x80+0);    //寫 >>
  300.    write_date(0x3e);
  301.    write_com(0x80+1);    //寫 >>
  302.    write_date(0x3e);
  303.    Enter_num=0;
  304.   }
  305.   if(Select_num==2)
  306.   {
  307.    LCD_Clean(1);
  308.    LCD_Clean(2);
  309.    LCD_Display_String(1,table4);
  310.    LCD_Display_String(2,table5);
  311.    write_com(0x80+0x40+0);    //寫 >>
  312.    write_date(0x3e);
  313.    write_com(0x80+0x40+1);    //寫 >>
  314.    write_date(0x3e);
  315.    Enter_num=0;
  316.   }
  317.   if(Select_num==3)
  318.   {
  319.       LCD_Clean(1);
  320.    LCD_Clean(2);
  321.    LCD_Display_String(1,tableA);
  322.    write_com(0x80+0);
  323.    write_date(0x3e);
  324.    write_com(0x80+1);
  325.    write_date(0x3e);
  326.   }
  327.   if(Select_num==4)
  328.   {
  329.    LCD_Clean(1);
  330.    LCD_Clean(2);
  331.    LCD_Display_String(1,table1);
  332.    LCD_Display_String(2,table2);
  333.    Select_num=0;
  334.    Enter_num=0;     
  335.    Adjust=0;
  336.   }
  337.   write_com(0x0c);         //光標(biāo)不再閃爍
  338.   Enter_num=0;
  339. }

  340. if(ENTER==0)
  341. {
  342.   delay1(2);
  343.   if(ENTER==0)
  344.   {
  345.    while(!ENTER);
  346.    Enter_num++;
  347.   }
  348.   if(Select_num==1)     //設(shè)置實(shí)時(shí)時(shí)間
  349.   {
  350.    if(Enter_num==1)
  351.    {
  352.     LCD_Clean(1);
  353.     LCD_Clean(2);
  354.     LCD_Display_String(1,table9);
  355.     LCD_Display_String(2,table0);
  356.     SetTime_dispaly(0x80+8,Year);
  357.     SetTime_dispaly(0x80+11,Month);
  358.     SetTime_dispaly(0x80+14,Day);
  359.     SetTime_dispaly(0x80+0x40+6,Hour);
  360.     SetTime_dispaly(0x80+0x40+9,Minute);
  361.     SetTime_dispaly(0x80+0x40+12,Second);
  362.     Week_dispaly(0x80+0x40+15,Week);
  363.     write_com(0x80+8);   //光標(biāo)閃爍地址,停留在年的位置上     
  364.     write_com(0x0f);   //光標(biāo)閃爍
  365.    }
  366.    if(Enter_num==2)
  367.    {
  368.     write_com(0x80+11);   //光標(biāo)閃爍地址,停留在月的位置上     
  369.     write_com(0x0f);   //光標(biāo)閃爍
  370.    }
  371.    if(Enter_num==3)
  372.    {
  373.     write_com(0x80+14);   //光標(biāo)閃爍地址,停留在日的位置上     
  374.     write_com(0x0f);   //光標(biāo)閃爍
  375.    }
  376.    if(Enter_num==4)
  377.    {
  378.     write_com(0x80+0x40+6);  //光標(biāo)閃爍地址,停留在時(shí)的位置上     
  379.     write_com(0x0f);   //光標(biāo)閃爍
  380.    }
  381.    if(Enter_num==5)
  382.    {
  383.     write_com(0x80+0x40+9);  //光標(biāo)閃爍地址,停留在分的位置上     
  384.     write_com(0x0f);   //光標(biāo)閃爍
  385.    }
  386.    if(Enter_num==6)
  387.    {
  388.     write_com(0x80+0x40+12); //光標(biāo)閃爍地址,停留在秒的位置上     
  389.     write_com(0x0f);   //光標(biāo)閃爍
  390.    }
  391.    if(Enter_num==7)
  392.    {
  393.     write_com(0x80+0x40+15); //光標(biāo)閃爍地址,停留在星期的位置上     
  394.     write_com(0x0f);   //光標(biāo)閃爍
  395.    }
  396.    if(Enter_num==8)
  397.    {
  398.     Enter_num=0;
  399.     write_com(0x0c);   //光標(biāo)不再閃爍
  400.     LCD_Clean(1);
  401.     LCD_Clean(2);
  402.     LCD_Display_String(1,table1);
  403.     LCD_Display_String(2,table2);
  404.     time_data[0]=Year;///10*16+Year%10;
  405.     time_data[1]=Week;///10*16+Week%10;
  406.     time_data[2]=Month;///10*16+Month%10;
  407.     time_data[3]=Day;///10*16+Day%10;
  408.     time_data[4]=Hour;///10*16+Hour%10;
  409.     time_data[5]=Minute;///10*16+Minute%10;
  410.     time_data[6]=Second;///10*16+Second%10;
  411.     set_rtc();      //設(shè)置時(shí)間
  412.     Select_num=0;
  413.     Adjust=0;
  414.    }
  415.   }
  416.   if(Select_num==2)     //設(shè)置開關(guān)鎖時(shí)間
  417.   {
  418.    if(Enter_num==1)
  419.    {
  420.     LCD_Clean(1);
  421.     LCD_Clean(2);
  422.     LCD_Display_String(1,table6);
  423.     LCD_Display_String(2,table7);
  424.     SetTime_dispaly(0x80+0x40+4,Hour_L);
  425.     SetTime_dispaly(0x80+0x40+7,Minute_L);
  426.     SetTime_dispaly(0x80+0x40+10,Second_L);
  427.     write_com(0x80+0x40+4);  //光標(biāo)閃爍地址,停留在時(shí)的位置上     
  428.     write_com(0x0f);   //光標(biāo)閃爍
  429.    }
  430.    if(Enter_num==2)
  431.    {
  432.     write_com(0x80+0x40+7);  //光標(biāo)閃爍地址,停留在分的位置上     
  433.     write_com(0x0f);   //光標(biāo)閃爍
  434.    }
  435.    if(Enter_num==3)
  436.    {
  437.     write_com(0x80+0x40+10); //光標(biāo)閃爍地址,停留在秒的位置上     
  438.     write_com(0x0f);   //光標(biāo)閃爍
  439.    }
  440.    if(Enter_num==4)
  441.    {
  442.     write_com(0x0c);   //光標(biāo)不再閃爍
  443.     LCD_Clean(1);
  444.     LCD_Clean(2);
  445.     LCD_Display_String(1,table8);
  446.     LCD_Display_String(2,table7);
  447.     SetTime_dispaly(0x80+0x40+4,Hour_H);
  448.     SetTime_dispaly(0x80+0x40+7,Minute_H);
  449.     SetTime_dispaly(0x80+0x40+10,Second_H);
  450.     write_com(0x80+0x40+4);  //光標(biāo)閃爍地址,停留在時(shí)的位置上     
  451.     write_com(0x0f);   //光標(biāo)閃爍
  452.    }
  453.    if(Enter_num==5)
  454.    {
  455.     write_com(0x80+0x40+7);  //光標(biāo)閃爍地址,停留在分的位置上     
  456.     write_com(0x0f);   //光標(biāo)閃爍
  457.    }
  458.    if(Enter_num==6)
  459.    {
  460.     write_com(0x80+0x40+10); //光標(biāo)閃爍地址,停留在秒的位置上     
  461.     write_com(0x0f);   //光標(biāo)閃爍
  462.    }  
  463.    if(Enter_num==7)
  464.    {
  465.     Enter_num=0;
  466.     write_com(0x0c);   //光標(biāo)不再閃爍
  467.     LCD_Clean(1);
  468.     LCD_Clean(2);
  469.     LCD_Display_String(1,table1);
  470.     LCD_Display_String(2,table2);
  471.     Select_num=0;
  472.     Adjust=0;
  473.    }
  474.   }
  475.     if(Select_num==3)
  476.    {
  477.     if(Enter_num==1)
  478.     {
  479.      LCD_Clean(1);
  480.      LCD_Clean(2);
  481.      LCD_Display_String(1,tableB);
  482.      }
  483.     if(Enter_num==2)
  484.     {
  485.      Enter_num=0;
  486.      LCD_Clean(1);
  487.      LCD_Clean(2);
  488.      LCD_Display_String(1,table1);
  489.      LCD_Display_String(2,table2);
  490.      Select_num=0;
  491.      Adjust=0;
  492.      }
  493.     }
  494. }
  495. if(UP==0)
  496. {
  497.   delay1(2);
  498.   if(UP==0)
  499.   {
  500.    while(!UP);
  501.    if(Select_num==1)
  502.    {
  503.     if(Enter_num==1)
  504.     {
  505.      Year++;
  506.      if(Year>99)
  507.      Year=0;
  508.      SetTime_dispaly(0x80+8,Year);
  509.      write_com(0x80+8);        
  510.      write_com(0x0f);   
  511.     }
  512.     if(Enter_num==2)
  513.     {
  514.      Month++;
  515.      if(Month>12)
  516.      Month=1;
  517.      SetTime_dispaly(0x80+11,Month);
  518.      write_com(0x80+11);        
  519.      write_com(0x0f);         
  520.     }
  521.     if(Enter_num==3)
  522.     {
  523.      Day++;
  524.      if(Day>31)
  525.      Day=1;
  526.      SetTime_dispaly(0x80+14,Day);
  527.      write_com(0x80+14);        
  528.      write_com(0x0f);
  529.     }
  530.     if(Enter_num==4)
  531.     {
  532.      Hour++;
  533.      if(Hour>23)
  534.      Hour=0;
  535.      SetTime_dispaly(0x80+0x40+6,Hour);
  536.      write_com(0x80+0x40+6);        
  537.      write_com(0x0f);
  538.     }
  539.     if(Enter_num==5)
  540.     {
  541.      Minute++;
  542.      if(Minute>59)
  543.      Minute=0;
  544.      SetTime_dispaly(0x80+0x40+9,Minute);
  545.      write_com(0x80+0x40+9);        
  546.      write_com(0x0f);
  547.     }
  548.     if(Enter_num==6)
  549.     {
  550.      Second++;
  551.      if(Second>59)
  552.      Second=0;
  553.      SetTime_dispaly(0x80+0x40+12,Second);
  554.      write_com(0x80+0x40+12);        
  555.      write_com(0x0f);
  556.     }
  557.     if(Enter_num==7)
  558.     {
  559.      Week++;
  560.      if(Week>7)
  561.      Week=1;
  562.      Week_dispaly(0x80+0x40+15,Week);
  563.      write_com(0x80+0x40+15);        
  564.      write_com(0x0f);
  565.     }
  566.    }
  567.    if(Select_num==2)
  568.    {   
  569.     if(Enter_num==1)
  570.     {
  571.      Hour_L++;
  572.      if(Hour_L>23)
  573.      Hour_L=0;
  574.      SetTime_dispaly(0x80+0x40+4,Hour_L);
  575.      write_com(0x80+0x40+4);        
  576.      write_com(0x0f);
  577.     }
  578.     if(Enter_num==2)
  579.     {
  580.      Minute_L++;
  581.      if(Minute_L>59)
  582.      Minute_L=0;
  583.      SetTime_dispaly(0x80+0x40+7,Minute_L);
  584.      write_com(0x80+0x40+7);        
  585.      write_com(0x0f);
  586.     }
  587.      
  588.     if(Enter_num==3)
  589.     {
  590.      Second_L++;
  591.      if(Second_L>59)
  592.      Second_L=0;
  593.      SetTime_dispaly(0x80+0x40+10,Second_L);
  594.      write_com(0x80+0x40+10);        
  595.      write_com(0x0f);
  596.     }
  597.     if(Enter_num==4)
  598.     {
  599.      Hour_H++;
  600.      if(Hour_H>23)
  601.      Hour_H=0;
  602.      SetTime_dispaly(0x80+0x40+4,Hour_H);
  603.      write_com(0x80+0x40+4);        
  604.      write_com(0x0f);
  605.     }
  606.     if(Enter_num==5)
  607.     {
  608.      Minute_H++;
  609.      if(Minute_H>59)
  610.      Minute_H=0;
  611.      SetTime_dispaly(0x80+0x40+7,Minute_H);
  612.      write_com(0x80+0x40+7);        
  613.      write_com(0x0f);
  614.     }
  615.      
  616.     if(Enter_num==6)
  617.     {
  618.      Second_H++;
  619.      if(Second_H>59)
  620.      Second_H=0;
  621.      SetTime_dispaly(0x80+0x40+10,Second_H);
  622.      write_com(0x80+0x40+10);        
  623.      write_com(0x0f);
  624.     }   
  625.    }
  626.   }
  627. }
  628. if(DOWN==0)
  629. {
  630.   delay1(2);
  631.   if(DOWN==0)
  632.   {
  633.    while(!DOWN);
  634.    if(Select_num==1)
  635.    {
  636.     if(Enter_num==1)
  637.     {
  638.      Year--;
  639.      if(Year<0)
  640.      Year=99;
  641.      SetTime_dispaly(0x80+8,Year);
  642.      write_com(0x80+8);        
  643.      write_com(0x0f);
  644.     }
  645.     if(Enter_num==2)
  646.     {
  647.      Month--;
  648.      if(Month<1)
  649.      Month=12;
  650.      SetTime_dispaly(0x80+11,Month);
  651.      write_com(0x80+11);        
  652.      write_com(0x0f);
  653.     }
  654.     if(Enter_num==3)
  655.     {
  656.      Day--;
  657.      if(Day<1)
  658.      Day=31;
  659.      SetTime_dispaly(0x80+14,Day);
  660.      write_com(0x80+14);        
  661.      write_com(0x0f);
  662.     }
  663.     if(Enter_num==4)
  664.     {
  665.      Hour--;
  666.      if(Hour<0)
  667.      Hour=23;
  668.      SetTime_dispaly(0x80+0x40+6,Hour);
  669.      write_com(0x80+0x40+6);        
  670.      write_com(0x0f);
  671.     }
  672.     if(Enter_num==5)
  673.     {
  674.      Minute--;
  675.      if(Minute<0)
  676.      Minute=59;
  677.      SetTime_dispaly(0x80+0x40+9,Minute);
  678.      write_com(0x80+0x40+9);        
  679.      write_com(0x0f);
  680.     }
  681.     if(Enter_num==6)
  682.     {
  683.      Second--;
  684.      if(Second<0)
  685.      Second=59;
  686.      SetTime_dispaly(0x80+0x40+12,Second);
  687.      write_com(0x80+0x40+12);        
  688.      write_com(0x0f);
  689.     }
  690.     if(Enter_num==7)
  691.     {
  692.      Week--;
  693.      if(Week<1)
  694.      Week=7;
  695.      Week_dispaly(0x80+0x40+15,Week);
  696.      write_com(0x80+0x40+15);        
  697.      write_com(0x0f);
  698.     }  
  699.    }
  700.    if(Select_num==2)
  701.    {
  702.     if(Enter_num==1)
  703.     {
  704.      Hour_L--;
  705.      if(Hour_L<0)
  706.      Hour_L=23;
  707.      SetTime_dispaly(0x80+0x40+4,Hour_L);
  708.      write_com(0x80+0x40+4);        
  709.      write_com(0x0f);
  710.     }
  711.     if(Enter_num==2)
  712.     {
  713.      Minute_L--;
  714.      if(Minute_L<0)
  715.      Minute_L=59;
  716.      SetTime_dispaly(0x80+0x40+7,Minute_L);
  717.      write_com(0x80+0x40+7);        
  718.      write_com(0x0f);
  719.     }
  720.     if(Enter_num==3)
  721.     {
  722.      Second_L--;
  723.      if(Second_L<0)
  724.      Second_L=59;
  725.      SetTime_dispaly(0x80+0x40+10,Second_L);
  726.      write_com(0x80+0x40+10);        
  727.      write_com(0x0f);
  728.     }
  729.      
  730.     if(Enter_num==4)
  731.     {
  732.      Hour_H--;
  733.      if(Hour_H<0)
  734.      Hour_H=23;
  735.      SetTime_dispaly(0x80+0x40+4,Hour_H);
  736.      write_com(0x80+0x40+4);        
  737.      write_com(0x0f);
  738.     }
  739.     if(Enter_num==5)
  740.     {
  741.      Minute_H--;
  742.      if(Minute_H<0)
  743.      Minute_H=59;
  744.      SetTime_dispaly(0x80+0x40+7,Minute_H);
  745.      write_com(0x80+0x40+7);        
  746.      write_com(0x0f);
  747.     }
  748.     if(Enter_num==6)
  749.     {
  750.      Second_H--;
  751.      if(Second_H<0)
  752.      Second_H=59;
  753.      SetTime_dispaly(0x80+0x40+10,Second_H);
  754.      write_com(0x80+0x40+10);        
  755.      write_com(0x0f);
  756.     }
  757.    }
  758.   }
  759. }
  760. if(MODE==0)       //切換按鍵按下
  761. {
  762.   delay1(2);       //消抖
  763.   if(MODE==0)
  764.   {
  765.    while(!MODE);     //按鍵釋放
  766.    Auto_flg=~Auto_flg;    //模式切換
  767.    if(Auto_flg==0)     //自動(dòng)模式
  768.    {
  769.     AUTO_LED=0;     //自動(dòng)燈亮
  770.     HAND_LED=1;
  771.    }
  772.    if(Auto_flg==1)     //手動(dòng)模式
  773.    {
  774.     AUTO_LED=1;     
  775.     HAND_LED=0;     //手動(dòng)燈亮
  776.     LAMP1=1;     //關(guān)燈
  777.     LAMP2=1;
  778.     LAMP3=1;
  779.     LAMP4=1;
  780.    }
  781.   }
  782. }
  783. if(Auto_flg==1)       //手動(dòng)模式
  784. {
  785.   if(SWITCH==0)      //燈開關(guān)按鍵按下
  786.   {
  787.    delay1(2);      //消抖
  788.    if(SWITCH==0)
  789.    {
  790.     while(!SWITCH);    //按鍵釋放
  791.     Switch_num++;    //按下次數(shù)增加
  792.     if(Switch_num==1)   //按下一次,開一盞燈
  793.     {
  794.      LAMP1=0;
  795.      LAMP2=1;
  796.      LAMP3=1;
  797.      LAMP4=1;
  798.     }
  799.     if(Switch_num==2)   //按下二次,開二盞燈
  800.     {
  801.      LAMP1=0;
  802.      LAMP2=0;
  803.      LAMP3=1;
  804.      LAMP4=1;
  805.     }
  806.     if(Switch_num==3)   //按下3次,開3盞燈
  807.     {
  808.      LAMP1=0;
  809.      LAMP2=0;
  810.      LAMP3=0;
  811.      LAMP4=1;
  812.     }
  813.     if(Switch_num==4)   //按下4次,開4盞燈
  814.     {
  815.      LAMP1=0;
  816.      LAMP2=0;
  817.      LAMP3=0;
  818.      LAMP4=0;
  819.     }
  820.     if(Switch_num==5)   //按下5次,開0盞燈
  821.     {
  822.      LAMP1=1;
  823.      LAMP2=1;
  824.      LAMP3=1;
  825.      LAMP4=1;
  826.      Switch_num=0;   //次數(shù)清除
  827.     }
  828.    }
  829.   }
  830. }
  831. }
  832. void Open(void)
  833. {
  834. float Now;
  835. float Set_L,Set_H;
  836. Now=Hour+Minute/60+Second/3600;        //把實(shí)時(shí)時(shí)間化成小時(shí)為單位
  837. Set_L=Hour_L+Minute_L/60+Second_L/3600;      //把設(shè)置下限時(shí)間化成小時(shí)為單位
  838. Set_H=Hour_H+Minute_H/60+Second_H/3600;      //把設(shè)置上限時(shí)間化成小時(shí)為單位
  839. if(Auto_flg==0)          //自動(dòng)模式
  840. {
  841.   if((Now>=Set_L)&(Now<=Set_H))       //實(shí)時(shí)時(shí)間在上下限時(shí)間范圍內(nèi)
  842.   {
  843.    if(LIGHT1==0)           //光線不足
  844.    {
  845.     if(Value1==0)
  846.     {
  847.      LAMP1=1;       //全滅
  848.      LAMP2=1;
  849.      LAMP3=1;
  850.      LAMP4=1;
  851.     }
  852.     if((Value1>0)&(Value1<10))
  853.     {
  854.      LAMP1=0;       //亮一個(gè)燈
  855.      LAMP2=1;
  856.      LAMP3=1;
  857.      LAMP4=1;
  858.     }
  859.     if((Value1>=10)&(Value1<20))
  860.     {
  861.      LAMP1=0;       //亮二個(gè)燈
  862.      LAMP2=0;
  863.      LAMP3=1;
  864.      LAMP4=1;
  865.     }
  866.     if((Value1>=20)&(Value1<30))
  867.     {
  868.      LAMP1=0;       //亮三個(gè)燈
  869.      LAMP2=0;
  870.      LAMP3=0;
  871.      LAMP4=1;
  872.     }
  873.     if(Value1>=30)
  874.     {
  875.      LAMP1=0;       //亮四個(gè)燈
  876.      LAMP2=0;
  877.      LAMP3=0;
  878.      LAMP4=0;
  879.     }
  880.    }
  881.    if(LIGHT1==1)           //光線強(qiáng)烈
  882.    {
  883.     LAMP1=1;        //全滅
  884.     LAMP2=1;
  885.     LAMP3=1;
  886.     LAMP4=1;
  887.    }
  888.   }

  889.   if((Now<Set_L)|(Now>Set_H))        //實(shí)時(shí)時(shí)間不在范圍內(nèi)
  890.   {
  891.    LAMP1=1;         //全滅
  892.    LAMP2=1;
  893.    LAMP3=1;
  894.    LAMP4=1;
  895.   }
  896.    if((Now>=Set_L)&(Now<=Set_H))
  897.    {
  898.    if(LIGHT1==0)
  899.    {
  900.     if(IN1==0)
  901.     {
  902.      LAMP1=0;
  903.   LAMP2=0;
  904.   }
  905.     if(OUT1==0)
  906.     {
  907.      LAMP3=0;
  908.   LAMP4=0;
  909.   }
  910. }
  911. }
  912.      }
  913.      }
復(fù)制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:94031 發(fā)表于 2018-11-20 18:01 | 只看該作者
此帖僅作者可見

使用道具 舉報(bào)

板凳
ID:425443 發(fā)表于 2018-11-20 20:38 | 只看該作者
此帖僅作者可見

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国色天香综合网 | 精品国产乱码久久久久久丨区2区 | 久久国产香蕉 | 精品视频一区二区三区在线观看 | 国产精品人人做人人爽 | 丁香婷婷成人 | 日韩一区二区三区在线 | 日韩高清中文字幕 | 国产精品久久久久久 | 亚洲精品乱码久久久久久按摩观 | 一本大道久久a久久精二百 国产成人免费在线 | 日韩在线视频免费观看 | 免费看黄色视屏 | 国产乱码精品一区二三赶尸艳谈 | 成人性生交大片免费看r链接 | 成年人免费在线视频 | 精国产品一区二区三区四季综 | 亚洲欧美一区二区三区情侣bbw | 仙人掌旅馆在线观看 | 国产婷婷在线视频 | 亚洲国产一区二区三区 | 成人午夜毛片 | 日韩成人免费av | 欧美国产精品一区二区三区 | 91国在线视频 | 国产精品99久久久久久动医院 | 黑人巨大精品欧美一区二区免费 | 99久久国产 | 国产精品久久久久久久久久久久 | 欧美日一区二区 | 色综合99 | 免费网站国产 | 精品国产一区二区三区在线观看 | 一区二区三区欧美在线观看 | 懂色av蜜桃av | 成人乱人乱一区二区三区软件 | 中文字幕在线一区 | 亚洲国产精品一区二区三区 | 一区二区三区久久久 | 成人免费淫片aa视频免费 | 亚洲欧美在线一区 |