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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4693|回復: 0
收起左側

紅外遙控設置電子時鐘帶溫度和鬧鐘單片機源碼

[復制鏈接]
ID:262 發表于 2017-7-29 02:22 | 顯示全部樓層 |閱讀模式

分享一個51單片機做的紅外遙控電子時鐘:
0.png


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit fmq=P3^6; //蜂鳴器
  6. sbit key=P1^4; //鬧鐘鳴叫取消鍵
  7. bit irflag,alarmflag,clockflag; //irflag-紅外解碼成功標志 alarmflag-進入鬧鐘設置標志 clockflag-鬧鐘開關標志

  8. uchar ircode[4];//紅外解碼數據數組
  9. uchar code redcode[]="0123456789ABCDEF"; //紅外解碼數據使用的字符
  10. uchar code discode1[]={"DAY:"};
  11. uchar code discode2[]={"TIME:"};
  12. uchar code alarmcode1[]="SET ALARM TIME";
  13. uchar code alarmon[]="ON " ;
  14. uchar code alarmoff[]="OFF";

  15. uchar num; //記錄按鍵次數的變量,用來判斷是否輸入了2個數字,如果輸入了兩個數字就移動光標到第一位
  16. uchar setflag=0; //時鐘設置項變量,用來區分設置的是時鐘的時 分 秒 日 月 年
  17. uchar hour,minute,h,l,i; //全局變量 DS1302時鐘的小時,分鐘數據,用來在定時器中和鬧鐘的數據比對判斷是否鬧鈴時間已到,
  18. //h-調整時間數據時輸入數據的高位 l-調整時間數據時輸入數據的地位

  19. void delayms(uint xms) //普通延時
  20. {
  21.         uint m;
  22.         uchar n;
  23.         for(m=0;m<xms;m++)
  24.                 for(n=0;n<129;n++);
  25. }

  26. void delayus() //微秒級延時
  27. {
  28.         _nop_();
  29.         _nop_();
  30.         _nop_();
  31.         _nop_();
  32.         _nop_();
  33.         _nop_();
  34. }

  35. void delay882(void) //紅外解碼時延時800毫秒
  36. {
  37.     uchar a,b;
  38.     for(b=8;b>0;b--)
  39.         for(a=49;a>0;a--);
  40. }

  41. void delay1000(void) //紅外解碼時延時1000毫秒
  42. {
  43.     uchar a,b;
  44.     for(b=102;b>0;b--)
  45.         for(a=3;a>0;a--);
  46. }

  47. void delay2400(void) //紅外解碼時延時2400毫秒   
  48. {
  49.     uchar a,b;
  50.     for(b=96;b>0;b--)
  51.         for(a=10;a>0;a--);
  52. }



  53. void beep() //蜂鳴器鳴叫
  54. {
  55.         uchar n;
  56.         for(n=0;n<100;n++)
  57.         {
  58.                 fmq=0;
  59.                 delayms(1);
  60.                 fmq=1;
  61.                 delayms(1);
  62.         }
  63. }

  64. void ring() //鬧鈴響
  65. {
  66.         uchar n;
  67.         for(n=0;n<100;n++)
  68.         {
  69.                 fmq=0;
  70.                 delayms(1);
  71.                 fmq=1;
  72.                 delayms(1);
  73.                 fmq=0;
  74.                 delayms(5);
  75.                 fmq=1;
  76.                 delayms(5);
  77.         }
  78. }

  79. //DS1602液晶顯示部分

  80. sbit rs=P2^0;
  81. sbit rw=P2^1;
  82. sbit e=P2^2;
  83. sbit bf=P0^7;

  84. bit ds1602state() //取液晶的忙碌狀態
  85. {
  86.         bit flg;
  87.         rs=0;
  88.         rw=1;
  89.         e=1;
  90.         delayus();
  91.         flg=bf;
  92.         delayus();
  93.         e=0;
  94.         return flg;       
  95. }

  96. void ds1602order(uchar dat) //寫入液晶的命令
  97. {
  98.         while(ds1602state());
  99.         rs=0;
  100.         rw=0;
  101.         e=0;
  102.         delayus();
  103.         P0=dat;
  104.         delayus();
  105.         e=1;
  106.         delayus();
  107.         e=0;
  108. }

  109. void ds1602data(uchar dat) //寫入液晶的數據
  110. {
  111.         while(ds1602state());
  112.         rs=1;
  113.         rw=0;
  114.         e=0;
  115.         delayus();
  116.         P0=dat;
  117.         delayus();
  118.         e=1;
  119.         delayus();
  120.         e=0;
  121. }

  122. void ds1602address(uchar dat) //寫入液晶的地址
  123. {
  124.         ds1602order(0x80|dat);
  125. }

  126. void ds1602init() //液晶初始化
  127. {
  128.         delayms(15);
  129.         ds1602order(0x38);
  130.         delayms(5);
  131.         ds1602order(0x0c);
  132.         delayms(5);
  133.         ds1602order(0x06);
  134.         delayms(5);
  135.         ds1602order(0x01);
  136.         delayms(5);
  137. }

  138. //DS18B20程序

  139. sbit dq=P3^3;
  140. uchar wendu; //DS18B20溫度保存變量

  141. bit ds18b20init() //DS18B20初始化
  142. {
  143.         bit flg;
  144.         uchar n;
  145.         dq=1;
  146.         for(n=0;n<2;n++);
  147.         dq=0;
  148.         for(n=0;n<200;n++);
  149.         dq=1;
  150.         for(n=0;n<10;n++);
  151.         flg=dq;
  152.         for(n=0;n<100;n++);
  153.         return flg;

  154. }

  155. void ds18b20write(uchar dat) //DS18B20寫入數據
  156. {
  157.         uchar n,m;
  158.         for(n=0;n<8;n++)
  159.         {
  160.                 dq=1;
  161.                 _nop_();
  162.                 dq=0;
  163.                 _nop_();
  164.                 dq=dat&0x01;
  165.                 for(m=0;m<30;m++);
  166.                 dq=1;
  167.                 for(m=0;m<2;m++);
  168.                 dat>>=1;
  169.         }
  170. }

  171. uchar ds18b20read() //DS18B20讀出數據
  172. {
  173.         uchar n,m,dat;
  174.         for(n=0;n<8;n++)
  175.         {
  176.                 dq=1;
  177.                 _nop_();
  178.                 dq=0;
  179.                 _nop_();
  180.                 dq=1;
  181.                 for(m=0;m<2;m++);
  182.                 dat=dat>>1;
  183.                 if(dq==1)
  184.                         dat|=0x80;
  185.                 dq=1;
  186.                 for(m=0;m<2;m++);               
  187.         }
  188.         return dat;
  189. }

  190. void ds18b20wendu() //DS18B20溫度轉換 沒有對負溫度進行相關的判斷和操作
  191. {
  192.         uchar wenduh,wendul;
  193.         ds18b20init();
  194.         ds18b20write(0xcc);
  195.         ds18b20write(0x44);

  196.         ds18b20init();
  197.         ds18b20write(0xcc);
  198.         ds18b20write(0xbe);
  199.         wendul=ds18b20read();
  200.         wenduh=ds18b20read();
  201.         wendu=(wendul>>4)|(wenduh<<4);
  202. }

  203. //DS1302時鐘程序

  204. sbit scl=P1^0;
  205. sbit sd=P1^1;
  206. sbit rst=P1^2;

  207. uchar code discode3[]={"0123456789"}; //DS1302時鐘顯示使用的字符數據

  208. void ds1302write(uchar dat) //DS1302寫數據
  209. {
  210.         uchar n;
  211.         scl=0;
  212.         for(n=0;n<8;n++)
  213.         {
  214.                 sd=dat&0x01;
  215.                 delayus();
  216.                 scl=1;
  217.                 delayus();
  218.                 scl=0;
  219.                 delayus();
  220.                 dat>>=1;
  221.         }
  222. }

  223. uchar ds1302read() //DS1302讀數據
  224. {
  225.         uchar dat,n;
  226.         for(n=0;n<8;n++)
  227.         {
  228.                 dat>>=1;
  229.                 if(sd==1)
  230.                         dat|=0x80;
  231.                 scl=1;
  232.                 delayus();
  233.                 scl=0;
  234.                 delayus();
  235.         }
  236.         return dat;
  237. }

  238. void ds1302writedata(uchar add,uchar dat) //DS1302寫入指定地址數據
  239. {
  240.         rst=0;
  241.         scl=0;
  242.         rst=1;

  243.         ds1302write(add);
  244.         ds1302write(dat);

  245.         scl=1;
  246.         rst=0;
  247. }

  248. uchar ds1302readdata(uchar add) //DS1302讀出指定地址數據
  249. {
  250.         uchar dat;
  251.         rst=0;
  252.         scl=0;
  253.         rst=1;

  254.         ds1302write(add);
  255.         dat=ds1302read();

  256.         scl=1;
  257.         rst=0;
  258.         return dat;       
  259. }

  260. void ds1302init() //DS1302寫入初始數據
  261. {
  262.         if(ds1302readdata(0x81)&0x80)
  263.         {
  264.                 ds1302writedata(0x8e,0x00);
  265.                 ds1302writedata(0x80,0x00);
  266.                 ds1302writedata(0x82,0x25);
  267.                 ds1302writedata(0x84,0x12);
  268.                 ds1302writedata(0x86,0x02);
  269.                 ds1302writedata(0x88,0x04);
  270.                 ds1302writedata(0x8a,0x02);
  271.                 ds1302writedata(0x8c,0x13);
  272.                 ds1302writedata(0x8e,0x80);
  273.                 ds1302writedata(0x90,0xa5);
  274.         }
  275. }

  276. void ds1302disp() //DS1302時鐘數據顯示
  277. {
  278.         uchar secondh,secondl,minuteh,minutel,hourh,hourl,dayh,dayl,monthh,monthl,week,yearh,yearl; //時鐘數據的相關高位和地位
  279.         hour=ds1302readdata(0x85);
  280.         minute=ds1302readdata(0x83);
  281.         secondh=ds1302readdata(0x81)>>4; //DS1302秒數據的高位
  282.         secondl=ds1302readdata(0x81)&0x0f; //DS1302秒數據的低位
  283.         minuteh=minute>>4;
  284.         minutel=minute&0x0f;
  285.         hourh=hour>>4;
  286.         hourl=hour&0x0f;
  287.         dayh=ds1302readdata(0x87)>>4;
  288.         dayl=ds1302readdata(0x87)&0x0f;
  289.         monthh=ds1302readdata(0x89)>>4;
  290.         monthl=ds1302readdata(0x89)&0x0f;
  291.         yearh=ds1302readdata(0x8d)>>4;
  292.         yearl=ds1302readdata(0x8d)&0x0f;
  293.         week=ds1302readdata(0x8b)&0x0f;
  294.         ds1602address(0x04);
  295.         ds1602data('2');
  296.         ds1602data('0');
  297.         ds1602data(discode3[yearh]);
  298.         ds1602data(discode3[yearl]);
  299.         ds1602data('-');
  300.         ds1602data(discode3[monthh]);
  301.         ds1602data(discode3[monthl]);
  302.         ds1602data('-');
  303.         ds1602data(discode3[dayh]);
  304.         ds1602data(discode3[dayl]);
  305.         ds1602data(' ');
  306.         ds1602data(discode3[week]);
  307.         ds1602address(0x45);
  308.         ds1602data(discode3[hourh]);
  309.         ds1602data(discode3[hourl]);
  310.         ds1602data(':');
  311.         ds1602data(discode3[minuteh]);
  312.         ds1602data(discode3[minutel]);
  313.         ds1602data(':');
  314.         ds1602data(discode3[secondh]);
  315.         ds1602data(discode3[secondl]);
  316.         ds1602data(' ');
  317.         ds1602data(discode3[wendu/10]);
  318.         ds1602data(discode3[wendu%10]);       
  319. }

  320. //24c08讀寫程序

  321. sbit  sclk=P3^4;
  322. sbit sda=P3^5;
  323. uchar alarmcode[4]; //24c08中保存的鬧鐘數據,alarmcode[0]-鬧鐘數據的小時 alarmcode[1]-鬧鐘數據的分鐘 alarmcode[2]-鬧鐘數據的秒
  324. //alarmcode[3]-鬧鐘開關標志 (0為鬧鐘關閉,1為鬧鐘開啟)
  325. void iic24c08start() //24c08啟動
  326. {
  327.         sda=1;
  328.         sclk=1;
  329.         delayus();
  330.         sda=0;
  331.         sclk=0;
  332.         delayus();
  333. }

  334. void iic24c08stop() //24c08停止
  335. {
  336.         sda=0;
  337.         sclk=1;
  338.         delayus();
  339.         sda=1;
  340.         delayus();
  341. }

  342. void iic24c08answer() //24c08應答
  343. {
  344.         uchar n;
  345.         sclk=1;
  346.         delayus();
  347.         while((sda==1)&&(n<255))
  348.         n++;
  349.         sclk=0;
  350.         delayus();

  351. }

  352. void iic24c08write(uchar dat) //24c08寫數據
  353. {
  354.         uchar n;
  355.         for(n=0;n<8;n++)
  356.         {
  357.                 sda=dat&0x80;
  358.                 delayus();
  359.                 sclk=1;
  360.                 delayus();
  361.                 sclk=0;
  362.                 delayus();
  363.                 dat<<=1;
  364.         }
  365. }

  366. uchar iic24c08read() //24c08讀數據
  367. {
  368.         uchar n,dat;
  369.         for(n=0;n<8;n++)
  370.         {
  371.                 sclk=1;
  372.                 dat<<=1;
  373.                 if(sda==1)
  374.                 dat|=0x01;
  375.                 delayus();
  376.                 sclk=1;
  377.                 delayus();
  378.                 sclk=0;
  379.                 delayus();
  380.         }
  381.         return dat;
  382. }

  383. void iic24c08writeadd(uchar add,uchar dat) //24c08寫指定地址數據
  384. {
  385.         iic24c08start();
  386.         iic24c08write(0xa0);
  387.         iic24c08answer();
  388.         iic24c08write(add);
  389.         iic24c08answer();
  390.         iic24c08write(dat);
  391.         iic24c08answer();
  392.         iic24c08stop();
  393.         delayms(15);
  394. }

  395. uchar iic24c08readadd(uchar add) //24c08讀指定地址數據
  396. {
  397.         uchar dat;
  398.         iic24c08start();
  399.         iic24c08write(0xa0);
  400.         iic24c08answer();
  401.         iic24c08write(add);
  402.         iic24c08answer();

  403.         iic24c08start();
  404.         iic24c08write(0xa1);
  405.         iic24c08answer();
  406.         dat=iic24c08read();
  407.         iic24c08stop();
  408.         return dat;       
  409. }

  410. //紅外解碼程序

  411. sbit ir=P3^2;

  412. void decode()
  413. {
  414.         uchar u,m;
  415. while(ir==0);
  416.   delay2400();
  417.   if(ir==1)                               //延時2.4ms后如果是高電平則是新碼
  418.   {
  419.      delay2400();                            //延時4.8ms避開4.5ms的高電平
  420.          for(u=0;u<4;u++)
  421.          {
  422.                 for(m=0;m<8;m++)
  423.                    {
  424.                    while(ir==0);                       //等待地址碼第1位高電平到來
  425.                    delay882();                         //延時882ms判斷此時引腳電平
  426.                    if(ir==0)
  427.                    {      
  428.                           ircode[u]>>=1;
  429.                           ircode[u]=ircode[u]&0x7f;                          
  430.                    }
  431.                    else if(ir==1)
  432.                    {
  433.                           delay1000();
  434.                           ircode[u]>>=1;
  435.                           ircode[u]=ircode[u]|0x80;
  436.                    }
  437.                 }                                    //1位數據接收結束
  438.              }                                       //32位二進制碼接收結束
  439.    }        

  440.                 if(ircode[2]==~ircode[3])
  441.                 {        irflag=1;
  442.                
  443.                 }


  444. }

  445. //外部中斷0和定時器0初始化

  446. void timeinit()  
  447. {
  448.         EA=1;
  449.         EX0=1;
  450.         IT0=1;
  451.         ET0=1;
  452.         TMOD=0X01;
  453.         TH0=(65536-50000)/256;
  454.         TL0=(65536-50000)%256;
  455.         TR0=0;
  456. }

  457. void main()
  458. {
  459.         uchar n; //計數次數變量       
  460.         timeinit();
  461.         ds1602init();
  462.         ds1602address(0x00);
  463.         while(discode1[n]!='\0') //在DS1602寫入字符 DATE
  464.         {
  465.                 ds1602data(discode1[n]);
  466.                 n++;       
  467.         }
  468.         n=0;
  469.         ds1602address(0x40);
  470.         while(discode2[n]!='\0') //在DS1602寫入字符 TIME
  471.         {
  472.                 ds1602data(discode2[n]);
  473.                 n++;
  474.         }       
  475.         ds1302init();
  476.         n=0;
  477.         for(n=0;n<4;n++)
  478.         {
  479.                 alarmcode[n]=iic24c08readadd(n);
  480.         }
  481.         clockflag=(bit)alarmcode[3];
  482.         if(clockflag)
  483.         {
  484.                 TR0=1;
  485.         }

  486.         while(1)
  487.         {
  488.                 if(setflag==0&&alarmflag==0)
  489.                 {
  490.                         ds18b20wendu();
  491.                         ds1302disp();
  492.                 }
  493.                 if(irflag==1) //紅外解碼成功后通過switch函數匹配紅外碼對應的操作
  494.                 {
  495.                         switch(ircode[2])
  496.                         {
  497.                                         case 0x45: //設置時鐘的年 光標在年數據第一位上閃爍
  498.                                                 if(alarmflag==0) //如果已經進入了鬧鐘設置界面,按此紅外碼無效
  499.                                                 {
  500.                                                         num=0;
  501.                                                         ds1602order(0x0f);
  502.                                                         delayms(5);
  503.                                                         ds1602address(0x06);
  504.                                                         delayms(5);
  505.                                                         setflag=1;
  506.                                                         h=ds1302readdata(0x8d)>>4;
  507.                                                         l=ds1302readdata(0x8d)&0x0f;
  508.                                                         beep();
  509.                                                 }
  510.                                                 break;
  511.                                         case 0x46: //設置時鐘的月 光標在月數據第一位上閃爍
  512.                                                         if(alarmflag==0)
  513.                                                 {
  514.                                                         num=0;
  515.                                                         ds1602order(0x0f);
  516.                                                         delayms(5);
  517.                                                         ds1602address(0x09);
  518.                                                         delayms(5);
  519.                                                         setflag=2;
  520.                                                         h=ds1302readdata(0x89)>>4;
  521.                                                         l=ds1302readdata(0x89)&0x0f;
  522.                                                         beep();
  523.                                                 }
  524.                                                 break;
  525.                                 case 0x47: //設置時鐘的日 光標在日數據第一位上閃爍
  526.                                                         if(alarmflag==0)
  527.                                                 {
  528.                                                         num=0;
  529.                                                         ds1602order(0x0f);
  530.                                                         delayms(5);
  531.                                                         ds1602address(0x0c);
  532.                                                         delayms(5);
  533.                                                         setflag=3;
  534.                                                         h=ds1302readdata(0x87)>>4;
  535.                                                         l=ds1302readdata(0x87)&0x0f;
  536.                                                         beep();
  537.                                                 }
  538.                                                 break;

  539.                                 case 0x44://設置時鐘的星期 光標在星期數據第一位上閃爍
  540.                                                         if(alarmflag==0)
  541.                                                 {
  542.                                                         num=0;
  543.                                                         ds1602order(0x0f);
  544.                                                         delayms(5);
  545.                                                         ds1602address(0x0f);
  546.                                                         delayms(5);
  547.                                                         setflag=4;
  548.                                                         h=ds1302readdata(0x8b)>>4;
  549.                                                         l=ds1302readdata(0x8b)&0x0f;
  550.                                                         beep();
  551.                                                 }
  552.                                                 break;

  553.                                 case 0x40: //設置時鐘的小時 光標在小時數據第一位上閃爍
  554.                                                 num=0;
  555.                                                 ds1602order(0x0f);
  556.                                                 delayms(5);
  557.                                                 ds1602address(0x45);
  558.                                                 if(alarmflag==0) //設置時鐘小時數據 (alarmflag=1時表示已經進入鬧鐘設置界面)
  559.                                                 {
  560.                                                         setflag=5;
  561.                                                         h=ds1302readdata(0x85)>>4;
  562.                                                         l=ds1302readdata(0x85)&0x0f;
  563.                                                         beep();
  564.                                                 }
  565.                                                 else //設置鬧鐘小時
  566.                                                 {
  567.                                                         setflag=8;
  568.                                                         h=alarmcode[0]>>4;
  569.                                                         l=alarmcode[0]&0x0f;
  570.                                                         beep();
  571.                                                 }

  572.                                                 break;
  573.                                 case 0x43: //設置時鐘的分 光標在分數據第一位上閃爍
  574.                                                
  575.                                                 num=0;
  576.                                                 ds1602order(0x0f);
  577.                                                 delayms(5);
  578.                                                 ds1602address(0x48);
  579.                                                 delayms(5);
  580.                                                 if(alarmflag==0)
  581.                                                 {
  582.                                                         setflag=6;
  583.                                                         h=ds1302readdata(0x83)>>4;
  584.                                                         l=ds1302readdata(0x83)&0x0f;
  585.                                                         beep();
  586.                                                 }
  587.                                                 else
  588.                                                 {
  589.                                                         setflag=9;
  590.                                                         h=alarmcode[1]>>4;
  591.                                                         l=alarmcode[1]&0x0f;
  592.                                                         beep();
  593.                                                 }

  594.                                                 break;
  595.                                 case 0x07: //設置時鐘的秒 光標在秒數據第一位上閃爍
  596.                                                 num=0;
  597.                                                 ds1602order(0x0f);
  598.                                                 delayms(5);
  599.                                                 ds1602address(0x4b);
  600.                                                 delayms(5);
  601.                                                 if(alarmflag==0)
  602.                                                 {
  603.                                                         setflag=7;
  604.                                                         h=ds1302readdata(0x81)>>4;
  605.                                                         l=ds1302readdata(0x81)&0x0f;
  606.                                                         beep();
  607.                                                 }
  608.                                                 else
  609.                                                 {
  610.                                                         setflag=10;
  611.                                                         h=alarmcode[2]>>4;
  612.                                                         l=alarmcode[2]&0x0f;
  613.                                                         beep();
  614.                                                 }

  615.                                                 break;       
  616.                                 case 0x19: //進入鬧鐘設置界面
  617.                                         alarmflag=1;
  618.                                         setflag=0;
  619.                                         for(n=0;n<4;n++) //從24c08中讀取鬧鐘數據以便在下面顯示
  620.                                         {
  621.                                                 alarmcode[n]=iic24c08readadd(n);
  622.                                         }
  623.                                         clockflag=(bit)alarmcode[3];
  624.                                         beep();
  625.                                         ds1602order(0x01);
  626.                                         delayms(5);
  627.                                         ds1602order(0xc);
  628.                                         ds1602address(0x01);
  629.                                         n=0;
  630.                                         while(alarmcode1[n]!='\0') //在DS1602顯示字符SET ALARM TIME
  631.                                         {
  632.                                                 ds1602data(alarmcode1[n]);
  633.                                                 n++;
  634.                                         }
  635.                                         n=0;
  636.                                         if(alarmcode[3]==0) //根據24c08中鬧鐘開關數據顯示相應的字符ON OFF
  637.                                         {
  638.                                                 ds1602address(0x41);
  639.                                                 while(alarmoff[n]!='\0')
  640.                                                 {
  641.                                                 ds1602data(alarmoff[n]);
  642.                                                 n++;
  643.                                                 }
  644.                                         }
  645.                                         else
  646.                                         {
  647.                                                 ds1602address(0x41);
  648.                                                 while(alarmon[n]!='\0')
  649.                                                 {
  650.                                                 ds1602data(alarmon[n]);
  651.                                                 n++;
  652.                                                 }

  653.                                         }
  654.                                         ds1602address(0x45);
  655.                                         ds1602data(discode3[alarmcode[0]>>4]);
  656.                                         ds1602data(discode3[alarmcode[0]&0x0f]);
  657.                                         ds1602data(':');
  658.                                         ds1602data(discode3[alarmcode[1]>>4]);
  659.                                         ds1602data(discode3[alarmcode[1]&0x0f]);
  660.                                         ds1602data(':');
  661.                                         ds1602data(discode3[alarmcode[2]>>4]);       
  662.                                         ds1602data(discode3[alarmcode[2]&0x0f]);
  663.                                         ds1602address(0x40);
  664.                                         break;
  665.                                 case 0x0d: //鬧鐘開關設置
  666.                                         if(alarmflag==1)
  667.                                         {
  668.                                                 beep();
  669.                                                 ds1602order(0x0c);
  670.                                                 clockflag=~clockflag;
  671.                                                 if(clockflag==0)
  672.                                                 {                                                       
  673.                                                         ds1602address(0x41);
  674.                                                         n=0;
  675.                                                         while(alarmoff[n]!='\0')       
  676.                                                         {
  677.                                                                 ds1602data(alarmoff[n]);
  678.                                                                 n++;
  679.                                                         }
  680.                                                         iic24c08writeadd(0x03,0x00);
  681.                                                         TR0=0;
  682.                                                 }
  683.                                                 else
  684.                                                 {
  685.                                                                 ds1602address(0x41);
  686.                                                                 n=0;
  687.                                                                 while(alarmon[n]!='\0')       
  688.                                                                 {
  689.                                                                         ds1602data(alarmon[n]);
  690.                                                                         n++;
  691.                                                                 }
  692.                                                                 iic24c08writeadd(0x03,0x01);
  693.                                                                 TR0=1;
  694.                                                                 for(n=0;n<4;n++)
  695.                                                                 {
  696.                                                                         alarmcode[n]=iic24c08readadd(n);
  697.                                                                 }
  698.                                                 }
  699.                                        
  700.                                         }
  701.                                         break;
  702.                                 case 0x16: //輸入字符0
  703.                                         if(setflag!=0)
  704.                                         {       
  705.                                                 num++; //輸入次數加1
  706.                                                 ds1602data('0');
  707.                                                 switch(num) //匹配輸入次數
  708.                                                 {
  709.                                                         case 1: h=0; break; //高位數據
  710.                                                         case 2: num=0; l=0; ds1602order(0x10);delayms(5);  ds1602order(0x10); delayms(5);break; //低位數據
  711.                                                 }                                       
  712.                                                 beep();
  713.                                         }

  714.                                 break;

  715.                                 case 0x0c:
  716.                                         if(setflag!=0)
  717.                                         {
  718.                                                 num++;
  719.                                                 ds1602data('1');
  720.                                                 switch(num)
  721.                                                 {
  722.                                                         case 1: h=1; break;
  723.                                                         case 2: num=0;l=1;ds1602order(0x10);delayms(5);  ds1602order(0x10);delayms(5); break;
  724.                                                 }                                       
  725.                                                 beep();
  726.                                        
  727.                                         }
  728.                                 break;

  729.                                 case 0x18:
  730.                                         if(setflag!=0)
  731.                                         {
  732.                                                 num++;
  733.                                                 ds1602data('2');
  734.                                                 switch(num)
  735.                                                 {
  736.                                                         case 1: h=2; break;
  737.                                                         case 2: num=0; l=2;ds1602order(0x10);delayms(5);  ds1602order(0x10);delayms(5); break;
  738.                                                 }                                       
  739.                                                 beep();
  740.                                         }
  741.                                 break;
  742.                        
  743.                                 case 0X5E:
  744.                                         if(setflag!=0)
  745.                                         {
  746.                                                 num++;
  747.                                                 ds1602data('3');
  748.                                                 switch(num)
  749.                                                 {
  750.                                                         case 1: h=3; break;
  751.                                                         case 2: num=0; l=3;ds1602order(0x10); delayms(5); ds1602order(0x10); delayms(5);break;
  752.                                                 }                                       
  753.                                                 beep();
  754.                                         }
  755.                                 break;
  756.                        
  757.                                 case 0X08:
  758.                                         if(setflag!=0)
  759.                                         {
  760.                                                 num++;
  761.                                                 ds1602data('4');
  762.                                        
  763.                                                 switch(num)
  764.                                                 {
  765.                                                         case 1: h=4; break;
  766.                                                         case 2: num=0; l=4; ds1602order(0x10);delayms(5);  ds1602order(0x10);delayms(5); break;
  767.                                                 }                                       
  768.                                                 beep();
  769.                                         }
  770.                                 break;
  771.                
  772.                                 case 0X1C:
  773.                                         if(setflag!=0)
  774.                                         {
  775.                                                 num++;       
  776.                                                 ds1602data('5');
  777.                                                 switch(num)
  778.                                                 {
  779.                                                         case 1: h=5; break;
  780.                                                         case 2: num=0; l=5; ds1602order(0x10); delayms(5); ds1602order(0x10);delayms(5); break;
  781.                                                 }                                       
  782.                                                 beep();
  783.                                         }
  784.                                 break;
  785.                        
  786.                                 case 0X5A:
  787.                                         if(setflag!=0)
  788.                                         {
  789.                                                 num++;       
  790.                                                 ds1602data('6');
  791.                                                
  792.                                                 switch(num)
  793.                                                 {
  794.                                                         case 1: h=6; break;
  795.                                                         case 2: num=0; l=6; ds1602order(0x10); delayms(5); ds1602order(0x10); delayms(5);break;
  796.                                                 }                                       
  797.                                                 beep();
  798.                                         }
  799.                                 break;
  800.                        
  801.                                 case 0X42:
  802.                                         if(setflag!=0)
  803.                                         {
  804.                                                 num++;       
  805.                                                 ds1602data('7');
  806.                                                        
  807.                                                 switch(num)
  808.                                                 {
  809.                                                         case 1: h=7; break;
  810.                                                         case 2: num=0; l=7; ds1602order(0x10); delayms(5); ds1602order(0x10);delayms(5); break;
  811.                                                 }                                       
  812.                                                 beep();
  813.                                         }
  814.                                 break;
  815.                        
  816.                                 case 0X52:
  817.                                         if(setflag!=0)
  818.                                         {
  819.                                                 num++;       
  820.                                                 ds1602data('8');
  821.                                                        
  822.                                                 switch(num)
  823.                                                 {
  824.                                                         case 1: h=8; break;
  825.                                                         case 2: num=0; l=8; ds1602order(0x10); delayms(5); ds1602order(0x10);delayms(5); break;
  826.                                                 }                                       
  827.                                                 beep();
  828.                                         }
  829.                                 break;
  830.                        
  831.                                 case 0X4A:
  832.                                         if(setflag!=0)
  833.                                         {
  834.                                                 num++;               
  835.                                                 ds1602data('9');
  836.                                                
  837.                                                 switch(num)
  838.                                                 {
  839.                                                         case 1: h=9; break;
  840.                                                         case 2: num=0; l=9; ds1602order(0x10);delayms(5);  ds1602order(0x10); delayms(5);break;
  841.                                                 }                                       
  842.                                                 beep();
  843.                                         }
  844.                                 break;
  845.                                 case 0X15: //取消返回碼
  846.                                         setflag=0;
  847.                                         irflag=0;
  848.                                         if(alarmflag==1) //如果進入過鬧鐘設置界面,需要重新寫入DS1302的初始字符數據
  849.                                         {
  850.                                                 alarmflag=0;
  851.                                                 n=0;
  852.                                                 ds1602address(0x00);
  853.                                                 while(discode1[n]!='\0')
  854.                                                 {
  855.                                                         ds1602data(discode1[n]);
  856.                                                         n++;       
  857.                                                 }
  858.                                                 n=0;
  859.                                                 ds1602address(0x40);
  860.                                                 while(discode2[n]!='\0')
  861.                                                 {
  862.                                                         ds1602data(discode2[n]);
  863.                                                         n++;
  864.                                                 }       

  865.                                         }
  866.                                         beep();
  867. ……………………

  868. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
紅外遙控設置電子時鐘帶溫度和鬧鐘.rar (57.67 KB, 下載次數: 44)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本成人免费观看 | 亚洲国产精品第一区二区 | 欧美久久久久久 | 91视频免费视频 | 91久久国产综合久久 | 国产影音先锋 | 欧美日韩久久精品 | 一区精品国产欧美在线 | 亚洲乱码国产乱码精品精98午夜 | 亚洲综合视频 | 日本一区二区三区在线观看 | 国产精品久久久久久中文字 | 国产精品久久久久一区二区三区 | 中文字幕国产高清 | 亚洲a一区二区 | 亚洲字幕在线观看 | 国产一区不卡 | 777zyz色资源站在线观看 | 99精品一区 | 在线免费黄色小视频 | 亚洲视频一区二区三区 | 色吊丝在线 | 在线观看中文字幕dvd播放 | 久久精品一区 | 国产精品毛片无码 | 国产精品一区在线 | 日韩国产欧美在线观看 | 成人国产一区二区三区精品麻豆 | 黄免费看| 亚洲欧美激情四射 | 五月天婷婷综合 | 国产亚洲人成a在线v网站 | 国产精品自拍视频 | 九九九视频 | 欧美精品一二三 | 精品免费| 国产资源视频 | 欧美日韩精品久久久免费观看 | www.天天操.com | 国产精品完整版 | 国产精品夜色一区二区三区 |