找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4|回复: 0
收起左侧

HC15P013A0_dome

[复制链接]
ID:1135245 发表于 2024-11-4 10:12 | 显示全部楼层 |阅读模式
  1. #include "holychip_define.h"
  2. #include "inital.h"
  3. #include "T0_INTERRUPT.h"
  4. ////////////////////////////////////////////////////////////////////////
  5. ////////////////////////////          子程序        ////////////////////////////
  6. ////////////////////////////////////////////////////////////////////////
  7. //******************************延时子程序******************************
  8. /*
  9. uS延时函数,含有输入参数 unsigned char t,无返回值
  10. unsigned char 是定义无符号字符变量,其值的范围是
  11. 0~255 精确延时请使用汇编,大致延时
  12. ------------------------------------------------*/
  13. void DelayUs(unsigned char t)
  14. {   
  15. while(--t);
  16. }
  17. /*------------------------------------------------
  18. mS延时函数,含有输入参数 unsigned int t,无返回值
  19. unsigned int 是定义无符号字符变量,其值的范围是
  20. 0~1024 精确延时请使用汇编
  21. ------------------------------------------------*/
  22. void DelayMs(unsigned int t)
  23. {
  24.         unsigned char count = 195;          
  25.         while(t--)
  26.         {
  27.                 while(count--);
  28.         }
  29. }
  30. ////////////////////////////////////////////////////////////////////////
  31. ////////////////////////////          变量定义        ////////////////////////////
  32. ////////////////////////////////////////////////////////////////////////

  33. //typedef unsigned char uchar;
  34. //typedef unsigned int uint;
  35. unsigned char timer_5ms=0;
  36. unsigned char key1_press_time=0;
  37. unsigned char key1_up_time=0;
  38. unsigned char key1_hold=0;
  39. unsigned char on=0;
  40. unsigned char k_on=0;
  41. unsigned char time1=0;
  42. unsigned char time2=0;
  43. //unsigned char time3=0;
  44. ////////////////////////////////////////////////////////////////////////
  45. ////////////////////////////          主程序        ////////////////////////////
  46. ////////////////////////////////////////////////////////////////////////

  47. void pwm_data()
  48. {                       
  49.         T1IE = 0;
  50. //        GIE  = 0;        
  51.         T1   = 0xF4;        //        244
  52.         T1LOAD = 0x34;        //重载  52
  53.         PWM0P = 26;                //占空比
  54.         T1CON = 0xC0;//11000000
  55. }
  56. void S1_scan()  
  57. {
  58.         if(!PORTB4)
  59.         {
  60.                 key1_up_time=0;
  61.                 key1_press_time++;
  62.                 if(key1_press_time>=6)
  63.                 {
  64.                         key1_press_time = 0;
  65.                         if(!key1_hold)
  66.                         {
  67.                                 key1_hold = 1;
  68.                                 on=1;
  69.                                 time1=0;
  70.                                 time2=0;
  71.                                 pwm_data();
  72.                         }
  73.                 }
  74.         }
  75.         else
  76.         {
  77.                 key1_press_time = 0;
  78.                 key1_up_time++;
  79.                 if(key1_up_time >= 6)
  80.                 {
  81.                         key1_up_time = 0;
  82.                         key1_hold = 0;
  83.                         k_on=0;
  84.                         on=0;
  85.                 }
  86.         }       
  87. }
  88. void        play1()
  89. {
  90.         if(on==1)
  91.         {
  92.                 PORTB0=0;
  93.                 time1++;
  94.                 if(time1>=100)
  95.                 {
  96.                         time1=0;
  97.                         time2++;
  98.                         if(time2>=200)
  99.                         {
  100.                                 time2=0;
  101.                                 on=0;
  102.                                 T1   = 0x00;
  103.                                 PORTB2=0;
  104.                         }
  105.                 }       
  106.         }
  107.         else
  108.         {       
  109.                 T1CON   = 0x00;
  110.                 PORTB2=0;
  111.                 PORTB0=1;
  112.         }
  113. }
  114. void        d_sleep()
  115. {
  116.         if(PORTB4&&key1_hold==0)
  117.         {
  118.                 if(!on)
  119.                 {
  120.                         if(!k_on)
  121.                         {
  122.                                 time1=0;
  123.                                 time2=0;
  124.                                 T1CON   = 0x00;
  125.                                 PORTB2=0;
  126.                                 PORTB0=1;
  127.                                 PORTB5=0;
  128.                                
  129.                                 TRISB=0X10;                //PORTB1端口为输入
  130.                                 IOCB=0X10;                //使能PORTB1端口为电平变化中断
  131.                                
  132.                                 PBIF=0;                        // PORTB电平变化中断请求标志清零
  133.                                 PBIE=1;                        //使能PORTB电平变化中断

  134.                                 GIE=1;                        //使能GIE
  135.                                
  136.                                
  137.                                 #asm
  138.                                 sleep
  139.                                 #endasm;
  140.                         }
  141.                 }
  142.         }
  143. }
  144. void main(void)
  145. {
  146.         inital();                                        //端口初始化
  147.         DelayMs(100);                                //延时等待系统供电稳定
  148.         T0_interrupt_inital();                //T0定时中断初始化
  149.        
  150. //        T1=0XFF;
  151. //        T1LOAD=0X31;                //设置T1周期,延时5ms,理论值为0X32,由于需要补偿其他语句的延时所以需要试凑为0X31
  152. //        T1CON=0X01;                        //设置分频比1:2
  153. ///        T1IE=1;                                //使能T1中断
  154. //        GIE=1;                                //使能全局中断
  155. //        T1EN=1;                                //使能T1
  156.        
  157. //        pwm_data();
  158.         while(1)
  159.         {       
  160.                
  161.         }
  162. }
  163. //*****************************中断服务程序*****************************
  164. //进中断时间=1/(时钟源/xT/分频比)*(256-T0初值)
  165. void interrupt Timer0_Isr(void)
  166. {
  167.         if(T0IF)                                //Judge T0IF
  168.         {
  169.                 T0IF=0;                                //Clear T0IF
  170.                 T0=100;                        //重置T0值,延时5ms,理论值为CE,由于需要补偿其他语句的延时所以需要试凑为D5
  171.                 timer_5ms++;
  172.                 if(timer_5ms>=12)
  173.                 {
  174.                         timer_5ms=0;
  175.                         if(!PORTB5)
  176.                         {
  177.                                 PORTB5=1;
  178.                         }
  179.                         else
  180.                         {
  181.                                 PORTB5=0;
  182.                         }
  183.                         S1_scan();
  184.                         play1();
  185.                         d_sleep();       
  186.                 }       
  187.         }
  188.         if(PBIF)                                        //Judge PBIF
  189.         {
  190.                 PBIF=0;                                        //Clear PBIF
  191.                 k_on=1;       
  192.         }
  193. }
复制代码

原理图: 无
仿真: 无
代码: HC15P013A0_dome.7z (112.61 KB, 下载次数: 1)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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