- 打卡等级:偶尔看看I
- 打卡总天数:16
- 最近打卡:2025-05-01 07:09:37
已绑定手机
中级会员
- 积分
- 233
|
发表于 2025-2-19 19:30:44
|
显示全部楼层
#include "ai8051u.h" //调用头文件
//不停电下载模板
#include "stc32_stc8_usb.h" //调用头文件
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
//不停电下载模板
//下面是全局变量-----------------------
bit single_double=0;
unsigned char GongDe=0x0;
//下面是函数定义-------------------------------
void Timer0_1S_Init(void); //1秒@40.000MHz
void Timer0_2S_Init(void); //1秒@40.000MHz
void Delay20ms(void) //@40.000MHz
{
unsigned char data i, j, k;
i = 5;
j = 15;
k = 240;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main(void)
{
EAXFR = 1; //使能(EA Enable )扩展寄存器XFR访问 EAXFR XFR(xtension Function Register 扩展功能寄存器) SFR(Special Function Register特殊功能寄存器)
WTST = 0; //程序读取等待控制寄存器WTST(Wait State)
CKCON = 0; //片内MCU扩展RAM数据总线时钟控制寄存器CKCON (Clock Control)
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;
//不停电下载模板
usb_init(); //USB CDC 接口配置
IE2 |= 0x80; //使能USB中断
EA = 1; //IE |= 0X80;
if (DeviceState != DEVSTATE_CONFIGURED)Delay20ms(); //等待USB完成配置
//不停电下载模板
while(1)
{
if (P32 == 0)
{
Delay20ms();
if (P32 == 0 )
{
single_double=~single_double;
if(single_double)
{
printf("双倍功德时间\r\n");
}else{
printf("单倍功德时间\r\n");
}
}
while(~P32); //等待松按钮
}
if (P33 == 0)
{
Delay20ms();
if (P33 == 0)
{
if(single_double) //根据单双功德初始Timer0
{
Timer0_2S_Init();
}else{
Timer0_1S_Init();
}
P20=0; //开灯
GongDe=GongDe+(char)single_double + 1;
printf("功德+%d 当前功德:%d\r\n" , 1+(char)single_double , GongDe);
}
while(~P33); //等待松按钮
}
// 不停电下载模板
// if (bUsbOutReady){
// USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
// printf("测试printf\r\n");
// usb_OUT_done();
// }
// 不停电下载模板
}
}
void Timer0_Isr(void) interrupt 1
{
P20=1;
TR0=0;
}
void Timer0_1S_Init(void) //1秒@40.000MHz
{
TM0PS = 0x32; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xB1; //设置定时初始值
TH0 = 0x00; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
void Timer0_2S_Init(void) //2秒@40.000MHz
{
TM0PS = 0x65; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xB1; //设置定时初始值
TH0 = 0x00; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
|
|