5
19
149
注册会员
lsd.uvproj
2025-3-30 06:12 上传
点击文件名下载附件
12.21 KB, 下载次数: 4
使用道具 举报 送花
3
1160
1031
等待验证会员
#include <AI8051U.H> #include "ai_usb.h" u8 ucLed = 0xfe; void Led_Disp(u8 ucLed) { P40 = 0; P0 = ucLed; } void Delay1ms(void) //@40.000MHz { unsigned long edata i; _nop_(); _nop_(); _nop_(); i = 9998UL; while (i) i--; } void delay(u16 xms) { u16 i; for(i = xms; i > 0; i--) { Delay1ms(); } } void main() { EAXFR = 1; WTST = 0; CKCON = 0; P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; P6M0 = 0x00; P6M1 = 0x00; P7M0 = 0x00; P7M1 = 0x00; usb_init(); EA = 1; while(1) { if(bUsbOutReady) { usb_OUT_done(); } Led_Disp(ucLed); ucLed = _crol_(ucLed,1); delay(1000); } } 复制代码
#include <AI8051U.H> #include "ai_usb.h" u8 ucLed[] = {0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; u8 Key_Num = 0; void Led_Disp(u8 ucLed) { P40 = 0; P0 = ucLed; } //void Delay1ms(void) //@40.000MHz //{ // unsigned long edata i; // _nop_(); // _nop_(); // _nop_(); // i = 9998UL; // while (i) i--; //} //void delay(u16 xms) //{ // u16 i; // for(i = xms; i > 0; i--) // { // Delay1ms(); // } //} void main() { EAXFR = 1; WTST = 0; CKCON = 0; P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; P6M0 = 0x00; P6M1 = 0x00; P7M0 = 0x00; P7M1 = 0x00; usb_init(); EA = 1; while(1) { if(bUsbOutReady) { usb_OUT_done(); } // 任务1:按下P32按钮灯亮,松开P32按钮灯灭; // if(P32 == 0) // { // Led_Disp(0x00); // } // else // { // Led_Disp(0xff); // } // 任务2:按下P32按钮灯灭,松开P32按钮灯亮; // if(P32 == 0) // { // Led_Disp(0xff); // } // else // { // Led_Disp(0x00); // } // 课后小练1:按一下灯亮,按一下灯灭; // if(P32 == 0) // { // delay(20); // if(P32 == 0) // { // while(P32 == 0); // ucLed = ~ucLed; // } // } // Led_Disp(ucLed); // 课后任务2:按一下亮一颗灯,在按一下亮两颗灯,直到全亮(变量+加法和乘法) if(P32 == 0) { delay(20); if(P32 == 0) { while(P32 == 0); if(++Key_Num > 8)Key_Num = 0; Led_Disp(ucLed[Key_Num]); } } } } 复制代码
#include <AI8051U.H> #include "ai_usb.h" #define u8 unsigned char #define u16 unsigned int u8 state = 0x00; u8 Key_Count = 0; void Led_Disp(u8 ucLed) { P40 = 0; P0 = ucLed; } void Delay20ms(void) //@40.000MHz { unsigned long edata i; _nop_(); _nop_(); i = 199998UL; while (i) i--; } void Timer0_Init(void) //3秒@40.000MHz { TM0PS = 0x98; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 ) AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0xB1; //设置定时初始值 TH0 = 0x00; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //使能定时器0中断 } void main() { EAXFR = 1; WTST = 0; CKCON = 0; P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; P6M0 = 0x00; P6M1 = 0x00; P7M0 = 0x00; P7M1 = 0x00; usb_init(); Timer0_Init(); EA = 1; while(1) { if(bUsbOutReady) { usb_OUT_done(); } if(P32 == 0) { Delay20ms(); if(P32 == 0) { while(P32 == 0); Key_Count++; printf_usb("按键次数\xfd %d",(int)Key_Count); } } } } void Timer0_Isr(void) interrupt 1 { state = ~state; Led_Disp(state); }复制代码
//////////////////////////////////////// // 文件名称: main.c // 文件描述: // 文件版本: V1.0 // 修改记录: // 1. (2025-04-19) 创建文件 //////////////////////////////////////// #include "config.h" //默认已包含stdio.h、intrins.h、ai_usb.h等头文件 bit t0_flag = 0; bit t1_flag = 0; //////////////////////////////////////// // 项目主函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void main(void) { SYS_Init(); P40 = 0; while (1) { if(t0_flag) { t0_flag = 0; printf_usb("Timer0!\r\n"); } if(t1_flag) { t1_flag = 0; printf_usb("Timer1!\r\n"); } USBLIB_OUT_Done(); //查询方式处理USB接收的数据 } } //////////////////////////////////////// // 系统初始化函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void SYS_Init(void) { EnableAccessXFR(); //使能访问扩展XFR AccessCodeFastest(); //设置最快速度访问程序代码 AccessIXramFastest(); //设置最快速度访问内部XDATA IAP_SetTimeBase(); //设置IAP等待参数,产生1us时基 P0M0 = 0x00; P0M1 = 0x00; //初始化P0口为准双向口模式 P1M0 = 0x00; P1M1 = 0x00; //初始化P1口为准双向口模式 P2M0 = 0x00; P2M1 = 0x00; //初始化P2口为准双向口模式 P3M0 = 0x00; P3M1 = 0x00; //初始化P3口为准双向口模式 P4M0 = 0x00; P4M1 = 0x00; //初始化P4口为准双向口模式 P5M0 = 0x00; P5M1 = 0x00; //初始化P5口为准双向口模式 P6M0 = 0x00; P6M1 = 0x00; //初始化P6口为准双向口模式 P7M0 = 0x00; P7M1 = 0x00; //初始化P7口为准双向口模式 TIMER0_Init(); //定时器0初始化 TIMER1_Init(); //定时器1初始化 USBLIB_Init(); //USB库初始化 EnableGlobalInt(); //使能全局中断 } //////////////////////////////////////// // 毫秒延时函数 // 入口参数: ms (设置延时的毫秒值) // 函数返回: 无 //////////////////////////////////////// void delay_ms(uint16_t ms) { uint16_t i; do { i = MAIN_Fosc / 6000; while (--i); } while (--ms); } //////////////////////////////////////// // 定时器0中断服务程序 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void TIMER0_ISR(void) interrupt TMR0_VECTOR { P00 = ~P00; t0_flag = 1; } //////////////////////////////////////// // 定时器1中断服务程序 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void TIMER1_ISR(void) interrupt TMR1_VECTOR { P07 = ~P07; t1_flag = 1; } //////////////////////////////////////// // USB库初始化函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void USBLIB_Init(void) { usb_init(); //初始化USB模块 USB_SetIntPriority(0); //设置中断为最低优先级 set_usb_ispcmd("@STCISP#"); //设置USB不停电下载命令 } //////////////////////////////////////// // 等待USB配置完成函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void USBLIB_WaitConfiged(void) { while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置 } //////////////////////////////////////// // USB设备接收数据处理程序 // 入口参数: 无 // 函数返回: 无 // bUsbOutReady:USB设备接收数据标志位 // OutNumber:USB设备接收到的数据长度 // UsbOutBuffer:保存USB设备接收到的数据 //////////////////////////////////////// void USBLIB_OUT_Done(void) { if (bUsbOutReady) //查询是否有接收到USB主机发送数据 { USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试 usb_OUT_done(); //当前包的数据处理完成,通知USB主机可以发送下一包数据 } } //////////////////////////////////////// // 定时器0初始化函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void TIMER0_Init(void) { #define T0_PSCR 102 #define T0_RELOAD (65536 - (float)SYSCLK / 12 / (T0_PSCR + 1) * 2 / 1) TIMER0_TimerMode(); //设置定时器0为定时模式 TIMER0_12TMode(); //设置定时器0为12T模式 TIMER0_Mode0(); //设置定时器0为模式0 (16位自动重载模式) TIMER0_DisableGateINT0(); //禁止定时器0门控 TIMER0_SetIntPriority(0); //设置中断为最低优先级 TIMER0_EnableInt(); //使能定时器0中断 TIMER0_SetPrescale(T0_PSCR); //设置定时器0的8位预分频 TIMER0_SetReload16(T0_RELOAD); //设置定时器0的16位重载值 TIMER0_Run(); //定时器0开始运行 } //////////////////////////////////////// // 定时器1初始化函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void TIMER1_Init(void) { #define T1_PSCR 25 #define T1_RELOAD (65536 - (float)SYSCLK / 12 / (T1_PSCR + 1) * 500 / 1000) TIMER1_TimerMode(); //设置定时器1为定时模式 TIMER1_12TMode(); //设置定时器1为12T模式 TIMER1_Mode0(); //设置定时器1为模式0 (16位自动重载模式) TIMER1_DisableGateINT1(); //禁止定时器1门控 TIMER1_SetIntPriority(0); //设置中断为最低优先级 TIMER1_EnableInt(); //使能定时器1中断 TIMER1_SetPrescale(T1_PSCR); //设置定时器1的8位预分频 TIMER1_SetReload16(T1_RELOAD); //设置定时器1的16位重载值 TIMER1_Run(); //定时器1开始运行 } 复制代码
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-5-2 02:41 , Processed in 0.151735 second(s), 96 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.