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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機紅外遙控智能電風扇設計資料

[復制鏈接]
跳轉到指定樓層
樓主
紅外遙控智能電風扇實物圖紙程序共享
制作出來的實物圖如下:


電路原理圖如下:


單片機源程序如下:
  1. //宏定義
  2. #define uchar unsigned char
  3. #define uint  unsigned int

  4. //頭函數
  5. #include <stc12c5a60s2.h>
  6. #include <AT24C02.h>
  7. //溫度傳感器標志變量
  8. uchar flag=1;
  9. #include <DS18B20.h>
  10. #include <Ds1302.h>
  11. #include <Lcd.h>
  12. #include <Data.h>
  13. //熱釋電傳感器
  14. sbit RR=P3^4;

  15. //是否有人狀態 鬧鈴狀態  風速狀態
  16. uchar R=1,L=1,FS=0;
  17. //讀取溫度
  18. uint TT=0;

  19. //開機時分秒
  20. uchar OS=0,OF=0,OM=0;

  21. //關機時分秒
  22. uchar ClS=0,ClF=0,ClM=0;

  23. //模式
  24. uchar Mode=0;
  25. //調整位光標
  26. uchar Modes=0;
  27. //暫時保存狀態
  28. uchar Modetemp=0;

  29. //時間計算
  30. #define Imax 14000    //此處為晶振為11.0592時的取值,
  31. #define Imin 8000    //如用其它頻率的晶振時,
  32. #define Inum1 145    //要改變相應的取值。
  33. #define Inum2 700
  34. #define Inum3 3000
  35. //解碼變量
  36. unsigned char Im[4]={0x00,0x00,0x00,0x00};
  37. //全局變量
  38. uchar f;
  39. unsigned long m,Tc;
  40. uchar IrOK;


  41. //延時
  42. void delayHW(uchar i);
  43. //PWM脈沖占空比調節
  44. void pwm_set(uchar a);
  45. //PWM初始化
  46. void initpwm();
  47. //外部中斷定時器0寄存器初始化
  48. void Init();



  49. //主函數
  50. void main()
  51. {
  52.         //PWM脈沖
  53.         initpwm();
  54.         //外部中斷定時器0寄存器初始化
  55.         Init();
  56.         //屏幕初始化
  57.         Init_LCD();
  58.         //時鐘初始化
  59.         Ds1302_Init();
  60.         //EEPROM初始化
  61.         initeeprom();
  62.         //寫
  63. /*        write_add(0x00,L);
  64.         write_add(0x01,OS);
  65.         write_add(0x02,OF);
  66.         write_add(0x03,OM);
  67.         write_add(0x04,ClS);
  68.         write_add(0x05,ClF);
  69.         write_add(0x06,ClM);*/

  70.         //讀
  71.         L=read_add(0x00);
  72.         OS=read_add(0x01);
  73.         OF=read_add(0x02);
  74.         OM=read_add(0x03);
  75.         ClS=read_add(0x04);
  76.         ClF=read_add(0x05);
  77.         ClM=read_add(0x06);

  78.         //發送溫度轉換
  79.         tmpchange();
  80.         //發送溫度轉換
  81.         tmpchange();
  82.         //讀取溫度
  83.         TT=tmp();        
  84.         //初始化
  85.         pwm_set(0xff);
  86.         //讀取時間
  87.         while(1)
  88.         {
  89.                 //發送溫度轉換
  90.                 tmpchange();
  91.                 //讀取溫度
  92.                 TT=tmp();

  93.                 //讀取人員狀況
  94.                 //有人
  95.                 if(RR==1)
  96.                 {
  97.                         R=0;
  98.                 }
  99.                 //無人
  100.                 else
  101.                 {
  102.                         R=1;
  103.                 }
  104.                 //模式處理
  105.                 //自動開機
  106.                 if(Mode==2)
  107.                 {
  108.                         //有人開啟風扇
  109.                         if(R==1)
  110.                         {
  111.                                 //溫度調整0檔關閉
  112.                                 if(TT<=300)
  113.                                 {
  114.                                         pwm_set(0xff);
  115.                                         FS=0;
  116.                                 }
  117.                                 //1檔
  118.                                 else if(TT>300&&TT<=320)
  119.                                 {
  120.                                         pwm_set(50);
  121.                                         FS=1;
  122.                                 }
  123.                                 //2檔
  124.                                 else if(TT>320&&TT<=340)
  125.                                 {
  126.                                         pwm_set(10);
  127.                                         FS=2;
  128.                                 }
  129.                                 //3檔
  130.                                 else if(TT>340)
  131.                                 {
  132.                                         pwm_set(0);
  133.                                         FS=3;
  134.                                 }
  135.                         }
  136.                         //無人關閉風扇
  137.                         else        
  138.                         {
  139.                                 pwm_set(0xff);
  140.                                 FS=0;
  141.                         }
  142.                 }

  143.                 //讀取時間
  144.                 Ds1302_Read_Time();
  145.                 //LCD實時刷新
  146.                 LCD_Write_Time(time_buf1,TT,R,L,FS,Mode);
  147.                 //延時不然芯片會發熱
  148.                 delay_LCD(50);
  149.                 //如果開啟定時 定時后轉為自動模式
  150.                 if(L==1&&time_buf1[4]==OS&&time_buf1[5]==OF&&time_buf1[6]==OM)
  151.                 {
  152.                         Mode=2;               
  153.                 }
  154.                 else if(L==3&&time_buf1[0]==OS&&time_buf1[5]==OF&&time_buf1[6]==OM)
  155.                 {
  156.                         Mode=2;               
  157.                 }
  158.                 else if(L==2&&time_buf1[4]==ClS&&time_buf1[5]==ClF&&time_buf1[6]==ClM)
  159.                 {
  160.                         Mode=0;
  161.                         pwm_set(0xff);
  162.                 }
  163.                 else if(L==3&&time_buf1[4]==ClS&&time_buf1[5]==ClF&&time_buf1[6]==ClM)
  164.                 {
  165.                         Mode=0;
  166.                         pwm_set(0xff);
  167.                 }
  168.                 //紅外命令處理
  169.                 if(IrOK==1)
  170.                 {
  171.                         //標志變量清空
  172.                         IrOK=0;
  173.                         //開機關機按鍵
  174.                         if(Im[2]==0x45)
  175.                         {
  176.                                 //關機變開機
  177.                                 if(Mode==0)
  178.                                 {
  179.                                         Mode=1;
  180.                                 }
  181.                                 //開機變關機 或自動變關機
  182.                                 else if(Mode==1||Mode==2)
  183.                                 {
  184.                                         Mode=0;
  185.                                         pwm_set(0xff);
  186.                                 }
  187.                         }
  188.                         //自動模式/手動模式切換
  189.                         else if(Im[2]==0x15)
  190.                         {
  191.                                 //手動切自動
  192.                                 if(Mode==1)
  193.                                 {
  194.                                         Mode=2;
  195.                                 }
  196.                                 //自動切手動
  197.                                 else if(Mode==2)
  198.                                 {
  199.                                         Mode=1;
  200.                                 }
  201.                         }
  202.                         //風速 手動調節0檔
  203.                         else if(Im[2]==0x16)
  204.                         {
  205.                                 //手動模式
  206.                                 if(Mode==1)
  207.                                 {
  208.                                         pwm_set(0xff);                                       
  209.                                 }
  210.                         }
  211.                         //風速 手動調節1檔
  212.                         else if(Im[2]==0x0c)
  213.                         {
  214.                                 //手動模式
  215.                                 if(Mode==1)
  216.                                 {
  217.                                         pwm_set(0x50);                                       
  218.                                 }
  219.                         }
  220.                         //風速 手動調節2檔
  221.                         else if(Im[2]==0x18)
  222.                         {
  223.                                 //手動模式
  224.                                 if(Mode==1)
  225.                                 {
  226.                                         pwm_set(0x10);                                       
  227.                                 }
  228.                         }
  229.                         //風速 手動調節3檔
  230.                         else if(Im[2]==0x5e)
  231.                         {
  232.                                 //手動模式
  233.                                 if(Mode==1)
  234.                                 {
  235.                                         pwm_set(0x00);                                       
  236.                                 }
  237.                         }
  238.                         //是否開啟鬧鈴
  239.                         else if(Im[2]==0x0d)
  240.                         {
  241.                                 L++;
  242.                                 //開啟到關閉
  243.                                 if(L==4)
  244.                                 {
  245.                                         L=0;                                       
  246.                                 }
  247.                                 //////////////////////保存
  248.                                 //寫
  249.                                 delay_LCD(20);
  250.                                 write_add(0x00,L);
  251.                         }
  252.                         //調整開機時間
  253.                         else if(Im[2]==0x44)
  254.                         {
  255.                                 //屏幕初始化
  256.                                 Init_LCD_ONTime();
  257.                                 //時間調整
  258.                                 Modetemp=Mode;
  259.                                 Mode=4;
  260.                                 Modes=0;
  261.                                 //時間刷新
  262.                                 LCD_time(OS,OF,OM);
  263.                                 //開啟光標
  264.                                 write_com(0x0F);
  265.                                 write_com(0x06);
  266.                                 write_com(0x80+40+11);
  267.         
  268.                                 //設置好跳出
  269.                                 while(Mode==4)
  270.                                 {
  271.                                         //紅外命令處理
  272.                                         if(IrOK==1)
  273.                                         {
  274.                                                 //標志變量清空
  275.                                                 IrOK=0;
  276.                                                 //退出并保存
  277.                                                 if(Im[2]==0x44)
  278.                                                 {        
  279.                                                         Mode=Modetemp;        
  280.                                                         //保存
  281.                                                         //寫
  282.                                                         delay_LCD(20);
  283.                                                         write_add(0x01,OS);
  284.                                                         delay_LCD(20);
  285.                                                         write_add(0x02,OF);
  286.                                                         delay_LCD(20);
  287.                                                         write_add(0x03,OM);               
  288.                                                 }
  289.                                                 //左移光標
  290.                                                 else if(Im[2]==0x07)
  291.                                                 {
  292.                                                         Modes++;
  293.                                                         if(Modes==3)
  294.                                                                 Modes=0;
  295.                                                 }
  296.                                                 //右移光標
  297.                                                 else if(Im[2]==0x09)
  298.                                                 {
  299.                                                         Modes--;
  300.                                                         if(Modes==0xff)
  301.                                                                 Modes=2;
  302.                                                 }
  303.                                                 //光標值+
  304.                                                 else if(Im[2]==0x40)
  305.                                                 {
  306.                                                         //秒++
  307.                                                         if(Modes==0)
  308.                                                         {
  309.                                                                 OM++;
  310.                                                                 if(OM==60)
  311.                                                                 {
  312.                                                                         OM=0;
  313.                                                                 }
  314.                                                         }
  315.                                                         //分++
  316.                                                         else if(Modes==1)
  317.                                                         {
  318.                                                                 OF++;
  319.                                                                 if(OF==60)
  320.                                                                 {
  321.                                                                         OF=0;
  322.                                                                 }
  323.                                                         }
  324.                                                         //時++
  325.                                                         else if(Modes==2)
  326.                                                         {
  327.                                                                 OS++;
  328.                                                                 if(OS==24)
  329.                                                                 {
  330.                                                                         OS=0;
  331.                                                                 }
  332.                                                         }
  333.                                                 }
  334.                                                 //光標值-
  335.                                                 else if(Im[2]==0x19)
  336.                                                 {
  337.                                                         //秒--
  338.                                                         if(Modes==0)
  339.                                                         {
  340.                                                                 OM--;
  341.                                                                 if(OM==0xff)
  342.                                                                 {
  343.                                                                         OM=59;
  344.                                                                 }
  345.                                                         }
  346.                                                         //分--
  347.                                                         else if(Modes==1)
  348.                                                         {
  349.                                                                 OF--;
  350.                                                                 if(OF==0xff)
  351.                                                                 {
  352.                                                                         OF=59;
  353.                                                                 }
  354.                                                         }
  355.                                                         //時--
  356.                                                         else if(Modes==2)
  357.                                                         {
  358.                                                                 OS--;
  359.                                                                 if(OS==0xff)
  360.                                                                 {
  361.                                                                         OS=23;
  362.                                                                 }
  363.                                                         }
  364.                                                 }


  365.                                                 //時間刷新
  366.                                                 LCD_time(OS,OF,OM);
  367.                                                 //光標設置
  368.                                                 switch(Modes)
  369.                                                 {
  370.                                                         case 0:
  371.                                                         {
  372.                                                                 write_com(0x80+0x40+11);
  373.                                                                 break;
  374.                                                         }
  375.                                                         case 1:
  376.                                                         {
  377.                                                                 write_com(0x80+0x40+8);
  378.                                                                 break;
  379.                                                         }
  380.                                                         case 2:
  381.                                                         {
  382.                                                                 write_com(0x80+0x40+5);
  383.                                                                 break;
  384.                                                         }
  385.                                                 }//Switch        
  386.                                         }
  387.                                 }//while end
  388.                                                 
  389.                                 //屏幕初始化
  390.                                 Init_LCD();
  391.                         }

  392.                         //調整關機時間
  393.                         else if(Im[2]==0x43)
  394.                         {
  395.                                 //屏幕初始化
  396.                                 Init_LCD_OFFTime();
  397.                                 //時間調整
  398.                                 Modetemp=Mode;
  399.                                 Mode=5;
  400.                                 Modes=0;                        
  401.                                 //時間刷新
  402.                                 LCD_time(ClS,ClF,ClM);
  403.                                 //開啟光標
  404.                                 write_com(0x0F);
  405.                                 write_com(0x06);
  406.                                 write_com(0x80+40+11);
  407.         
  408.                                 //設置好跳出
  409.                                 while(Mode==5)
  410.                                 {
  411.                                         //紅外命令處理
  412.                                         if(IrOK==1)
  413.                                         {
  414.                                                 //標志變量清空
  415.                                                 IrOK=0;
  416.                                                 //退出并保存
  417.                                                 if(Im[2]==0x43)
  418.                                                 {        
  419.                                                         Mode=Modetemp;        
  420.                                                         //保存
  421.                                                         //寫
  422.                                                         delay_LCD(20);
  423.                                                         write_add(0x04,ClS);
  424.                                                         delay_LCD(20);
  425.                                                         write_add(0x05,ClF);
  426.                                                         delay_LCD(20);
  427.                                                         write_add(0x06,ClM);               
  428.                                                 }
  429.                                                 //左移光標
  430.                                                 else if(Im[2]==0x07)
  431.                                                 {
  432.                                                         Modes++;
  433.                                                         if(Modes==3)
  434.                                                                 Modes=0;
  435.                                                 }
  436.                                                 //右移光標
  437.                                                 else if(Im[2]==0x09)
  438.                                                 {
  439.                                                         Modes--;
  440.                                                         if(Modes==0xff)
  441.                                                                 Modes=2;
  442.                                                 }
  443.                                                 //光標值+
  444.                                                 else if(Im[2]==0x40)
  445.                                                 {
  446.                                                         //秒++
  447.                                                         if(Modes==0)
  448.                                                         {
  449.                                                                 ClM++;
  450.                                                                 if(ClM==60)
  451.                                                                 {
  452.                                                                         ClM=0;
  453.                                                                 }
  454.                                                         }
  455.                                                         //分++
  456.                                                         else if(Modes==1)
  457.                                                         {
  458.                                                                 ClF++;
  459.                                                                 if(ClF==60)
  460.                                                                 {
  461.                                                                         ClF=0;
  462.                                                                 }
  463.                                                         }
  464.                                                         //時++
  465.                                                         else if(Modes==2)
  466.                                                         {
  467.                                                                 ClS++;
  468.                                                                 if(ClS==24)
  469.                                                                 {
  470.                                                                         ClS=0;
  471.                                                                 }
  472.                                                         }
  473.                                                 }
  474.                                                 //光標值-
  475.                                                 else if(Im[2]==0x19)
  476.                                                 {
  477.                                                         //秒--
  478.                                                         if(Modes==0)
  479.                                                         {
  480.                                                                 ClM--;
  481.                                                                 if(ClM==0xff)
  482.                                                                 {
  483.                                                                         ClM=59;
  484.                                                                 }
  485.                                                         }
  486.                                                         //分--
  487.                                                         else if(Modes==1)
  488.                                                         {
  489.                                                                 ClF--;
  490.                                                                 if(ClF==0xff)
  491.                                                                 {
  492.                                                                         ClF=59;
  493.                                                                 }
  494.                                                         }
  495.                                                         //時--
  496.                                                         else if(Modes==2)
  497.                                                         {
  498.                                                                 ClS--;
  499.                                                                 if(ClS==0xff)
  500.                                                                 {
  501.                                                                         ClS=23;
  502.                                                                 }
  503.                                                         }
  504.                                                 }


  505.                                                 //時間刷新
  506.                                                 LCD_time(ClS,ClF,ClM);
  507.                                                 //光標設置
  508.                                                 switch(Modes)
  509.                                                 {
  510.                                                         case 0:
  511.                                                         {
  512.                                                                 write_com(0x80+40+11);
  513.                                                                 break;
  514.                                                         }
  515.                                                         case 1:
  516.                                                         {
  517.                                                                 write_com(0x80+40+8);
  518.                                                                 break;
  519.                                                         }
  520.                                                         case 2:
  521.                                                         {
  522.                                                                 write_com(0x80+40+5);
  523.                                                                 break;
  524.                                                         }
  525.                                                 }//Switch        
  526.                                         }
  527.                                 }//while end
  528.                                                 
  529.                                 //屏幕初始化
  530.                                 Init_LCD();
  531.                         }
  532.                         //時間調整
  533.                         else if(Im[2]==0x47)
  534.                         {
  535.                                 //屏幕初始化
  536.                                 Init_LCD();               
  537.                                 //讀取時間
  538.                                 Ds1302_Read_Time();
  539.                                 //LCD實時刷新
  540.                                 LCD_Write_Time(time_buf1,TT,R,L,FS,Mode);
  541.                                 //延時不然芯片會發熱
  542.                                 delay_LCD(50);
  543.                                 //時間調整
  544.                                 Modetemp=Mode;
  545.                                 Mode=3;
  546.                                 Modes=0;
  547.                                 //開啟光標
  548.                                 write_com(0x0F);
  549.                                 write_com(0x06);
  550.                                 write_com(0x80+40+7);
  551.                                 //進入調整
  552.                                 while(Mode==3)
  553.                                 {
  554.                                         //紅外命令處理
  555.                                         if(IrOK==1)
  556.                                         {
  557.                                                 //標志變量清空
  558.                                                 IrOK=0;        
  559.                                                 //跳出調整
  560.                                                 if(Im[2]==0x47)
  561.                                                 {
  562.                                                         Mode=Modetemp;
  563.                                                 }
  564.                                                 //左移光標
  565.                                                 else if(Im[2]==0x07)
  566.                                                 {
  567.                                                         Modes++;
  568.                                                         if(Modes==6)
  569.                                                                 Modes=0;
  570.                                                 }
  571.                                                 //右移光標
  572.                                                 else if(Im[2]==0x09)
  573.                                                 {
  574.                                                         Modes--;
  575.                                                         if(Modes==0xff)
  576.                                                                 Modes=5;
  577.                                                 }
  578.                                                 //光標值+
  579.                                                 else if(Im[2]==0x40)
  580.                                                 {
  581.                                                         //秒++
  582.                                                         if(Modes==0)
  583.                                                         {
  584.                                                                 time_buf1[6]++;
  585.                                                                 if(time_buf1[6]==60)
  586.                                                                 {
  587.                                                                         time_buf1[6]=0;
  588.                                                                 }
  589.                                                         }
  590.                                                         //分++
  591.                                                         else if(Modes==1)
  592.                                                         {
  593.                                                                 time_buf1[5]++;
  594.                                                                 if(time_buf1[5]==60)
  595.                                                                 {
  596.                                                                         time_buf1[5]=0;
  597.                                                                 }
  598.                                                         }
  599.                                                         //時++
  600.                                                         else if(Modes==2)
  601.                                                         {
  602.                                                                 time_buf1[4]++;
  603.                                                                 if(time_buf1[4]==24)
  604.                                                                 {
  605.                                                                         time_buf1[4]=0;
  606.                                                                 }
  607.                                                         }
  608.                                                         //年++
  609.                                                         else if(Modes==3)
  610.                                                         {
  611.                                                                 time_buf1[1]++;
  612.                                                                 if(time_buf1[1]==99)
  613.                                                                 {
  614.                                                                         time_buf1[1]=0;
  615.                                                                 }
  616.                                                         }
  617.                                                         //月++
  618.                                                         else if(Modes==4)
  619.                                                         {
  620.                                                                 time_buf1[2]++;
  621.                                                                 if(time_buf1[2]==13)
  622.                                                                 {
  623.                                                                         time_buf1[2]=1;
  624.                                                                 }
  625.                                                         }
  626.                                                         //日++
  627.                                                         else if(Modes==5)
  628.                                                         {
  629.                                                                 time_buf1[3]++;
  630.                                                                 if(time_buf1[3]==(YDay(time_buf1[1],time_buf1[2])+1))
  631.                                                                 {
  632.                                                                         time_buf1[3]=1;
  633.                                                                 }
  634.                                                                 time_buf1[7]=Conver_week(time_buf1[1],time_buf1[2],time_buf1[3]);
  635.                                                         }
  636.                                                 }
  637.                                                 //光標值-
  638.                                                 else if(Im[2]==0x19)
  639.                                                 {
  640.                                                         //秒--
  641.                                                         if(Modes==0)
  642.                                                         {
  643.                                                                 time_buf1[6]--;
  644.                                                                 if(time_buf1[6]==0xff)
  645.                                                                 {
  646.                                                                         time_buf1[6]=59;
  647.                                                                 }
  648.                                                         }
  649.                                                         //分--
  650.                                                         else if(Modes==1)
  651.                                                         {
  652.                                                                 time_buf1[5]--;
  653.                                                                 if(time_buf1[5]==0xff)
  654.                                                                 {
  655.                                                                         time_buf1[5]=59;
  656.                                                                 }
  657.                                                         }
  658.                                                         //時--
  659.                                                         else if(Modes==2)
  660.                                                         {
  661.                                                                 time_buf1[4]--;
  662.                                                                 if(time_buf1[4]==0xff)
  663.                                                                 {
  664.                                                                         time_buf1[4]=23;
  665.                                                                 }
  666.                                                         }
  667.                                                         //年--
  668.                                                         else if(Modes==3)
  669.                                                         {
  670.                                                                 time_buf1[1]--;
  671.                                                                 if(time_buf1[1]==0xff)
  672.                                                                 {
  673.                                                                         time_buf1[1]=99;
  674.                                                                 }
  675.                                                         }
  676.                                                         //月--
  677.                                                         else if(Modes==4)
  678.                                                         {
  679.                                                                 time_buf1[2]--;
  680.                                                                 if(time_buf1[2]==0)
  681.                                                                 {
  682.                                                                         time_buf1[2]=12;
  683.                                                                 }
  684.                                                         }
  685.                                                         //日--
  686.                                                         else if(Modes==5)
  687.                                                         {
  688.                                                                 time_buf1[3]--;
  689.                                                                 if(time_buf1[3]==0)
  690.                                                                 {
  691.                                                                         time_buf1[3]=YDay(time_buf1[1],time_buf1[2]);
  692.                                                                 }
  693.                                                                 time_buf1[7]=Conver_week(time_buf1[1],time_buf1[2],time_buf1[3]);
  694.                                                         }
  695.                                                 }



  696.                                                 //LCD實時刷新
  697.                                                 LCD_Write_Time(time_buf1,TT,R,L,FS,Mode);
  698.                                                 //光標設置
  699.                                                 switch(Modes)
  700.                                                 {
  701.                                                         case 0:
  702.                                                         {
  703.                                                                 write_com(0x80+40+7);
  704.                                                                 break;
  705.                                                         }
  706.                                                         case 1:
  707.                                                         {
  708.                                                                 write_com(0x80+40+4);
  709.                                                                 break;
  710.                                                         }
  711.                                                         case 2:
  712.                                                         {
  713.                                                                 write_com(0x80+40+1);
  714.                                                                 break;
  715.                                                         }
  716.                                                         case 3:
  717.                                                         {
  718.                                                                 write_com(0x80+3);
  719.                                                                 break;
  720.                                                         }
  721.                                                         case 4:
  722.                                                         {
  723.                                                                 write_com(0x80+6);
  724.                                                                 break;
  725.                                                         }
  726.                                                         case 5:
  727.                                                         {
  728.                                                                 write_com(0x80+9);
  729.                                                                 break;
  730.                                                         }
  731.                                                 }//Switch
  732.                                         }//if               
  733.                                 }//while
  734.                                 //屏幕初始化
  735.                                 Init_LCD();
  736.                                 //保存時間
  737.                                 Ds1302_Write_Time();
  738.                         }

  739.                 }

  740.         }//while end
  741. }



  742. //延時
  743. void delayHW(uchar i)
  744. {
  745.   uchar j,k;
  746.   for(j=i;j>0;j--)
  747.     for(k=125;k>0;k--);
  748. }
  749. //外部中斷定時器0寄存器初始化
  750. void Init()
  751. {
  752.         m=0;
  753.         f=0;
  754.         EA=1;//開啟總中斷        
  755.         IT1=1;//下降沿有效
  756.         EX1=1;//外部中斷1開        
  757.         TMOD=0x01;//定時器初始化  
  758.         TH0=0;//T0賦初值
  759.         TL0=0;
  760.         TR0=0;//t0開始計時
  761. }
  762. //外部中斷解碼程序_外部中斷1
  763. void intersvr1(void) interrupt 2 using 1
  764. {
  765. TR0=1;
  766. Tc=TH0*256+TL0/256;//提取中斷時間間隔時長
  767. TH0=0;
  768. TL0=0;         //定時中斷重新置零
  769. if((Tc>Imin)&&(Tc<Imax))
  770. {
  771.         m=0;
  772.         f=1;
  773.         return;
  774. }       //找到啟始碼
  775. if(f==1)
  776. {
  777.     if(Tc>Inum1&&Tc<Inum3)
  778.     {
  779.            Im[m/8]=Im[m/8]>>1|0x80; m++;
  780.     }
  781.     if(Tc>Inum2&&Tc<Inum1)
  782.     {
  783.       Im[m/8]=Im[m/8]>>1; m++; //取碼
  784.            }
  785.            if(m==32)
  786.     {
  787.       m=0;  
  788.       f=0;
  789.       if(Im[2]==~Im[3])
  790.       {
  791.            IrOK=1;
  792.                           TR0=1;
  793.                           delayHW(200);
  794.            }
  795.       else IrOK=0;   //取碼完成后判斷讀碼是否正確
  796.     }
  797.                //準備讀下一碼
  798. }
  799. }
  800. //PWM脈沖初始化
  801. void initpwm()
  802. {
  803. CCON=0;
  804. CL=0;
  805. CH=0;
  806. CMOD=0X00;//設定Pwm時鐘頻率11.0592/12

  807. CCAPM0=0X42;
  808. PCA_PWM0=0X00;
  809. CCAP0H=0;
  810. CCAP0L=0xff;
  811. CR=1;
  812. }
  813. //PWM占空比設置
  814. void pwm_set(uchar a)
  815. {
  816. CCAP0H=a;
  817. }
