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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

紅外遙控單片機時鐘帶倒計時

[復制鏈接]
跳轉到指定樓層
樓主
ID:347763 發表于 2018-8-21 08:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
紅外遙控單片機時鐘帶倒計時,功能強大,可以參考。

單片機源程序如下:
  1. //****************************************************************//
  2.                       
  3. //MCU :STC11F60XE
  4. //去中間值6M  內部晶振5.5-6.8M
  5.   
  6. //****************************************************************//

  7. #include<STC11F60XE.H>
  8. #include<intrins.h>
  9. #include<math.h>
  10. #include<DS1302.h>
  11. //#include<RS485.h>
  12. //#include<eepram_operate.h>
  13. #define uchar unsigned char
  14. #define uint unsigned int
  15. //#define Segtime 1                                            //定義讀傳感器時間間隔 單位為秒


  16. /*********************************/

  17. sbit hwx=P3^2;                             //紅外接收數據引腳

  18. sbit  led1=P1^4;
  19. sbit  led2=P1^0;

  20. sbit  SD=P1^5;         
  21. sbit  CK=P1^6;
  22. sbit  SK=P1^7;


  23. bit time_flag,ly_flag,meter_flag,flash_flag;                  
  24. uchar count;
  25. uchar last_sec;
  26. int second;

  27. uchar ly_lhj[4];                                        //保存NEC的四個字節數據
  28. uchar dis_data[4];

  29. uchar data disp_code[12]={0xc0,0xfa,0xa4,0xb0,0x9a,0x91,0x81,0xf8,0x80,0x90,0xff,0xbf}; //0,1,2,3,4,5,6,7,8,9,OFF,負號


  30. /*********************************************/
  31. void delay_1ms(uint ms)
  32. {
  33.    uchar i;
  34.   while(ms--)
  35.   for(i=0;i<20;i++);
  36. }
  37. /*********************************************/
  38. void delay(void)
  39. {               
  40.         uchar i=10;
  41.         while(i--);
  42. }
  43. /***************************************************************************/
  44. void  WR_595(uchar num1)  ////試用于TPIC6B595N直接拉數碼管
  45. {
  46.     uchar date;  
  47.    uchar b;
  48.    date=num1;

  49.   for(b=0;b<=7;b++)
  50.     {
  51.      if((date&0x80)==0x80)   //最高位為1,則向sdata_595發送1
  52.             SD=0;            //發出數據的最高位
  53.          else  
  54.             SD=1;
  55.          
  56.          date<<=1;               //左移位
  57.          SK=0;          
  58.          _nop_();
  59.          _nop_();
  60.          SK=1;            //產生上升沿
  61.             }
  62. }
  63. /***************************************************************************/
  64. void display(void)
  65. {
  66.          CK=0;
  67.              
  68.                   WR_595(disp_code[dis_data[3]]);                                      
  69.                     WR_595(disp_code[dis_data[2]]);                                          
  70.              WR_595(disp_code[dis_data[1]]);
  71.              WR_595(disp_code[dis_data[0]]);
  72.                  
  73.                  /*
  74.                  WR_595(disp_code[3]);                                      
  75.                     WR_595(disp_code[2]);                                          
  76.              WR_595(disp_code[1]);
  77.              WR_595(disp_code[0]);
  78.                  */
  79.                  
  80.                     
  81.                
  82.      CK=1;                 
  83. }
  84. //--------------------------------------------------------------------------------------------------
  85. // 函數名稱: 校驗時間函數                                                                                                 
  86. // 函數功能:   
  87. //--------------------------------------------------------------------------------------------------

  88. void adjust_time(void)
  89. {  
  90.    uchar ex,wei=3;
  91.             led1=0;
  92.          led2=0;
  93.   ////////////////////////////////////

  94.    while(time_flag==1)
  95.     {
  96.         ///////////////////////////
  97.           ex=dis_data[wei];                 //設定位閃爍顯示
  98.           dis_data[wei]=10;
  99.           display();
  100.           delay_1ms(1500);
  101.           dis_data[wei]=ex;
  102.       display();
  103.           delay_1ms(2200);
  104.         ///////////////////////////
  105.             if(ly_flag)
  106.        {
  107.                      ly_flag=0;       //清空標志

  108.              ///////////左移鍵////////////
  109.              if(ly_lhj[2]==0x08 && ly_lhj[3]==0xf7)
  110.                  { if(wei>0)
  111.                    wei--;
  112.                    else
  113.                    wei=3;
  114.                   }
  115.                  ///////////右移鍵////////////
  116.              if(ly_lhj[2]==0x0a && ly_lhj[3]==0xf5)
  117.                  { if(wei<3)
  118.                    wei++;
  119.                    else
  120.                    wei=0;
  121.                   }
  122.               ///////////0鍵////////////
  123.              if(ly_lhj[2]==0x0e && ly_lhj[3]==0xf1)
  124.                      dis_data[wei]=0;
  125.                   ///////////1鍵////////////
  126.              if(ly_lhj[2]==0x10 && ly_lhj[3]==0xef)
  127.                      dis_data[wei]=1;
  128.                   ///////////2鍵////////////
  129.              if(ly_lhj[2]==0x11 && ly_lhj[3]==0xee)
  130.                      dis_data[wei]=2;
  131.                   ///////////3鍵////////////
  132.              if(ly_lhj[2]==0x12 && ly_lhj[3]==0xed)
  133.                      dis_data[wei]=3;
  134.                   ///////////4鍵////////////
  135.              if(ly_lhj[2]==0x14 && ly_lhj[3]==0xeb)
  136.                      dis_data[wei]=4;
  137.                   ///////////5鍵////////////
  138.              if(ly_lhj[2]==0x15 && ly_lhj[3]==0xea)
  139.                      dis_data[wei]=5;
  140.                   ///////////6鍵////////////
  141.              if(ly_lhj[2]==0x16 && ly_lhj[3]==0xe9)
  142.                      dis_data[wei]=6;
  143.                   ///////////7鍵////////////
  144.              if(ly_lhj[2]==0x18 && ly_lhj[3]==0xe7)
  145.                      dis_data[wei]=7;
  146.                   ///////////8鍵////////////
  147.              if(ly_lhj[2]==0x19 && ly_lhj[3]==0xe6)
  148.                      dis_data[wei]=8;
  149.                   ///////////9鍵////////////
  150.              if(ly_lhj[2]==0x1a && ly_lhj[3]==0xe5)
  151.                      dis_data[wei]=9;

  152.                       ///////////時間設置返回 menu鍵////////////
  153.                  if(ly_lhj[2]==0x02 && ly_lhj[3]==0xfd)
  154.                     {
  155.                           hour=dis_data[0]*16 + dis_data[1];
  156.                           min=dis_data[2]*16 + dis_data[3];
  157.                           ds1302_initial();

  158.                            time_flag=0;


  159.                          //while(1);                  //基準時間設定后需要重新上電
  160.                          }
  161.             }

  162.          
  163.          }

  164. }

  165. //--------------------------------------------------------------------------------------------------
  166. // 函數名稱: 校驗時間函數                                                                                                 
  167. // 函數功能:   
  168. //--------------------------------------------------------------------------------------------------

  169. void meter_Init(void)
  170. {
  171.   
  172.     //////////定時器部分///////
  173.     TR0=0;       //disable timer0
  174.         TH0=0x3c;
  175.         TL0=0xb0;          //reload timer0
  176.         count=0;
  177.         ////////顯示部分/////////
  178.         led1=0;  led2=0; //點亮led
  179.         second=0;
  180.         dis_data[0]=0;
  181.         dis_data[1]=0;
  182.         dis_data[2]=0;
  183.         dis_data[3]=0;
  184. }
  185. //--------------------------------------------------------------------------------------------------
  186. // 函數名稱: 校驗時間函數                                                                                                 
  187. // 函數功能:  10倒計時到0  開始計時
  188. //--------------------------------------------------------------------------------------------------

  189. void time_meter(void)
  190. {        
  191.         meter_Init();

  192.   while(meter_flag==1)
  193.     {  
  194.             if(count==5 || count==10 || count==15 || count==19 )                   //沒200ms
  195.            {  DIS_change();
  196.                      if(last_sec!=read_sec)
  197.                      {       
  198.                      last_sec=read_sec;
  199.                         if(second==5999)
  200.                          second=second;
  201.                          else
  202.                      second++;

  203.                                                            
  204.                            dis_data[0]=second/60/10;
  205.                  dis_data[1]=second/60%10;
  206.                  dis_data[2]=second%60/10;
  207.                  dis_data[3]=second%60%10;
  208.                          
  209.                   
  210.                   }
  211.            }
  212.           delay_1ms(20);
  213.           display();

  214.            /**************遙控器操作不封*****************/
  215.              if(ly_flag)
  216.        {
  217.               ly_flag=0;       //清空標志
  218.            ///////////暫停開始  暫停鍵////////////
  219.           if(ly_lhj[2]==0x00 && ly_lhj[3]==0xff)
  220.             {TR0=~TR0;
  221.                  if(TR0==1)
  222.                    {DIS_change();last_sec=read_sec;}               
  223.                  }
  224.            ///////////重新開始 ok鍵////////////
  225.              if(ly_lhj[2]==0x09 && ly_lhj[3]==0xf6)
  226.              { meter_Init();}
  227.            ///////////返回時鐘模式 返回鍵////////////
  228.              if(ly_lhj[2]==0x06 && ly_lhj[3]==0xf9)
  229.              { meter_flag=0;TR0=1;}


  230.                 }
  231.             /****************************************/

  232.         }
  233. }
  234. //--------------------------------------------------------------------------------------------------
  235. // 函數名稱: setup(void)                                                                                                  
  236. // 函數功能: 設置
  237. //--------------------------------------------------------------------------------------------------
  238. void setup(void)   
  239. {
  240.   if(ly_flag)
  241.   {         ly_flag=0;       //清R空標志


  242.    
  243.         ///////////時間設置進入 menu鍵////////////
  244.         if(ly_lhj[2]==0x02 && ly_lhj[3]==0xfd)
  245.             { time_flag=1; TR0=0;ly_flag=0; adjust_time();TR0=1;}

  246.         ///////////目標清零  +////////////
  247.         //if(ly_lhj[2]==0x04 && ly_lhj[3]==0xfb)
  248.         //{target=0; data_transfer();eeprom();}
  249.         ///////////實際清零 _////////////
  250.         //if(ly_lhj[2]==0x0c && ly_lhj[3]==0xf3)
  251.         //{real=0; data_transfer();eeprom();}

  252.         ///////////segtime設置 ok鍵////////////
  253.         if(ly_lhj[2]==0x09 && ly_lhj[3]==0xf6)
  254.           { meter_flag=1;ly_flag=0; time_meter();}

  255.         ///////////選擇segtime////////////
  256.         //if(ly_lhj[2]==0x00 && ly_lhj[3]==0xff);


  257.    }
  258. }

  259. //--------------------------------------------------------------------------------------------------
  260. // 函數名稱:初始化函數
  261. // 函數功能:設定定時器工作方式,設定波特率
  262. //--------------------------------------------------------------------------------------------------
  263. /********************************/
  264. void Init(void)   
  265. {   
  266.     TMOD = 0x11;                                    //set timer0 & timer1 as mode 1 (16-bit)
  267.     ET0 = 1;                                         //enable timer0 interrupt
  268.         TH0=0x3c;
  269.         TL0=0xb0;
  270.         TR0=1;

  271.                                   //設置成下降沿觸發方式


  272.         EX0=1;                                        //開啟外部中斷0, 紅外接收頭
  273.         IT0=1;                                    //設置成下降沿觸發方式

  274.        
  275.     EA = 1;

  276. }
  277. /********************************/
  278. //--------------------------------------------------------------------------------------------------
  279. // 函數名稱:主函數
  280. // 函數功能:
  281. //--------------------------------------------------------------------------------------------------

  282.   void main()
  283. {
  284.    
  285.          
  286.         delay_1ms(1000);
  287.         //display();                     //先點亮數碼管
  288.         Init();
  289.         led1=0;
  290.         led2=0;

  291. while(1)
  292. {
  293.    delay_1ms(200);
  294.    
  295.    if(flash_flag==1) {led1=~led1;led2=~led2;flash_flag=0;}

  296.   if((count%5)==0)
  297.     { DIS_change();
  298.           
  299.           dis_data[0]=read_hour/16;
  300.           dis_data[1]=read_hour%16;
  301.           dis_data[2]=read_min/16;
  302.           dis_data[3]=read_min%16;
  303.    
  304.         }
  305.    display();
  306.    setup();       
  307.                      
  308.    

  309. }
  310. }
  311. //--------------------------------------------------------------------------------------------------
  312. // 函數名稱: 外中斷0入口函數,P32引腳,紅外線接收IC數據腳         使用timer1 計時                                                                                         
  313. // 函數功能:   
  314. //--------------------------------------------------------------------------------------------------
  315. void hongwai(void) interrupt 0
  316. {
  317.         unsigned char i,ia;
  318.         /**************開始判斷是否為NEC波形引導碼的前9MS和后4.5MS******************************/
  319.         TL1=0;
  320.         TH1=0;                                //定時/計數器1初始值
  321.         TR1=1;                                //定時器以12M晶振12分頻計數,(12M 1us)
  322.         while(!hwx);
  323.         TR1=0;                                //信號翻轉停止計數
  324.         if(TH1<30||TH1>40)        //NEC引導碼前9MS,計數約9000,TH1約等于35,給個誤差值,用30-40之
  325.                 return;

  326.         TH1=0;                                //定時/計數器1初始值
  327.         TR1=1;
  328.         while(hwx){
  329.                 delay();
  330.                 if(TH1>22)                //NEC引導碼引導碼的后4。5MS,計數約4500,TH1約等于17
  331.                         return;               
  332.         }
  333. ……………………

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

所有資料51hei提供下載:
FW 時鐘單面.rar (58.35 KB, 下載次數: 7)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区视频在线观看 | 成人免费视频网站在线看 | 综合色影院 | 欧美视频第二页 | 中文字幕一区二区三区四区 | 久久久蜜臀国产一区二区 | www.887色视频免费 | 欧美综合一区 | 国产亚洲精品精品国产亚洲综合 | 欧美美乳| 亚洲国产成人精品女人久久久 | 亚洲综合婷婷 | 你懂的在线视频播放 | 夜夜爽夜夜操 | 久久成人18免费网站 | 性色的免费视频 | 国产中文字幕网 | 一级黄色毛片免费 | 99精品国产一区二区青青牛奶 | 91视频国产一区 | 久久新视频| 午夜寂寞影院在线观看 | 在线一区二区三区 | 亚洲精品视频一区 | 成av在线 | av黄色免费 | 欧美成人激情 | 久久国产精品99久久久久久丝袜 | 国产成人一区二 | 亚洲精品欧美 | av中文字幕在线观看 | 超碰精品在线 | 91视频在线观看免费 | 中文字幕一区二区在线观看 | 国产清纯白嫩初高生视频在线观看 | 欧美成ee人免费视频 | 欧美三级电影在线播放 | 一区二区三区在线 | 天天综合久久 | 日本成人毛片 | 欧美一区二区 |