1
33
399
中级会员
使用道具 举报 送花
835
1万
2万
管理员
开发板现象
ISP usbcdc标识
vdgh*** 发表于 2026-1-2 10:21 学习心得-3 char *USER_STCISPCMD = "@STCISP#"; 这行代码定义了一个特殊的命令字符串。这是 STC 单片机的 ...
#include "ai8051u.h" //调用头文件 #include "stc32_stc8_usb.h" //调用头文件 #include "intrins.h" //d调用头文件 //注意:擎天柱的LED端口在P2,且没有三极管的电源控制,所以只要控制P2端口即可,按键通用,本节课程的其余内容均通用! #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速度 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中断 // Timer0_Init(); //定时器初始化 EA = 1; //IE |= 0X80; P40 = 0; while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置 while(1) { if (bUsbOutReady) //如果接收到了数据 { //USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试) 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++; P20 = 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; //关闭定时器 P20 = 1; P21 = 1; } while( P32 == 0 ); //等待P32松开 } } } } //void Timer0_Init(void) //3秒@24.000MHz 函数定义 //{ // TM0PS = 0x5B; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 ) // AUXR &= 0x7F; //定时器时钟12T模式 // TMOD &= 0xF0; //设置定时器模式 // TL0 = 0x3F; //设置定时初始值 // TH0 = 0x01; //设置定时初始值 // TF0 = 0; //清除TF0标志 // TR0 = 1; //定时器0开始计时 // ET0 = 1; //使能定时器0中断 // // //TM0PS = 91 // //12T /12 // // THO-TL0 = 319 // //} 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; P20 = state; P21 = !state; } 复制代码
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2026-2-12 18:02 , Processed in 0.117676 second(s), 83 queries .
Powered by Discuz! X3.5
© 2001-2026 Discuz! Team.