标题:
HC15P013A0_dome
[打印本页]
作者:
tianshizhiren
时间:
2024-11-4 10:12
标题:
HC15P013A0_dome
#include "holychip_define.h"
#include "inital.h"
#include "T0_INTERRUPT.h"
////////////////////////////////////////////////////////////////////////
//////////////////////////// 子程序 ////////////////////////////
////////////////////////////////////////////////////////////////////////
//******************************延时子程序******************************
/*
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 精确延时请使用汇编,大致延时
------------------------------------------------*/
void DelayUs(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号字符变量,其值的范围是
0~1024 精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned int t)
{
unsigned char count = 195;
while(t--)
{
while(count--);
}
}
////////////////////////////////////////////////////////////////////////
//////////////////////////// 变量定义 ////////////////////////////
////////////////////////////////////////////////////////////////////////
//typedef unsigned char uchar;
//typedef unsigned int uint;
unsigned char timer_5ms=0;
unsigned char key1_press_time=0;
unsigned char key1_up_time=0;
unsigned char key1_hold=0;
unsigned char on=0;
unsigned char k_on=0;
unsigned char time1=0;
unsigned char time2=0;
//unsigned char time3=0;
////////////////////////////////////////////////////////////////////////
//////////////////////////// 主程序 ////////////////////////////
////////////////////////////////////////////////////////////////////////
void pwm_data()
{
T1IE = 0;
// GIE = 0;
T1 = 0xF4; // 244
T1LOAD = 0x34; //重载 52
PWM0P = 26; //占空比
T1CON = 0xC0;//11000000
}
void S1_scan()
{
if(!PORTB4)
{
key1_up_time=0;
key1_press_time++;
if(key1_press_time>=6)
{
key1_press_time = 0;
if(!key1_hold)
{
key1_hold = 1;
on=1;
time1=0;
time2=0;
pwm_data();
}
}
}
else
{
key1_press_time = 0;
key1_up_time++;
if(key1_up_time >= 6)
{
key1_up_time = 0;
key1_hold = 0;
k_on=0;
on=0;
}
}
}
void play1()
{
if(on==1)
{
PORTB0=0;
time1++;
if(time1>=100)
{
time1=0;
time2++;
if(time2>=200)
{
time2=0;
on=0;
T1 = 0x00;
PORTB2=0;
}
}
}
else
{
T1CON = 0x00;
PORTB2=0;
PORTB0=1;
}
}
void d_sleep()
{
if(PORTB4&&key1_hold==0)
{
if(!on)
{
if(!k_on)
{
time1=0;
time2=0;
T1CON = 0x00;
PORTB2=0;
PORTB0=1;
PORTB5=0;
TRISB=0X10; //PORTB1端口为输入
IOCB=0X10; //使能PORTB1端口为电平变化中断
PBIF=0; // PORTB电平变化中断请求标志清零
PBIE=1; //使能PORTB电平变化中断
GIE=1; //使能GIE
#asm
sleep
#endasm;
}
}
}
}
void main(void)
{
inital(); //端口初始化
DelayMs(100); //延时等待系统供电稳定
T0_interrupt_inital(); //T0定时中断初始化
// T1=0XFF;
// T1LOAD=0X31; //设置T1周期,延时5ms,理论值为0X32,由于需要补偿其他语句的延时所以需要试凑为0X31
// T1CON=0X01; //设置分频比1:2
/// T1IE=1; //使能T1中断
// GIE=1; //使能全局中断
// T1EN=1; //使能T1
// pwm_data();
while(1)
{
}
}
//*****************************中断服务程序*****************************
//进中断时间=1/(时钟源/xT/分频比)*(256-T0初值)
void interrupt Timer0_Isr(void)
{
if(T0IF) //Judge T0IF
{
T0IF=0; //Clear T0IF
T0=100; //重置T0值,延时5ms,理论值为CE,由于需要补偿其他语句的延时所以需要试凑为D5
timer_5ms++;
if(timer_5ms>=12)
{
timer_5ms=0;
if(!PORTB5)
{
PORTB5=1;
}
else
{
PORTB5=0;
}
S1_scan();
play1();
d_sleep();
}
}
if(PBIF) //Judge PBIF
{
PBIF=0; //Clear PBIF
k_on=1;
}
}
复制代码
原理图: 无
仿真: 无
代码:
HC15P013A0_dome.7z
(112.61 KB, 下载次数: 3)
2024-11-4 13:14 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1