標(biāo)題:
HC15P013A0_dome
[打印本頁]
作者:
tianshizhiren
時間:
2024-11-4 10:12
標(biāo)題:
HC15P013A0_dome
#include "holychip_define.h"
#include "inital.h"
#include "T0_INTERRUPT.h"
////////////////////////////////////////////////////////////////////////
//////////////////////////// 子程序 ////////////////////////////
////////////////////////////////////////////////////////////////////////
//******************************延時子程序******************************
/*
uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 精確延時請使用匯編,大致延時
------------------------------------------------*/
void DelayUs(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時函數(shù),含有輸入?yún)?shù) 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電平變化中斷請求標(biāo)志清零
PBIE=1; //使能PORTB電平變化中斷
GIE=1; //使能GIE
#asm
sleep
#endasm;
}
}
}
}
void main(void)
{
inital(); //端口初始化
DelayMs(100); //延時等待系統(tǒng)供電穩(wěn)定
T0_interrupt_inital(); //T0定時中斷初始化
// T1=0XFF;
// T1LOAD=0X31; //設(shè)置T1周期,延時5ms,理論值為0X32,由于需要補(bǔ)償其他語句的延時所以需要試湊為0X31
// T1CON=0X01; //設(shè)置分頻比1:2
/// T1IE=1; //使能T1中斷
// GIE=1; //使能全局中斷
// T1EN=1; //使能T1
// pwm_data();
while(1)
{
}
}
//*****************************中斷服務(wù)程序*****************************
//進(jìn)中斷時間=1/(時鐘源/xT/分頻比)*(256-T0初值)
void interrupt Timer0_Isr(void)
{
if(T0IF) //Judge T0IF
{
T0IF=0; //Clear T0IF
T0=100; //重置T0值,延時5ms,理論值為CE,由于需要補(bǔ)償其他語句的延時所以需要試湊為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;
}
}
復(fù)制代碼
原理圖: 無
仿真: 無
代碼:
HC15P013A0_dome.7z
(112.61 KB, 下載次數(shù): 3)
2024-11-4 13:14 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1