8051U深度入门到32位51,冲哥 新教学视频 学习打卡
本帖最后由 热心市民 于 2024-11-29 15:55 编辑第一集第二集快速看完
本帖最后由 热心市民 于 2024-11-29 15:55 编辑
第三集开始上手写代码
点亮led,最后8个灯全亮
本帖最后由 热心市民 于 2024-11-29 15:59 编辑
第四集usb不停电下载打卡成功,,跟着一步一步操作肯定是能成功的,冲哥真的教的非常的详细适合小白入门
第五集,C语言基础,
C语言USB-CDC串口之printf函数的实现·
1.打开USB库中的PRINTF HID宏定义(去掉//)
⒉理解PRINTF的函数原型的定义
如何打开PRINTF_HID功能
(小插曲
总结上节课不停电下载不成功的原因,1设置项目target未按要求设置,
2,usb_cdc的lib库函数没有添加成功)
继续学习
。
代码已通过
第六集IO的输入输出,学习打卡 完成
第七集学习打卡完成
第八集开始学习。。
#include "config.h"
#include "task.h"
#include "io.h"
u8 State={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 i;
//State
u8 Run_State = 0; //运行状态
u8 num = 0;
//u16 Count_300 = 0; //计数300ms变量
//u16 Count_600 = 0;
//u16 Count_900 = 0;
u16 Count_ms = {0,0,0};
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; //3个计时变量
void Delay10ms(void) //@24.000MHz
{
unsigned long edata i;
_nop_();
_nop_();
_nop_();
i = 59998UL;
while (i) i--;
}
void main(void)
{
// int count;
Sys_init(); //系统初始化
usb_init(); //USB CDC 接口配置
IE2 |= 0x80; //使能USB中断
Timer0_Init(); //定时器初始化
EA = 1;
P40=0;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while(1)
{
if (bUsbOutReady) //如果接收到数据
{
//USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done();
}
Task_Pro_Handler_Callback(); //执行函数
}
}
void Timer0_Isr(void) interrupt 1 //1毫秒执行一次
{
Task_Marks_Handler_Callback();
}
// Count_300++;
// Count_600++;
// Count_900++;
// state = !state; //变量取反0 1 0 1 0 1
// P00 = state;
// P01 = !state;
第九集 数码管
任务一:数码管静态的显示一个数字
任务二:显示“12345678”
任务三:显示时分秒
#include "config.h"
#include "task.h"
#include "io.h"
u8 State={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 i;
//State
u8 Run_State = 0; //运行状态
u8 num = 0;
//u16 Count_300 = 0; //计数300ms变量
//u16 Count_600 = 0;
//u16 Count_900 = 0;
u16 Count_ms = {0,0,0};
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; //3个计时变量
void Delay10ms(void) //@24.000MHz
{
unsigned long edata i;
_nop_();
_nop_();
_nop_();
i = 59998UL;
while (i) i--;
}
void main(void)
{
// int count;
Sys_init(); //系统初始化
usb_init(); //USB CDC 接口配置
IE2 |= 0x80; //使能USB中断
Timer0_Init(); //定时器初始化
Init_595(); //595端口初始化
EA = 1;
P40=0;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while(1)
{
if (bUsbOutReady) //如果接收到数据
{
//USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done();
}
Task_Pro_Handler_Callback(); //执行函数
}
}
void Timer0_Isr(void) interrupt 1 //1毫秒执行一次
{
Task_Marks_Handler_Callback();
}
// Count_300++;
// Count_600++;
// Count_900++;
// state = !state; //变量取反0 1 0 1 0 1
// P00 = state;
// P01 = !state;
第十集:虚拟键盘led和数码管学习
任务1:P2口流水灯,P10闪烁,成功
#include "io.h"
u8 State1 = 0; //LED1初始状态
u8 State2 = 0; //LED2初始状态
u8 State3 = 0; //LED3初始状态
u16 Key_Vol = 0; //按键按下持续时间
void LED0_Blink(void)
{
State1 = !State1;
P00 = State1;
}
void LED1_Blink(void)
{
State2 = !State2;
P01 = State2;
}
void LED2_Blink(void)
{
State3 = !State3;
P02 = State3;
}
void KEY_Task(void)
{
if( P32 == 0 )
{
Key_Vol++;
if( Key_Vol==5 )
{
//按键按下的任务
printf( "按键单击\r\n" );
}
}
else
{
Key_Vol = 0;
}
}
u8 P2_STATE=0x01;
u8 P10_STATE=0;
//任务1:P2口流水灯,P10闪烁
void TASK_1( void )
{
//------------------------P2端口流水灯---------------
LED40_SetPort(2,~P2_STATE); //点亮P20端口
P2_STATE=(P2_STATE<<1); //10000 0000->1 0000 0000
if(P2_STATE ==0)
P2_STATE=1;
//------------------------P10端口闪烁---------------
if (P10_STATE==0)
LED40_SetBit(1,0);
else
LED40_ClrBit(1,0);
P10_STATE=!P10_STATE;
}
任务2、
左边数码管显示P32按下次数
右边数码管显示P33按下次数
#include "io.h"
u8 State1 = 0; //LED1初始状态
u8 State2 = 0; //LED2初始状态
u8 State3 = 0; //LED3初始状态
u16 Key_Vol; //按键按下持续时间
u16 Key_Vol_2;
void LED0_Blink(void)
{
State1 = !State1;
P00 = State1;
}
void LED1_Blink(void)
{
State2 = !State2;
P01 = State2;
}
void LED2_Blink(void)
{
State3 = !State3;
P02 = State3;
}
u16KEY1_COUNT = 0; //p32计数
u16KEY2_COUNT = 0; //p33计数
void KEY_Task(void)
{
//--------------p32按钮计数-----------
if( P32 == 0 )
{
Key_Vol++;
if( Key_Vol==5 )
{
KEY1_COUNT++;
}
}
else
{
Key_Vol = 0;
}
//--------------p33按钮计数-----------
if( P33 == 0 )
{
Key_Vol_2++;
if( Key_Vol_2==5 )
{
KEY2_COUNT++;
}
}
else {
Key_Vol = 0;
}
}
u8 P2_STATE=0x01;
u8 P10_STATE=0;
//任务1:P2口流水灯,P10闪烁
void TASK_1( void )
{
//------------------------P2端口流水灯---------------
LED40_SetPort(2,~P2_STATE); //点亮P20端口
P2_STATE=(P2_STATE<<1); //10000 0000->1 0000 0000
if(P2_STATE ==0)
P2_STATE=1;
//------------------------P10端口闪烁---------------
if (P10_STATE==0)
LED40_SetBit(1,0);
else
LED40_ClrBit(1,0);
P10_STATE=!P10_STATE;
}
u32 KEY_Count = 0;
//任务2、左边数码管显示P32按下次数,右边数码管显示P33按下次数
void TASK_2( void )
{
KEY_Count=KEY1_COUNT*10000 + KEY2_COUNT;
SEG7_ShowLong(KEY_Count,10);
}
任务3:按下数字按键在数码管显示对应的按键数字!
#include "config.h"
#include "task.h"
#include "io.h"
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
extern u32 REC_NUM;
void main(void)
{
Sys_init(); //系统初始化
usb_init(); //USB CDC 接口配置
IE2 |= 0x80; //使能USB中断
Timer0_Init(); //定时器初始化
EA = 1; //IE |= 0X80;
P40 = 0;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while(1)
{
if (bUsbOutReady) //如果接收到了数据
{
REC_NUM=UsbOutBuffer-48;
//USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done(); //
}
Task_Pro_Handler_Callback(); //执行功能函数
}
}
void Timer0_Isr(void) interrupt 1 //1MS执行一次
{
Task_Marks_Handler_Callback(); //系统计时
}
页:
[1]