2
7
76
注册会员
使用道具 举报 送花
#define PRINTF_HID //printf输出直接重定向到USB HID接口 int printf_hid (const char *fmt, ...); #if defined PRINTF_SEGLED #define printf SEG7_ShowString #elif defined PRINTF_HID #define printf printf_hid //#define 替换名 被替换名 #endif复制代码
#include "ai8051u.h" //调用头文件 #include "stc32_stc8_usb.h" //调用头文件 #include "intrins.h" //d调用头文件 #define u8 unsigned char // 8位无符号变量(0-255) #define u16 unsigned int // 16位无符号变量(0-65535) u8 state = 0; // 初始状态 u8 Run_State = 0; // 运行状态 char *USER_DEVICEDESC = NULL; char *USER_PRODUCTDESC = NULL; char *USER_STCISPCMD = "@STCISP#"; void Delay20ms(void) //@24.000MHz Delay20ms(); { unsigned long edata i; _nop_(); _nop_(); i = 119998UL; while (i) i--; } void Timer0_Init(void); // 3秒@24.000MHz //函数声明 void main(void) { int count = 1; // 按键计数变量 WTST = 0; // 设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快 EAXFR = 1; // 扩展寄存器(XFR)访问使能 CKCON = 0; // 提高访问XRAM速度 usb_init(); // USB CDC 接口配置 IE2 |= 0x80; // 使能USB中断 EA = 1; // IE |= 0X80; P40 = 0; while (DeviceState != DEVSTATE_CONFIGURED) ; // 等待USB完成配置 while (1) { if (bUsbOutReady) // 如果接收到了数据 { usb_OUT_done(); // } // 任务1: if (P32 == 0) // 判断P32按钮是否按下 { Delay20ms(); // 延时20ms消抖 if (P32 == 0) { printf("按键按下次数\xfd:%d 次\r\n", (int)count); count++; while (P32 == 0) ; // 等待P32松开 } } // 任务2:灯按一下点亮三秒后熄灭。 if (P32 == 0) // 判断P32按钮是否按下 { Delay20ms(); // 延时20ms消抖 if (P32 == 0) { printf("按键按下次数\xfd:%d 次\r\n", (int)count); count++; P00 = 0; Timer0_Init(); while (P32 == 0) ; // 等待P32松开 } } // 任务3:救护车灯控制器,按下报警按钮,红蓝交替闪烁(LED1和LED2表示红和蓝灯),再按一下报警按钮,红蓝灯停止。 if (P32 == 0) // 判断P32按钮是否按下 { Delay20ms(); // 延时20ms消抖 if (P32 == 0) { Run_State = !Run_State; // 运行状态取反 if (Run_State == 1) // 运行 { Timer0_Init(); } else { TR0 = 0; // 关闭定时器 P00 = 1; P01 = 1; } while (P32 == 0) ; // 等待P32松开 } } } } void Timer0_Init(void) // 500毫秒@24.000MHz { TM0PS = 0x0F; // 设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 ) AUXR &= 0x7F; // 定时器时钟12T模式 TMOD &= 0xF0; // 设置定时器模式 TL0 = 0xDC; // 设置定时初始值 TH0 = 0x0B; // 设置定时初始值 TF0 = 0; // 清除TF0标志 TR0 = 1; // 定时器0开始计时 ET0 = 1; // 使能定时器0中断 } void Timer0_Isr(void) interrupt 1 // 3秒执行一次 { state = !state; P00 = state; P01 = !state; }复制代码
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-6-30 13:29 , Processed in 0.131589 second(s), 84 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.