找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2390|回复: 0
打印 上一主题 下一主题
收起左侧

松翰SN8F5702红外发射的程序

[复制链接]
跳转到指定楼层
楼主
ID:231364 发表于 2017-10-25 17:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚学不喜勿碰.
单片机源程序如下:
  1. #include "SN8F5702.h"

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. sbit LED=P1^2;
  5. sbit K1=P1^3;

  6. u8 code array[4]={0xff,0xff,0xff,0xff};

  7. u8 key_shake,j,flag,start,i,a,succ,dat;
  8. //key_shake°′¼üÏû¶¶   j°′¼ü2»Öظ′±äá¿  flag±ê¼Ç°′¼ü°′ÏÂ2Å·¢éä  startÆô¶ˉ·¢éä  a·¢Ëíμú¼¸¸öêy×é  succ·¢éä3é1|±ê¼Ç  datêy¾Y

  9. u16 delay,delay_1,delay_2,time;
  10. //delay·¢éäòyμ¼ÂëμÄÑóê±  delay_1·¢éä¸ß1μÄÑóê±  delay_2·¢éäμí0μÄÑóê±   time·¢éäêy¾Y8¸ö×Ö½úμıäá¿

  11. void Timer0Tnit()
  12. {
  13.         TMOD|=0X01;                //Ñ¡ÔñÎa¶¨ê±Æ÷0ģ꽣¬1¤×÷·½ê½1£¬½öóÃTR0′ò¿aÆô¶ˉ¡£

  14.         TH0=0Xff;      
  15.         TL0=0X7f;                //¸ø¶¨ê±Æ÷¸33õÖ죬¶¨ê±100us
  16.                                          
  17.         ET0=1;                        //′ò¿a¶¨ê±Æ÷0ÖD¶ÏÔêDí
  18.         EAL=1;                        //′ò¿a×üÖD¶Ï
  19.         TR0=1;                        //′ò¿a¶¨ê±Æ÷
  20. }

  21. void key()//°′¼ü
  22. {
  23.         if(!K1)
  24.         {
  25.                 if(!j)
  26.                 {
  27.                         key_shake++;
  28.                         if(key_shake>=250)
  29.                         {
  30.                                 key_shake=0;
  31.                                 flag=1;
  32.                         }
  33.                 }
  34.         }
  35.         else
  36.         {
  37.                 key_shake=0;
  38.         }
  39. }

  40. void Writeh()//·¢éä¸ß1
  41. {
  42.         delay_1++;
  43.         if(delay_1>=5)
  44.         {
  45.                 LED=0;
  46.                 if(delay_1>=20)
  47.                 {
  48.                         delay_1=0;
  49.                         succ=1;
  50.                 }
  51.         }
  52.         else
  53.         {
  54.                 LED=1;
  55.         }
  56. }

  57. void Writel()//·¢éäμí0
  58. {
  59.         delay_2++;
  60.         if(delay_2>=5)
  61.         {
  62.                 LED=0;
  63.                 if(delay_2>10)
  64.                 {
  65.                         delay_2=0;
  66.                         succ=1;
  67.                 }
  68.         }
  69.         else
  70.         {
  71.                 LED=1;
  72.         }
  73. }

  74. void Emiss()
  75. {
  76.         if((dat&0x01)==0x01)//′ó×îμíλ¿aê¼·¢
  77.         {
  78.                 Writeh();
  79.         }
  80.         else
  81.         {
  82.                  Writel();
  83.         }
  84.         if(succ==1)
  85.         {
  86.                 succ=0;
  87.                 dat>>=1;
  88.                 time++;
  89.                 if(time>=8)
  90.                 {
  91.                         time=0;
  92.                         a++;
  93.                         dat=array[a];
  94.                         if(a==5)
  95.                         {
  96.                                 a=0;
  97.                                 dat=array[a];
  98.                                 flag=0;
  99.                                 start=0;
  100.                         }
  101.                 }
  102.         }
  103. }

  104. void EmissionInit()
  105. {
  106.         switch(start)
  107.         {
  108.                 case(0):
  109.                         LED=1;
  110.                         delay++;
  111.                         if(delay>=90)
  112.                         {
  113.                                 delay=0;
  114.                                 start=1;
  115.                                 LED=0;
  116.                         }
  117.                         break;
  118.                 case(1):
  119.                         LED=0;
  120.                         delay++;
  121.                         if(delay>=45)
  122.                         {
  123.                                 delay=0;
  124.                                 start=2;
  125.                         }      
  126.                         break;
  127.                 case(2):
  128.                         Emiss();
  129.                         break;      
  130.                 }
  131. }

  132. void main()
  133. {
  134.                 CLKSEL = 0x06;                                                        // Fcpu = 32M/2 = 16M
  135.                 CLKCMD = 0X69;
  136.                 CKCON = 0X10;                                                                // Wait        2 Cycle From = 8M
  137.       

  138. //-----IO init -----//

  139.                 P0M        = 0xFf;                //1111 111
  140.                 P0        = 0x00;
  141.                 P0UR        = 0x00;
  142.       
  143.                 P1M        = 0xF7;                //1111 0111   ′ò¿a°′¼üIO¿ú½óêÕ
  144.                 P1        = 0x00;
  145.                 P1UR        = 0x08;      
  146.                 P1W = 0x00;
  147.       
  148.                 P2M        = 0xFf;                //0000 0011
  149.                 P2        = 0x00;
  150.                 P2UR        =0x00;
  151.       
  152.                 _nop_();
  153.                 Timer0Tnit();
  154.                 dat=array[a];
  155.                 while(1);
  156. }

  157. void Timer0()interrupt ISRTimer0
  158. {
  159.         TH0=0xff;
  160.         TL0=0x7f;
  161.         key();
  162.         if(flag==1)
  163.         {
  164.                 EmissionInit();
  165.         }
  166. }

复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表