#ifndef __EXIT_H
#define __EXIT_H
#include "COMM/stc.h" //调用头文件
#include "COMM/usb.h"
//------------------------------变量声明------------------------------
//------------------------------函数声明------------------------------
void INT0_Init(void); //外部中断0的初始化
#endif
exit.C
#include "exit.h"
//========================================================================
// 函数名称: INT0_Init
// 函数功能: 外部中断0初始化
// 入口参数: 无
// 函数返回: 去
// 当前版本: VER1.0
// 修改日期: 2023
// 当前作者:
// 其他备注:
//========================================================================
void INT0_Init(void) //外部中断0的初始化
{
IT0 = 1; //1:下降沿中断 0:上升下降沿中断
EX0 = 1; //允许中断
IE0 = 0; //清除中断标志位
}
#ifndef __TIM0_H
#define __TIM0_H
#include "COMM/stc.h" //调用头文件
#include "COMM/usb.h"
//------------------------------函数声明------------------------------
void Timer0_Init(void); //1毫秒@24.000MHz
#endif
tim0.C
#include "tim0.h"
//========================================================================
// 函数名称: Timer0_Init
// 函数功能: 定时器0初始化
// 入口参数: 无
// 函数返回: 无
// 当前版本: VER1.0
// 修改日期: 2023
// 当前作者:
// 其他备注:
//========================================================================
void Timer0_Init(void) //1毫秒@24.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x30; //设置定时初始值
TH0 = 0xF8; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
Demo.C
#include "COMM/stc.h" //调用头文件
#include "COMM/usb.h"
#include "seg_led.h"
#include "key.h"
#include "beep.h"
#include "tim0.h"
#include "exit.h"
#define MAIN_Fosc 24000000UL //定义主时钟
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
bit TIM_10MS_Flag; //10ms的标志位
void sys_init(); //函数声明
void delay_ms(u16 ms); //unsigned int
void main() //程序开始运行的入口
{
u8 i;
u8 KEY_NUM = 0; //保存矩阵按键的键码
u8 KEY_Str = 0; //表示当前输入了几个密码位
sys_init(); //USB功能+IO口初始化
usb_init(); //usb库初始化
Timer0_Init(); //定时器0初始化
INT0_Init(); //外部中断0初始化
EA = 1; //CPU开放中断,打开总中断。
SEG0 = 0;
SEG1 = 0;
LED = 0xff; //初始状态熄灭所有LED
while(1) //死循环
{
if( DeviceState != DEVSTATE_CONFIGURED ) //
continue;
if( bUsbOutReady )
{
usb_OUT_done();
}
for(i=0;i<8;i++) //循环八次
{
LED = ~(1<<i); //当前i是几,就点亮第几个LED
delay_ms(500); //验收500ms
}
if( P33 ==0 ) //如果P33按下了
SEG1 += 1; //数码管1的数值+1
}
}
void INT0_Isr(void) interrupt 0
{
SEG0 += 1; //数码管0的数值+1
}
void Timer0_Isr(void) interrupt 1
{
static timcount = 0;
SEG_LED_Show(); //数码管刷新的
timcount++; //1ms+1
if( timcount>=10 ) //如果这个变量大于等于10,10ms计数到达
{
timcount = 0;
TIM_10MS_Flag = 1; //10ms时间到了
}
}
void sys_init() //函数定义
{
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
P0M1 = 0x00; P0M0 = 0x00; //设置为准双向口
P1M1 = 0x00; P1M0 = 0x00; //设置为准双向口
P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口
P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口
P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
P3M0 = 0x00;
P3M1 = 0x00;
P3M0 &= ~0x03;
P3M1 |= 0x03;
//设置USB使用的时钟源
IRC48MCR = 0x80; //使能内部48M高速IRC
while (!(IRC48MCR & 0x01)); //等待时钟稳定
USBCLK = 0x00; //使用CDC功能需要使用这两行,HID功能禁用这两行。
USBCON = 0x90;
}
void delay_ms(u16 ms) //unsigned int
{
u16 i;
do
{
i = MAIN_Fosc/6000;
while(--i);
}while(--ms);
}