復制代碼

所有資料51hei提供下載:
程序--原理圖.rar (2.45 MB, 下載次數: 46)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男女网站在线观看 | 黄色免费av | 欧美成人精品在线 | 欧美一区二区三区四区在线 | 国产九九av | 美女视频一区二区 | 2019精品手机国产品在线 | 亚洲性视频 | 精品欧美一区二区在线观看 | 高清一区二区 | 免费在线观看成人 | 91极品视频 | 日本国产精品视频 | 免费的网站www | 日韩视频专区 | 日本精品免费在线观看 | 欧美日在线 | 天堂中文在线观看 | 欧美精品在线一区二区三区 | 日本电影免费完整观看 | 亚洲一在线 | 97视频在线看 | jlzzjlzz欧美大全 | 天天在线操| 亚洲毛片在线 | 日本在线免费 | 91精品久久久久久久久久入口 | 日韩欧美中文在线 | 在线一区视频 | 国产久 | 成在线人视频免费视频 | 欧美综合一区二区三区 | 成人精品一区 | 亚洲免费视频一区 | 欧美性生活网 | 天天干天天想 | 欧美精品一区二区在线观看 | 久久99国产精品久久99果冻传媒 | 成人免费视屏 | 国产午夜精品一区二区三区嫩草 | 男人天堂久久 |